优化:调整Triager智能体分析步骤和字段顺序

- 重新设计prompt中的分诊分析步骤,明确四个步骤的顺序
- 将triage_reasoning字段调整到最前面,体现分析优先的原则
- 更新示例输出格式,确保字段顺序一致
- 修改fallback结果的字段顺序以匹配新的模型结构
- 经测试验证,字段顺序正确且分诊逻辑清晰

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
iomgaa 2025-08-11 17:44:24 +08:00
parent f47d56051b
commit e85fe617ce
3 changed files with 18 additions and 16 deletions

View File

@ -141,10 +141,10 @@ class TriageAgent(BaseAgent):
TriageResult: 包含默认分诊建议的结果 TriageResult: 包含默认分诊建议的结果
""" """
return TriageResult( return TriageResult(
triage_reasoning="由于分诊分析过程中出现异常,系统推荐全科就诊。建议患者先到全科进行初步评估,医生会根据具体情况进一步转诊到合适的专科。",
primary_department="全科", primary_department="全科",
secondary_department="全科(二级)", secondary_department="全科(二级)",
confidence_score=0.3, confidence_score=0.3
triage_reasoning="由于分诊分析过程中出现异常,系统推荐全科就诊。建议患者先到全科进行初步评估,医生会根据具体情况进一步转诊到合适的专科。"
) )
def triage_by_chief_complaint(self, chief_complaint: str) -> TriageResult: def triage_by_chief_complaint(self, chief_complaint: str) -> TriageResult:

View File

@ -19,11 +19,13 @@ class TriagerPrompt(BasePrompt):
# 执行指令和注意事项 # 执行指令和注意事项
instructions = [ instructions = [
"## 核心分诊任务", "## 分诊分析步骤",
"1. **症状系统分析**: 根据患者主诉和现病史,准确识别疾病涉及的主要器官系统", "请按照以下步骤进行分诊分析:",
"2. **科室匹配判断**: 结合症状特点,选择最适合的一级科室和对应的二级科室", "",
"3. **专业度评估**: 基于病情复杂程度和专业要求,确定最合适的专科科室", "**第一步:症状分析与推理** - 分析患者症状特点,识别涉及的器官系统,提供详细的医学推理过程",
"4. **信心度评价**: 对分诊决策的确信程度进行量化评估", "**第二步:一级科室选择** - 根据症状系统归属和年龄特异性,选择最合适的一级科室",
"**第三步:二级科室匹配** - 基于病情复杂程度和专业要求,确定对应的二级科室",
"**第四步:信心度评估** - 对分诊决策的确信程度进行量化评估0-1分",
"", "",
"## 科室结构体系", "## 科室结构体系",
"### 一级科室列表:", "### 一级科室列表:",
@ -59,10 +61,10 @@ class TriagerPrompt(BasePrompt):
"", "",
"## 示例输出格式JSON", "## 示例输出格式JSON",
"{", "{",
" \"triage_reasoning\": \"患者主诉胸闷、胸痛,伴有呼吸困难,症状提示心血管系统疾病。结合既往高血压病史,考虑冠心病可能性较大,建议心血管内科就诊进行进一步检查和治疗。\",",
" \"primary_department\": \"内科\",", " \"primary_department\": \"内科\",",
" \"secondary_department\": \"心血管内科\",", " \"secondary_department\": \"心血管内科\",",
" \"confidence_score\": 0.85,", " \"confidence_score\": 0.85",
" \"triage_reasoning\": \"患者主诉胸闷、胸痛,伴有呼吸困难,症状提示心血管系统疾病。结合既往高血压病史,考虑冠心病可能性较大,建议心血管内科就诊进行进一步检查和治疗。\"",
"}" "}"
] ]
@ -75,8 +77,8 @@ class TriagerPrompt(BasePrompt):
str: JSON 格式的示例输出 str: JSON 格式的示例输出
""" """
return """{ return """{
"triage_reasoning": "详细的分诊推理过程,包括症状分析、科室选择依据和建议理由",
"primary_department": "推荐的一级科室(必须从科室列表中选择)", "primary_department": "推荐的一级科室(必须从科室列表中选择)",
"secondary_department": "推荐的二级科室(必须是一级科室的下属科室)", "secondary_department": "推荐的二级科室(必须是一级科室的下属科室)",
"confidence_score": 0.85, "confidence_score": 0.85
"triage_reasoning": "详细的分诊推理过程,包括症状分析、科室选择依据和建议理由"
}""" }"""

View File

@ -7,6 +7,11 @@ class TriageResult(BaseResponseModel):
""" """
科室分诊结果模型 科室分诊结果模型
""" """
triage_reasoning: str = Field(
...,
description="分诊推理过程,解释为什么推荐该科室"
)
primary_department: Literal[ primary_department: Literal[
"内科", "外科", "儿科", "妇产科", "皮肤性病科", "内科", "外科", "儿科", "妇产科", "皮肤性病科",
"口腔科", "眼科", "肿瘤科", "耳鼻咽喉科", "康复科", "口腔科", "眼科", "肿瘤科", "耳鼻咽喉科", "康复科",
@ -26,9 +31,4 @@ class TriageResult(BaseResponseModel):
ge=0.0, ge=0.0,
le=1.0, le=1.0,
description="分诊信心度评分0-1之间" description="分诊信心度评分0-1之间"
)
triage_reasoning: str = Field(
...,
description="分诊推理过程,解释为什么推荐该科室"
) )