ai最近一直火热,特别是春节期间的deepseek,连隔壁70岁的大爷都赞不绝口。公司近年来也在积极尝试一些场景的落地,从最初的chatgpt api调用到现在Dify + ollama + 开源模型私有化部署的架构,已经有不少的应用上线,本文主要讲述聊天界面定制化开发相关。
为什么定制化
Dify是一个强大的LLM应用开发平台,对于内部涉密的应用业务方要求需要提供权限控制,会话记录,以及不同业务部门对聊天界面风格交互都会有不同的要求等场景,加上我们部署采用官方镜像docker部署的方式,无法直接修改项目源码,最终聊天界面定制化开发方案,现在也有很多开源的方案比如ant-design-x,Dify也提供定制化方案,最终使用dify的方案无缝对接。
需求解决
Dify应用的访问链接是公开的方式,例如 origin/chat/h1Qy1NmFXt1dMSsk,暴露就可以随意访问。考虑到的方案以下3种(欢迎补充):
鉴权
- 应用内登录
设置输入字段,用户开始会话需要输入账号密码,调用鉴权接口,使用会话变量conversation_var
保存登录结果,需要判断登录有效性。优点:应用独立,缺点:需要重复配置,不支持agent应用。
- 统一鉴权工作流
设置输入字段,应用自编码,token(宿主平台)调用鉴权工作流,根据用户输入走不同条件分支,使用token调用宿主平台接口,不需要鉴权的跳过该环节,使用会话变量conversation_var
保存登录结果,需要判断登录有效性。优点:工作流可复用,缺点:产生多个条件分支,不支持agent应用。
- 定制化开发 url传递参数url?token=abc&appCode=cba, 结合配置文件。优点:流程复用 缺点:需要修改代码,token明文。
// config.ts
...
cba:{
authUrl:'';
botIcon:'';
...
}
...
UI界面定制开发
我们采用第三种,结合官方的定制化开源项目,踩坑开始。
该项目维护频率不高,最近更新应该是去年底。下面是大致的开发过程
业务:不用出现logo
开发:可
业务:ios聊天的时候输入框怎么超出屏幕了
开发:兼容问题,我改下
业务:设置了logo跟聊天头像怎么没有
开发:靠,开放api没有返回对应字段,配置文件+字段 ( botIcon)
业务:开场问题怎么没显示?还限制5个(新版不限)
开发:靠,这个api没返回((新版有返回),也没有这个组件。
业务: 怎么没有语音功能
开发:哦,我补下
业务:输入变量怎么上传不来文件
开发:我补下
业务:图片预览不了
业务:视频预览不了
业务:怎么图片上传不能用(版本升级,数据接口变动导致)
开发:掀桌。
还有很多缺少的,项目的issue可以看到一些,工作流一些工具,dify-client也没有增加新版接口,知识库引用片段显示等... 整体来说像ant-design-x,只是多了一些业务组件,只能用于简单的对话。
最终的大概效果
后面发现这样下去不是办法,跟官网的非定制版落后太多,而且dify基本每天都有更新,input组件就更新过一轮,造成私有项目维护工作量巨大。
终章
春节期间,基于dify跟dify-conversation 整合完整版的定制化聊天界面项目。 dify-conversation(该项目只同步官方组件,不包含鉴权,业务定制化等内容)
顺便完善了dify-client (^_^)
(╯‵□′)╯︵┻━┻~
官方又大改了聊天界面!!!