95dee5a70e
后端改进: - 改进 addCitationsToResponse 函数,更激进地添加来源标注 - 支持识别所有有实质内容的行(长度>5) - 优化特殊行的识别逻辑,保留'依据引用'、'分析'、'建议'等内容行 - 修复 go.mod 中 lib/pq 的依赖问题 - 优化字符串拼接效率(使用 fmt.Fprintf) - 添加 Scanner 错误检查 前端改进: - 优化徽章样式,增大尺寸和间距 - 改用 bg-blue-100 和 bg-orange-100 背景 - 添加 hover 效果和 cursor-pointer 配置优化: - LLM 服务地址改为 IP(192.168.1.6:18888),支持外部调用 - 本地服务保持 localhost,性能更优 测试: - 新增 6 个单元测试用例,全部通过 - 验证清单项、列表项、陈述句等各种格式的标注 文档: - 添加实现方案文档 - 添加用户使用指南
156 lines
5.0 KiB
Markdown
156 lines
5.0 KiB
Markdown
# 来源标注徽章实现方案
|
||
|
||
## 问题描述
|
||
|
||
在合规审查助手等应用中,用户看不到回复中的**知识库来源徽章**和**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`
|
||
|
||
**测试用例**:
|
||
1. ✅ 清单格式 - 为每个问题添加标注
|
||
2. ✅ 列表项 - 为每个列表项添加标注(无论是否以标点符号结尾)
|
||
3. ✅ 数字列表 - 为每个列表项添加标注
|
||
4. ✅ 陈述句 - 为陈述句添加标注
|
||
5. ✅ 无知识库 - 添加AI建议标注
|
||
6. ✅ 已有标注 - 不重复添加,但确保有来源说明块
|
||
|
||
## 效果示例
|
||
|
||
### 之前(无徽章)
|
||
```
|
||
劳动用工合规审查清单
|
||
一、劳动合同管理
|
||
劳动合同签订
|
||
|
||
是否所有员工均签订了书面劳动合同?
|
||
合同内容是否符合《劳动合同法》的相关规定?
|
||
```
|
||
|
||
### 之后(有徽章)
|
||
```
|
||
劳动用工合规审查清单
|
||
一、劳动合同管理
|
||
劳动合同签订
|
||
|
||
是否所有员工均签订了书面劳动合同? [[AI建议]]
|
||
合同内容是否符合《劳动合同法》的相关规定? [[AI建议]]
|
||
|
||
---
|
||
|
||
> **来源说明**
|
||
>
|
||
> **AI建议:**
|
||
> - 清单项目和检查问题
|
||
```
|
||
|
||
前端会将 `[[AI建议]]` 渲染为橙色徽章,用户可以清楚看到内容来源。
|
||
|
||
## 关键改进点
|
||
|
||
1. **列表项检测改进**:之前只检查以标点符号结尾的行,现在所有列表项都会被标注
|
||
2. **来源说明块统一处理**:确保所有回复都有来源汇总块
|
||
3. **系统提示词强化**:更明确地要求 LLM 遵守标注规则
|
||
4. **自动补充机制**:即使 LLM 没有完全遵守,后端也会自动补充缺失的标注
|
||
|
||
## 下一步优化方向
|
||
|
||
1. **方案B升级**:修改后端返回结构化数据,包含来源元数据
|
||
2. **再生成功能**:实现"重新生成"按钮,保留原有的来源标注
|
||
3. **来源溯源**:支持点击徽章查看完整的知识库原文
|
||
4. **统计分析**:追踪知识库引用率,优化知识库内容
|
||
|
||
## 修改文件列表
|
||
|
||
- `server/internal/handler/chat_llm.go` - 增强标注逻辑和系统提示词
|
||
- `server/internal/handler/chat_llm_test.go` - 新增测试用例(6个)
|
||
|
||
## 验证方式
|
||
|
||
```bash
|
||
# 运行测试
|
||
cd server
|
||
go test ./internal/handler -v -run TestEnhanceCitations
|
||
|
||
# 编译检查
|
||
go build -o /tmp/test-build ./cmd/server/
|
||
```
|
||
|
||
所有测试通过,代码编译成功。
|