Repository navigation
v2.9.0
按「设置里该有的四类能力」逐项核对:Skill 已有、Prompt 只读、Plugin 缺失、知识库缺失。
补完后 Agent harness 的三个缺口(循环、输出上限、重试)也一并补上。
四类能力盘点与补齐
| 能力 | 补齐前 | 现在 |
|---|---|---|
| Skill | 4 个内置 + 自定义可增删、可绑定时 | 不变(已完备) |
| Prompt | agents/<name>/instructions.md 文件驱动,设置页不能改 |
新增「系统提示词」分区:可视化编辑、留空回落默认、4000 字上限、即时生效 |
| Plugin | 缺失:外部 MCP 服务器只能手改 backend/data/mcp.json,格式错一处整份失效 |
新增「插件(MCP)」分区:增删、测试连接、显示已发现工具;URL 凭据打码;写工具仍被禁止 |
| 知识库 | 缺失:附件只能附在单条消息上,不参与检索 | 新增「知识库」分区:上传文档→切片→BM25 检索→注入 system 消息;可逐个开关、删除 |
知识库实现(app/knowledge.py)
- 切片:段落优先 + 长段落带重叠滑窗(400 字 / 80 字重叠),避免把句子切断。
- 检索:复用 rank-bm25(与长期记忆同一套中文双字+单字分词),只保留 score > 0 的命中。
- 注入:拼成带文件名的片段,2400 字预算内按得分顺序截断。
- 开关:
knowledge_enabled(默认 on),关闭后完全不检索。 - 为什么不上向量库:与「本地优先、零外网」冲突(embedding 需外部 API 或几百 MB 本地模型);
接口按 retriever 设计,将来换向量实现只需替换rank_chunks。
Agent harness 加固
- 工具循环检测:连续 3 次用相同参数调同一工具时中断并告知模型「结果不会变化」。
此前只有 turn_cap 兜底,要烧满 5 轮才停。 - 输出上限:工具循环的模型调用补
max_tokens=2048,防超长生成拖到超时。 - 重试与超时:非流式调用补
num_retries=2+timeout=60(与流式路径对齐)。
验证
- 后端 786 通过(新增:MCP 管理 8、知识库纯函数 9、知识库接线 3、循环保护 6)。
- 知识库接线测试断言「入库文档的原文确实出现在 system 消息里」,非入库文档不出现。
- 前端 111 单测 + 21 e2e 通过;设置页 16 个分区逐页截图无报错。