前情提要:
我写了一个完全离线的 AI 编程助手-纲担(GangDan),聊聊背后的设计思路
完全离线本地运行的参考文献重命名、格式转换、知识库构建与问答工作流-Chou+NuoYi+Gangdan 三个工具联合使用
GangDan(纲担)升级:开源本地知识库 + 支持本地模型和在线模型的深度研究助手
GangDan(纲担)升级:给知识库加了个 Wiki,顺便聊聊为什么 RAG 不够用
这次主要是把聊天界面整理了一下,顺带修了向量数据库一个让人头疼的兼容性问题。
安装和更新:
pip install gangdan -U
gangdan --port 5001
聊聊具体干了啥。

聊天输入区之前是把所有东西塞在一个横向 flex 里面,文本框、按钮、翻译选项挤成一团。屏幕窄一点就乱了。现在改成了三层结构:上面是工具栏(AI 润色、翻译),中间是输入框,下面是操作按钮(发送、清空、导出这些)。每层之间用细线隔开,看起来像个整体卡片,不会散。
CSS 从各种内联样式全部挪到了 class 里面。之前 HTML 里到处是 style="margin:8px 0" 这种东西,改的时候一个对不上就报错。现在好歹都是有名字的 class 了,.chat-input-toolbar、.chat-actions、.advanced-params-panel 这种,以后改起来找得到。

高级参数面板也收拾了一下。之前是用 inline style 硬写 grid 布局,现在改成 CSS class 了,温度、距离阈值、最大输出三个参数在面板里用三列 grid 排着,比之前好看点。
知识库选择器那边加了个维度不匹配的提示。这个事情挺烦人的——之前用的 embedding 模型是 1024 维的,后来换成 nomic-embed-text,它输出 768 维。老数据还在旧集合里,新查询用的是新模型的向量,维度对不上就查不到东西。之前这个错误就是静默失败,控制台打个日志就没了,用户啥也看不到。

现在改了:搜索的时候如果维度不匹配,会专门打个明确的错误日志,告诉你哪个集合多少维、当前模型多少维,需要重新索引。知识库下拉列表里也会在每个有问题的集合旁边标个红标签,比如 ⚠️ 1024d→768d,一看就知道这个库得重建了。
VectorDBBase 抽象类加了 get_collection_dimension() 和 check_dimension_mismatch() 两个方法,ChromaDB、FAISS、InMemory 三个实现都补上了。/api/kb/list 接口也会给有问题的库带上 dimension_mismatch 字段,前端拿到就能显示。不过目前重新索引还是得手动操作,下次可以加个一键修复按钮。
还有之前的改动:provider API key 持久化、AppState 状态管理器、URL hash 导航、聊天历史 localStorage 存储、输出语言优先级链、知识库刷新按钮用文字而不是 emoji,这些还在,没动。
说实话,维度不匹配这个问题我之前也没太注意,直到发现知识库搜索啥都返回空才去查日志。这种错误就该第一时间告诉用户,而不是藏在 stderr 里面。好歹现在不会了。
改动之后测试跑了相关的用例,没出问题。
感谢各位朋友使用,有什么问题请留言,我看到后一定第一时间响应。
预览时标签不可点