imetting_backend/IMPLEMENTATION_SUMMARY.md

5.3 KiB
Raw Permalink Blame History

提示词模版选择功能实现总结

功能概述

实现了用户在创建会议时可以选择使用的总结模版功能。支持两种场景:

  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. 获取启用的会议任务模版列表

GET /api/prompts/active/MEETING_TASK
Authorization: Bearer <token>

返回:

{
  "code": "200",
  "message": "获取启用模版列表成功",
  "data": {
    "prompts": [
      {"id": 1, "name": "默认会议总结", "is_default": true},
      {"id": 5, "name": "产品会议总结", "is_default": false}
    ]
  }
}

2. 手动生成总结时指定模版

POST /api/meetings/123/generate-summary-async
Authorization: Bearer <token>
Content-Type: application/json

{
  "user_prompt": "重点关注技术讨论",
  "prompt_id": 5
}

3. 上传音频时指定模版

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