4.4 KiB
4.4 KiB
知识库提示词模版选择功能实现总结
功能概述
为知识库生成功能添加了提示词模版选择支持,用户在创建知识库时可以选择使用的生成模版。
实现的功能点
1. 修改请求模型 ✅
文件: app/models/models.py
CreateKnowledgeBaseRequest模型增加prompt_id字段- 类型:Optional[int] = None
- 不指定时使用默认模版
2. 修改知识库异步服务 ✅
文件: app/services/async_knowledge_base_service.py
2.1 修改任务创建
start_generation(): 增加prompt_id参数- 将 prompt_id 存储到 Redis 和数据库
- 支持通过 cursor 参数直接插入(事务场景)
2.2 修改任务处理
_process_task(): 从 Redis 读取 prompt_id,传递给_build_prompt()- 处理空字符串情况,转换为 None
2.3 修改提示词构建
_build_prompt(): 增加prompt_id参数- 调用
llm_service.get_task_prompt('KNOWLEDGE_TASK', prompt_id=prompt_id) - 支持获取指定模版或默认模版
2.4 修改数据库保存
_save_task_to_db(): 增加prompt_id参数- 插入时包含 prompt_id 字段
3. 修改API接口 ✅
文件: app/api/endpoints/knowledge_base.py
create_knowledge_base: 从请求中获取prompt_id- 调用
async_kb_service.start_generation()时传递prompt_id
4. 数据库字段 ✅
knowledge_base_tasks表已包含prompt_id列(用户已添加)- 类型:int
- 可空:NO(默认值:0)
数据流向
前端 → POST /api/knowledge-bases (prompt_id)
→ CreateKnowledgeBaseRequest (prompt_id)
→ async_kb_service.start_generation(prompt_id)
→ 存储到 Redis 和 DB (knowledge_base_tasks.prompt_id)
→ _process_task() 读取 prompt_id
→ _build_prompt(prompt_id)
→ llm_service.get_task_prompt('KNOWLEDGE_TASK', prompt_id)
→ 获取指定模版或默认模版
向后兼容性
所有新增的 prompt_id 参数都是可选的(Optional[int] = None),确保:
- 不传递 prompt_id 时,自动使用默认模版
- 现有代码无需修改即可正常工作
- 数据库中 prompt_id 有默认值 0
测试结果
执行 test_kb_prompt_id_feature.py 测试脚本,所有测试通过:
- ✅ 获取启用的知识库提示词列表 (3个模版)
- ✅ 通过prompt_id获取提示词内容
- ✅ 获取默认提示词(不指定prompt_id)
- ✅ 验证方法签名支持prompt_id参数
- ✅ 验证数据库schema包含prompt_id列
- ✅ 验证API模型定义正确
使用示例
1. 获取启用的知识库任务模版列表
GET /api/prompts/active/KNOWLEDGE_TASK
Authorization: Bearer <token>
返回:
{
"code": "200",
"message": "获取启用模版列表成功",
"data": {
"prompts": [
{"id": 2, "name": "默认知识库生成", "is_default": true},
{"id": 13, "name": "分析总结模版", "is_default": false}
]
}
}
2. 创建知识库时指定模版
POST /api/knowledge-bases
Authorization: Bearer <token>
Content-Type: application/json
{
"title": "产品会议知识库",
"is_shared": false,
"user_prompt": "重点提取产品功能相关信息",
"source_meeting_ids": "1,2,3",
"tags": "产品,功能",
"prompt_id": 13
}
文件变更列表
app/models/models.py- 修改CreateKnowledgeBaseRequest模型app/services/async_knowledge_base_service.py- 修改5个方法app/api/endpoints/knowledge_base.py- 修改create_knowledge_base端点test_kb_prompt_id_feature.py- 测试脚本
与会议总结功能的一致性
知识库的实现与会议总结功能保持一致:
- 相同的prompt_id传递机制
- 相同的Redis存储格式(字符串)
- 相同的数据库字段类型
- 相同的向后兼容策略
- 相同的验证逻辑(task_type + is_active)
注意事项
- prompt_id 会与 task_type='KNOWLEDGE_TASK' 一起验证
- 如果指定的 prompt_id 不存在或未启用,会自动使用默认模版
- 历史任务记录保留 prompt_id,即使对应的提示词被删除
- Redis 中 prompt_id 存储为字符串,使用时需转换为 int
- 数据库 prompt_id 默认值为 0(表示未指定)
总结
知识库提示词模版选择功能已完全实现并通过测试,与会议总结功能保持一致的设计和实现方式。用户现在可以在创建知识库时选择不同的生成模版,以满足不同场景的需求。