f7a720204a
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
5.0 KiB
5.0 KiB
来源标注徽章实现方案
问题描述
在合规审查助手等应用中,用户看不到回复中的知识库来源徽章和AI建议徽章,无法区分内容来自知识库还是AI自身知识。
解决方案
采用三层实现方案:
1. 后端系统提示词强化(已完成)
文件:server/internal/handler/chat_llm.go - buildMessages() 方法
改进内容:
- 增强了系统提示词中的来源标注要求
- 明确指出每一句话、每一个列表项都必须标注来源
- 添加了"关键提醒"部分,说明系统会自动补充缺失的标注
- 特别强调清单、问卷、检查表等列表格式的内容必须逐项标注
格式要求:
- 知识库引用:
[[知识库:文献名称]]→ 渲染为蓝色徽章 - AI建议:
[[AI建议]]→ 渲染为橙色徽章
2. 后端自动标注增强(已完成)
文件:server/internal/handler/chat_llm.go - enhanceCitations() 等方法
改进内容:
a) 改进的标注检测逻辑
- 检测所有以句号、问号、感叹号结尾的陈述句
- 检测所有列表项(
-、*、数字列表),无论是否以标点符号结尾 - 这解决了之前清单项目(如"是否所有员工均签订了书面劳动合同?")没有被标注的问题
b) 统一的来源说明块处理
- 在
enhanceCitations()中统一处理来源说明块的添加 - 确保所有回复末尾都有来源汇总块,包括已有标注的回复
c) 智能标注决策
- 对于长内容(>100字)或包含"建议"、"注意"、"可以"等词的内容,标注为
[[AI建议]] - 对于短内容且有知识库的情况,标注为
[[知识库:xxx]]
3. 前端徽章渲染(已存在,无需修改)
文件:apps/web/src/components/ui/gov-markdown.tsx
现有功能:
preprocessCitations()函数将[[知识库:xxx]]转换为[xxx](#cite-kb)链接preprocessCitations()函数将[[AI建议]]转换为[AI建议](#cite-ai)链接- Markdown 渲染器的
a组件拦截这些特殊链接并渲染为彩色徽章 - 知识库徽章:蓝色背景 + BookOpen 图标
- AI建议徽章:橙色背景 + BrainCircuit 图标
工作流程
用户输入
↓
后端检索知识库 → 获取相关文献
↓
构建系统提示词 → 包含强化的标注要求
↓
调用 LLM 生成回复
↓
后端后处理 (enhanceCitations)
├─ 检查是否有标注
├─ 如果没有标注 → 自动添加
├─ 如果有部分标注 → 补充缺失的
└─ 确保末尾有来源说明块
↓
流式返回给前端
↓
前端 GovMarkdown 组件
├─ 预处理:转换标注格式
├─ 渲染:Markdown → HTML
└─ 徽章渲染:特殊链接 → 彩色徽章
↓
用户看到带有来源徽章的回复
测试覆盖
文件:server/internal/handler/chat_llm_test.go
测试用例:
- ✅ 清单格式 - 为每个问题添加标注
- ✅ 列表项 - 为每个列表项添加标注(无论是否以标点符号结尾)
- ✅ 数字列表 - 为每个列表项添加标注
- ✅ 陈述句 - 为陈述句添加标注
- ✅ 无知识库 - 添加AI建议标注
- ✅ 已有标注 - 不重复添加,但确保有来源说明块
效果示例
之前(无徽章)
劳动用工合规审查清单
一、劳动合同管理
劳动合同签订
是否所有员工均签订了书面劳动合同?
合同内容是否符合《劳动合同法》的相关规定?
之后(有徽章)
劳动用工合规审查清单
一、劳动合同管理
劳动合同签订
是否所有员工均签订了书面劳动合同? [[AI建议]]
合同内容是否符合《劳动合同法》的相关规定? [[AI建议]]
---
> **来源说明**
>
> **AI建议:**
> - 清单项目和检查问题
前端会将 [[AI建议]] 渲染为橙色徽章,用户可以清楚看到内容来源。
关键改进点
- 列表项检测改进:之前只检查以标点符号结尾的行,现在所有列表项都会被标注
- 来源说明块统一处理:确保所有回复都有来源汇总块
- 系统提示词强化:更明确地要求 LLM 遵守标注规则
- 自动补充机制:即使 LLM 没有完全遵守,后端也会自动补充缺失的标注
下一步优化方向
- 方案B升级:修改后端返回结构化数据,包含来源元数据
- 再生成功能:实现"重新生成"按钮,保留原有的来源标注
- 来源溯源:支持点击徽章查看完整的知识库原文
- 统计分析:追踪知识库引用率,优化知识库内容
修改文件列表
server/internal/handler/chat_llm.go- 增强标注逻辑和系统提示词server/internal/handler/chat_llm_test.go- 新增测试用例(6个)
验证方式
# 运行测试
cd server
go test ./internal/handler -v -run TestEnhanceCitations
# 编译检查
go build -o /tmp/test-build ./cmd/server/
所有测试通过,代码编译成功。