168 lines
5.3 KiB
Markdown
168 lines
5.3 KiB
Markdown
|
|
# 提示词模版选择功能实现总结
|
|||
|
|
|
|||
|
|
## 功能概述
|
|||
|
|
实现了用户在创建会议时可以选择使用的总结模版功能。支持两种场景:
|
|||
|
|
1. 手动生成会议总结时选择模版
|
|||
|
|
2. 上传音频文件时选择模版,自动总结时使用该模版
|
|||
|
|
|
|||
|
|
## 实现的功能点
|
|||
|
|
|
|||
|
|
### 1. 新增API接口 ✅
|
|||
|
|
**文件**: `app/api/endpoints/prompts.py`
|
|||
|
|
- 新增 `GET /prompts/active/{task_type}` 接口
|
|||
|
|
- 功能:获取指定任务类型的所有启用状态的提示词模版
|
|||
|
|
- 返回字段:id, name, is_default
|
|||
|
|
- 按默认模版优先、创建时间倒序排列
|
|||
|
|
|
|||
|
|
### 2. 修改LLM服务 ✅
|
|||
|
|
**文件**: `app/services/llm_service.py`
|
|||
|
|
- 修改 `get_task_prompt()` 方法,增加 `prompt_id` 可选参数
|
|||
|
|
- 逻辑:
|
|||
|
|
- 如果指定 prompt_id,查询该ID对应的提示词(需验证task_type和is_active)
|
|||
|
|
- 如果不指定,使用默认提示词(is_default=TRUE)
|
|||
|
|
- 如果都查不到,返回代码中的默认值
|
|||
|
|
|
|||
|
|
### 3. 修改会议总结服务 ✅
|
|||
|
|
**文件**: `app/services/async_meeting_service.py`
|
|||
|
|
|
|||
|
|
#### 3.1 修改任务创建
|
|||
|
|
- `start_summary_generation()`: 增加 `prompt_id` 参数
|
|||
|
|
- 将 prompt_id 存储到 Redis 和数据库
|
|||
|
|
|
|||
|
|
#### 3.2 修改任务处理
|
|||
|
|
- `_process_task()`: 从 Redis 读取 prompt_id,传递给 `_build_prompt()`
|
|||
|
|
- `_build_prompt()`: 增加 `prompt_id` 参数,传递给 `llm_service.get_task_prompt()`
|
|||
|
|
- `_save_task_to_db()`: 增加 `prompt_id` 参数,存储到数据库
|
|||
|
|
|
|||
|
|
#### 3.3 修改自动总结监控
|
|||
|
|
- `monitor_and_auto_summarize()`: 增加 `prompt_id` 参数
|
|||
|
|
- 在转录完成后启动总结任务时,传递 prompt_id
|
|||
|
|
|
|||
|
|
### 4. 修改音频服务 ✅
|
|||
|
|
**文件**: `app/services/audio_service.py`
|
|||
|
|
- `handle_audio_upload()`: 增加 `prompt_id` 参数
|
|||
|
|
- 将 prompt_id 传递给 `monitor_and_auto_summarize()`
|
|||
|
|
|
|||
|
|
### 5. 修改会议API接口 ✅
|
|||
|
|
**文件**: `app/api/endpoints/meetings.py`
|
|||
|
|
|
|||
|
|
#### 5.1 手动生成总结
|
|||
|
|
- `GenerateSummaryRequest` 模型:增加 `prompt_id` 字段
|
|||
|
|
- `POST /meetings/{meeting_id}/generate-summary-async`: 传递 prompt_id 给服务层
|
|||
|
|
|
|||
|
|
#### 5.2 音频上传
|
|||
|
|
- `POST /meetings/upload-audio`: 增加 `prompt_id` 表单参数
|
|||
|
|
- 将 prompt_id 传递给 `handle_audio_upload()`
|
|||
|
|
|
|||
|
|
### 6. 数据库迁移 ✅
|
|||
|
|
**文件**: `sql/add_prompt_id_to_llm_tasks.sql`
|
|||
|
|
- 为 `llm_tasks` 表添加 `prompt_id` 列
|
|||
|
|
- 类型:int(11)
|
|||
|
|
- 可空:YES
|
|||
|
|
- 默认值:NULL
|
|||
|
|
- 索引:idx_prompt_id
|
|||
|
|
|
|||
|
|
## 数据流向
|
|||
|
|
|
|||
|
|
### 手动生成总结
|
|||
|
|
```
|
|||
|
|
前端 → POST /meetings/{id}/generate-summary-async (prompt_id)
|
|||
|
|
→ async_meeting_service.start_summary_generation(prompt_id)
|
|||
|
|
→ 存储到 Redis 和 DB (llm_tasks.prompt_id)
|
|||
|
|
→ _process_task() 读取 prompt_id
|
|||
|
|
→ _build_prompt(prompt_id)
|
|||
|
|
→ llm_service.get_task_prompt('MEETING_TASK', prompt_id)
|
|||
|
|
→ 获取指定模版或默认模版
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 音频上传自动总结
|
|||
|
|
```
|
|||
|
|
前端 → POST /meetings/upload-audio (prompt_id, auto_summarize=true)
|
|||
|
|
→ handle_audio_upload(prompt_id)
|
|||
|
|
→ transcription_service.start_transcription()
|
|||
|
|
→ monitor_and_auto_summarize(prompt_id)
|
|||
|
|
→ 等待转录完成
|
|||
|
|
→ start_summary_generation(prompt_id)
|
|||
|
|
→ (后续流程同手动生成总结)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 向后兼容性
|
|||
|
|
|
|||
|
|
所有新增的 `prompt_id` 参数都是可选的(Optional[int] = None),确保:
|
|||
|
|
1. 不传递 prompt_id 时,自动使用默认模版
|
|||
|
|
2. 现有代码无需修改即可正常工作
|
|||
|
|
3. 数据库中 prompt_id 允许为 NULL
|
|||
|
|
|
|||
|
|
## 测试结果
|
|||
|
|
|
|||
|
|
执行 `test_prompt_id_feature.py` 测试脚本,所有测试通过:
|
|||
|
|
- ✅ 获取启用的提示词列表 (6个模版)
|
|||
|
|
- ✅ 通过prompt_id获取提示词内容
|
|||
|
|
- ✅ 获取默认提示词(不指定prompt_id)
|
|||
|
|
- ✅ 验证方法签名支持prompt_id参数
|
|||
|
|
- ✅ 验证数据库schema包含prompt_id列
|
|||
|
|
- ✅ 验证API端点定义正确
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
### 1. 获取启用的会议任务模版列表
|
|||
|
|
```bash
|
|||
|
|
GET /api/prompts/active/MEETING_TASK
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
返回:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": "200",
|
|||
|
|
"message": "获取启用模版列表成功",
|
|||
|
|
"data": {
|
|||
|
|
"prompts": [
|
|||
|
|
{"id": 1, "name": "默认会议总结", "is_default": true},
|
|||
|
|
{"id": 5, "name": "产品会议总结", "is_default": false}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 手动生成总结时指定模版
|
|||
|
|
```bash
|
|||
|
|
POST /api/meetings/123/generate-summary-async
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"user_prompt": "重点关注技术讨论",
|
|||
|
|
"prompt_id": 5
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 上传音频时指定模版
|
|||
|
|
```bash
|
|||
|
|
POST /api/meetings/upload-audio
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
Content-Type: multipart/form-data
|
|||
|
|
|
|||
|
|
- audio_file: <file>
|
|||
|
|
- meeting_id: 123
|
|||
|
|
- auto_summarize: true
|
|||
|
|
- prompt_id: 5
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 文件变更列表
|
|||
|
|
|
|||
|
|
1. `app/api/endpoints/prompts.py` - 新增API接口
|
|||
|
|
2. `app/api/endpoints/meetings.py` - 修改两个端点
|
|||
|
|
3. `app/services/llm_service.py` - 修改get_task_prompt方法
|
|||
|
|
4. `app/services/async_meeting_service.py` - 修改4个方法
|
|||
|
|
5. `app/services/audio_service.py` - 修改handle_audio_upload方法
|
|||
|
|
6. `sql/add_prompt_id_to_llm_tasks.sql` - 数据库迁移脚本
|
|||
|
|
7. `test_prompt_id_feature.py` - 测试脚本
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. prompt_id 会与 task_type 一起验证,防止使用错误类型的模版
|
|||
|
|
2. 如果指定的 prompt_id 不存在或未启用,会自动使用默认模版
|
|||
|
|
3. 历史任务记录保留 prompt_id,即使对应的提示词被删除
|
|||
|
|
4. Redis 中 prompt_id 存储为字符串,使用时需转换为 int
|