5.1 KiB
5.1 KiB
Agent 编排与提示词模板
1. 当前编排结构
flowchart LR
API["FastAPI Router"] --> Service["Session / Order / Evaluation Service"]
Service --> Orchestrator["MedicalConsultationOrchestrator"]
Orchestrator --> Patient["Patient Agent"]
Orchestrator --> Hint["Hint Agent"]
Service --> Order["Order Engine"]
Service --> Knowledge["Knowledge Retrieval"]
Orchestrator --> Scoring["Scoring Agent"]
Scoring --> Report["Report Agent"]
2. Agent 职责
| 模块 | 文件 | 调用时机 | 输出 |
|---|---|---|---|
| Orchestrator | backend/app/agents/orchestrator.py |
Service 需要调用子 Agent 时 | 统一调度结果 |
| Patient Agent | backend/app/agents/patient_agent.py |
Chat / SSE Chat | AI 病人文本回复 |
| Hint Agent | backend/app/agents/hint_agent.py |
练习模式点击“查看提示” | 结构化提示 JSON |
| Order Engine | backend/app/services/order_service.py |
申请检查/检验 | 数据库检查结果 |
| Knowledge Retrieval | backend/app/services/knowledge_service.py |
生成评价前 | 评分指南命中片段 |
| Scoring Agent | backend/app/agents/scoring_agent.py |
生成 AI 评价 | 结构化评分 JSON |
| Report Agent | backend/app/agents/report_agent.py |
Scoring Agent 之后 | 报告字段归一化 |
3. 模板目录
backend/app/prompts/
├─ hint/
├─ knowledge/
├─ patient/
├─ polish/
├─ report/
└─ scoring/
prompt_templates 表保存模板元数据和 Markdown 路径。第一版 Demo 中,HintAgent 已直接读取 Markdown 模板;PatientAgent 和 ScoringAgent 当前由代码内置结构化提示拼接,Markdown 模板作为标准资产和后续热加载基础保留。
4. 模板清单
| 模板文件 | agent_type | 当前调用状态 | 调用时机 |
|---|---|---|---|
hint/novice_case_hint.md |
hint |
已调用 | POST /sessions/{session_id}/hints |
patient/practice.md |
patient |
标准资产 | 练习模式 AI 病人回复规则 |
patient/teaching.md |
patient |
标准资产 | 教学互动模式 AI 病人回复规则 |
patient/free_chat.md |
patient |
保留 | 早期自由问诊模板 |
patient/novice.md |
patient |
保留 | 早期新手模式模板,当前归并到 practice |
scoring/pediatrics_pneumonia.md |
scoring |
标准资产 | 儿科支气管肺炎评分规则 |
scoring/default_percentage.md |
scoring |
标准资产 | 百分制评分输出约束 |
scoring/default_five_point.md |
scoring |
标准资产 | 五分制评分输出约束 |
report/evaluation_report.md |
report |
标准资产 | 评价报告整理规则 |
knowledge/guideline_search_query.md |
knowledge |
标准资产 | 评分指南检索查询生成 |
polish/doctor_question_polish.md |
polish |
保留 | 后续医生提问润色 |
hint/novice_hint.md |
hint |
保留 | 早期提示模板 |
5. Markdown 模板字段规范
所有新增模板使用同一结构:
---
template_code: novice_case_hint
agent_type: hint
version: v1
scene: practice
model_type: fast
output_format: json
---
# Role
# Task
# Inputs
# Rules
# Output Format
# Safety Boundaries
6. Patient Agent 运行规则
输入:
case_base基础病例。traditional_case或teaching_case扩展信息。- runtime memory 最近对话。
- 已申请检查结果。
- 医学生最新问题。
约束:
- 只扮演患儿家属或 AI 病人。
- 每次回答 1-3 句话。
- 不输出 JSON、Markdown、思考过程。
- 不主动泄露未被问到的隐藏信息。
- 不给诊断或治疗方案。
- 不编造检查结果。
7. Hint Agent 运行规则
调用入口:POST /api/v1/sessions/{session_id}/hints。
输入 JSON:
{
"case": {},
"session": {},
"conversation_summary": [],
"ordered_results": [],
"last_user_message": ""
}
输出 JSON:
{
"hints": [],
"missing_dimensions": [],
"next_questions": [],
"recommended_orders": []
}
缺失字段由后端补空数组;LLM 返回非法 JSON 时使用稳定 fallback。提示只在练习模式中由用户手动点击触发,不自动弹出。
8. Scoring Agent 运行规则
评分上下文拼接顺序固定:
- 病例基础信息:
case_base。 - 模式扩展信息:
traditional_case或teaching_case。 - 基础评分规则:
scoring_rule。 - 指南检索结果:
knowledge_chunks,未命中时为空数组。 - 用户作答情况:runtime memory、
training_order、training_submission。 - 输出格式约束:百分制或五分制。
Scoring Agent 必须输出结构化 JSON:
{
"score_type": "percentage",
"total_score": 82,
"dimension_scores": [],
"errors": [],
"improvement_plan": [],
"evidence_summary": [],
"guideline_refs": [],
"overall_comment": ""
}
ReportAgent 只做字段校验和整理,不重新评分。
9. 安全边界
- 本系统只用于医学教学训练,不替代真实临床诊疗。
- 检查结果只来自数据库。
- LLM 不接收真实患者身份信息。
- 历史记录只保存完整训练后的评价结果。
- 未完成训练不会生成长期聊天历史。