140 lines
4.4 KiB
Markdown
140 lines
4.4 KiB
Markdown
# 知识库提示词模版选择功能实现总结
|
||
|
||
## 功能概述
|
||
为知识库生成功能添加了提示词模版选择支持,用户在创建知识库时可以选择使用的生成模版。
|
||
|
||
## 实现的功能点
|
||
|
||
### 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),确保:
|
||
1. 不传递 prompt_id 时,自动使用默认模版
|
||
2. 现有代码无需修改即可正常工作
|
||
3. 数据库中 prompt_id 有默认值 0
|
||
|
||
## 测试结果
|
||
|
||
执行 `test_kb_prompt_id_feature.py` 测试脚本,所有测试通过:
|
||
- ✅ 获取启用的知识库提示词列表 (3个模版)
|
||
- ✅ 通过prompt_id获取提示词内容
|
||
- ✅ 获取默认提示词(不指定prompt_id)
|
||
- ✅ 验证方法签名支持prompt_id参数
|
||
- ✅ 验证数据库schema包含prompt_id列
|
||
- ✅ 验证API模型定义正确
|
||
|
||
## 使用示例
|
||
|
||
### 1. 获取启用的知识库任务模版列表
|
||
```bash
|
||
GET /api/prompts/active/KNOWLEDGE_TASK
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
返回:
|
||
```json
|
||
{
|
||
"code": "200",
|
||
"message": "获取启用模版列表成功",
|
||
"data": {
|
||
"prompts": [
|
||
{"id": 2, "name": "默认知识库生成", "is_default": true},
|
||
{"id": 13, "name": "分析总结模版", "is_default": false}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 创建知识库时指定模版
|
||
```bash
|
||
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
|
||
}
|
||
```
|
||
|
||
## 文件变更列表
|
||
|
||
1. `app/models/models.py` - 修改CreateKnowledgeBaseRequest模型
|
||
2. `app/services/async_knowledge_base_service.py` - 修改5个方法
|
||
3. `app/api/endpoints/knowledge_base.py` - 修改create_knowledge_base端点
|
||
4. `test_kb_prompt_id_feature.py` - 测试脚本
|
||
|
||
## 与会议总结功能的一致性
|
||
|
||
知识库的实现与会议总结功能保持一致:
|
||
- 相同的prompt_id传递机制
|
||
- 相同的Redis存储格式(字符串)
|
||
- 相同的数据库字段类型
|
||
- 相同的向后兼容策略
|
||
- 相同的验证逻辑(task_type + is_active)
|
||
|
||
## 注意事项
|
||
|
||
1. prompt_id 会与 task_type='KNOWLEDGE_TASK' 一起验证
|
||
2. 如果指定的 prompt_id 不存在或未启用,会自动使用默认模版
|
||
3. 历史任务记录保留 prompt_id,即使对应的提示词被删除
|
||
4. Redis 中 prompt_id 存储为字符串,使用时需转换为 int
|
||
5. 数据库 prompt_id 默认值为 0(表示未指定)
|
||
|
||
## 总结
|
||
|
||
知识库提示词模版选择功能已完全实现并通过测试,与会议总结功能保持一致的设计和实现方式。用户现在可以在创建知识库时选择不同的生成模版,以满足不同场景的需求。
|