chore: initialize medical consultation agent demo
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
# Agent 编排与提示词模板
|
||||
|
||||
## 1. 当前编排结构
|
||||
|
||||
```mermaid
|
||||
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. 模板目录
|
||||
|
||||
```text
|
||||
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 模板字段规范
|
||||
|
||||
所有新增模板使用同一结构:
|
||||
|
||||
```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:
|
||||
|
||||
```json
|
||||
{
|
||||
"case": {},
|
||||
"session": {},
|
||||
"conversation_summary": [],
|
||||
"ordered_results": [],
|
||||
"last_user_message": ""
|
||||
}
|
||||
```
|
||||
|
||||
输出 JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"hints": [],
|
||||
"missing_dimensions": [],
|
||||
"next_questions": [],
|
||||
"recommended_orders": []
|
||||
}
|
||||
```
|
||||
|
||||
缺失字段由后端补空数组;LLM 返回非法 JSON 时使用稳定 fallback。提示只在练习模式中由用户手动点击触发,不自动弹出。
|
||||
|
||||
## 8. Scoring Agent 运行规则
|
||||
|
||||
评分上下文拼接顺序固定:
|
||||
|
||||
1. 病例基础信息:`case_base`。
|
||||
2. 模式扩展信息:`traditional_case` 或 `teaching_case`。
|
||||
3. 基础评分规则:`scoring_rule`。
|
||||
4. 指南检索结果:`knowledge_chunks`,未命中时为空数组。
|
||||
5. 用户作答情况:runtime memory、`training_order`、`training_submission`。
|
||||
6. 输出格式约束:百分制或五分制。
|
||||
|
||||
Scoring Agent 必须输出结构化 JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"score_type": "percentage",
|
||||
"total_score": 82,
|
||||
"dimension_scores": [],
|
||||
"errors": [],
|
||||
"improvement_plan": [],
|
||||
"evidence_summary": [],
|
||||
"guideline_refs": [],
|
||||
"overall_comment": ""
|
||||
}
|
||||
```
|
||||
|
||||
`ReportAgent` 只做字段校验和整理,不重新评分。
|
||||
|
||||
## 9. 安全边界
|
||||
|
||||
- 本系统只用于医学教学训练,不替代真实临床诊疗。
|
||||
- 检查结果只来自数据库。
|
||||
- LLM 不接收真实患者身份信息。
|
||||
- 历史记录只保存完整训练后的评价结果。
|
||||
- 未完成训练不会生成长期聊天历史。
|
||||
Reference in New Issue
Block a user