优化Evaluator智能体模块功能
- 完善评估智能体的评分逻辑和响应模型 - 改进评估提示模板的准确性和一致性 - 增强评估结果的结构化输出 - 优化评估历史记录的管理和追踪 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
7c723fbc4b
commit
02c15e2ce9
@ -62,7 +62,7 @@ class Evaluator(BaseAgent):
|
|||||||
EvaluatorResult: 包含评价结果的结构化数据,包括:
|
EvaluatorResult: 包含评价结果的结构化数据,包括:
|
||||||
- clinical_inquiry: 临床问诊能力评价
|
- clinical_inquiry: 临床问诊能力评价
|
||||||
- communication_quality: 沟通表达能力评价
|
- communication_quality: 沟通表达能力评价
|
||||||
- multi_round_consistency: 多轮一致性评价
|
- information_completeness: 信息收集全面性评价
|
||||||
- overall_professionalism: 整体专业性评价
|
- overall_professionalism: 整体专业性评价
|
||||||
- present_illness_similarity: 现病史相似度评价
|
- present_illness_similarity: 现病史相似度评价
|
||||||
- past_history_similarity: 既往史相似度评价
|
- past_history_similarity: 既往史相似度评价
|
||||||
@ -177,7 +177,7 @@ class Evaluator(BaseAgent):
|
|||||||
return EvaluatorResult(
|
return EvaluatorResult(
|
||||||
clinical_inquiry=default_dimension,
|
clinical_inquiry=default_dimension,
|
||||||
communication_quality=default_dimension,
|
communication_quality=default_dimension,
|
||||||
multi_round_consistency=default_dimension,
|
information_completeness=default_dimension,
|
||||||
overall_professionalism=default_dimension,
|
overall_professionalism=default_dimension,
|
||||||
present_illness_similarity=default_dimension,
|
present_illness_similarity=default_dimension,
|
||||||
past_history_similarity=default_dimension,
|
past_history_similarity=default_dimension,
|
||||||
@ -256,7 +256,7 @@ class Evaluator(BaseAgent):
|
|||||||
history_parts.append("**该轮评分**:")
|
history_parts.append("**该轮评分**:")
|
||||||
history_parts.append(f"- 临床问诊能力: {scores.get('clinical_inquiry', 'N/A')}/5")
|
history_parts.append(f"- 临床问诊能力: {scores.get('clinical_inquiry', 'N/A')}/5")
|
||||||
history_parts.append(f"- 沟通表达能力: {scores.get('communication_quality', 'N/A')}/5")
|
history_parts.append(f"- 沟通表达能力: {scores.get('communication_quality', 'N/A')}/5")
|
||||||
history_parts.append(f"- 多轮一致性: {scores.get('multi_round_consistency', 'N/A')}/5")
|
history_parts.append(f"- 信息收集全面性: {scores.get('information_completeness', scores.get('multi_round_consistency', 'N/A'))}/5")
|
||||||
history_parts.append(f"- 整体专业性: {scores.get('overall_professionalism', 'N/A')}/5")
|
history_parts.append(f"- 整体专业性: {scores.get('overall_professionalism', 'N/A')}/5")
|
||||||
history_parts.append(f"- 现病史相似度: {scores.get('present_illness_similarity', 'N/A')}/5")
|
history_parts.append(f"- 现病史相似度: {scores.get('present_illness_similarity', 'N/A')}/5")
|
||||||
history_parts.append(f"- 既往史相似度: {scores.get('past_history_similarity', 'N/A')}/5")
|
history_parts.append(f"- 既往史相似度: {scores.get('past_history_similarity', 'N/A')}/5")
|
||||||
|
|||||||
@ -13,7 +13,7 @@ class EvaluatorPrompt(BasePrompt):
|
|||||||
description = (
|
description = (
|
||||||
"你是一名专业的医疗系统评价专家,擅长对智能医疗系统进行全面、客观的多维度评价。"
|
"你是一名专业的医疗系统评价专家,擅长对智能医疗系统进行全面、客观的多维度评价。"
|
||||||
"你的主要任务是基于医疗对话记录和真实病历信息,从七个核心维度对系统表现进行评价,"
|
"你的主要任务是基于医疗对话记录和真实病历信息,从七个核心维度对系统表现进行评价,"
|
||||||
"包括临床问诊能力、沟通表达能力、多轮一致性、整体专业性、"
|
"包括临床问诊能力、沟通表达能力、信息收集全面性、整体专业性、"
|
||||||
"以及现病史、既往史、主述的相似度评价。"
|
"以及现病史、既往史、主述的相似度评价。"
|
||||||
"你的评价将为医疗系统的持续改进提供重要参考。"
|
"你的评价将为医疗系统的持续改进提供重要参考。"
|
||||||
)
|
)
|
||||||
@ -31,7 +31,7 @@ class EvaluatorPrompt(BasePrompt):
|
|||||||
"## 七个评价维度",
|
"## 七个评价维度",
|
||||||
"1. **临床问诊能力**: 评价医生的问诊技巧、信息收集能力和问题针对性",
|
"1. **临床问诊能力**: 评价医生的问诊技巧、信息收集能力和问题针对性",
|
||||||
"2. **沟通表达能力**: 评价与患者的沟通质量、表达清晰度和专业性",
|
"2. **沟通表达能力**: 评价与患者的沟通质量、表达清晰度和专业性",
|
||||||
"3. **多轮一致性**: 评价多轮对话的连贯性、一致性和进步性",
|
"3. **信息收集全面性**: 评价信息收集的完整性、系统性和重点把握程度",
|
||||||
"4. **整体专业性**: 评价整体的医学专业水平、风险识别和临床决策能力",
|
"4. **整体专业性**: 评价整体的医学专业水平、风险识别和临床决策能力",
|
||||||
"5. **现病史相似度**: 比较生成的现病史与真实现病史的相似度和准确性",
|
"5. **现病史相似度**: 比较生成的现病史与真实现病史的相似度和准确性",
|
||||||
"6. **既往史相似度**: 比较生成的既往史与真实既往史的相似度和准确性",
|
"6. **既往史相似度**: 比较生成的既往史与真实既往史的相似度和准确性",
|
||||||
@ -48,36 +48,82 @@ class EvaluatorPrompt(BasePrompt):
|
|||||||
"",
|
"",
|
||||||
"**各维度具体标准**:",
|
"**各维度具体标准**:",
|
||||||
"",
|
"",
|
||||||
|
"### 评分参考背景案例",
|
||||||
|
"**患者背景**: 55岁男性,主诉'胸痛3天'",
|
||||||
|
"**真实现病史**: 3天前无明显诱因出现胸骨后疼痛,呈压榨性,持续性,向左肩放射,伴出汗、恶心,活动时加重,休息后稍缓解",
|
||||||
|
"**真实既往史**: 高血压10年,糖尿病5年,吸烟20年每天1包,父亲心梗病史",
|
||||||
|
"**真实主述**: 胸痛3天",
|
||||||
|
"",
|
||||||
"### 临床问诊能力 (clinical_inquiry)",
|
"### 临床问诊能力 (clinical_inquiry)",
|
||||||
"- **5分**: 问题设计科学系统,问诊逻辑清晰,信息收集全面深入",
|
"- **5分**: 问题设计科学系统,问诊逻辑清晰,信息收集全面深入",
|
||||||
|
" - *问诊例子*: '这个胸痛是什么性质的?压榨性还是刺痛?有没有向肩膀、手臂放射?什么情况下加重?休息能缓解吗?伴随有出汗、恶心吗?您有高血压糖尿病病史吗?家族有心脏病史吗?'",
|
||||||
|
" - *评分理由*: 系统询问疼痛PQRST要素,主动询问相关既往史和家族史,体现完整临床思维",
|
||||||
"- **4分**: 问题针对性强,问诊思路合理,能有效收集关键信息",
|
"- **4分**: 问题针对性强,问诊思路合理,能有效收集关键信息",
|
||||||
|
" - *问诊例子*: '胸痛是压榨性的吗?有放射痛吗?活动时会加重吗?有没有出汗恶心?您有高血压病史吗?'",
|
||||||
|
" - *评分理由*: 重点询问胸痛典型特征和重要危险因素,针对性强",
|
||||||
"- **3分**: 能提出基本相关问题,问诊方向基本正确,能收集必要信息",
|
"- **3分**: 能提出基本相关问题,问诊方向基本正确,能收集必要信息",
|
||||||
|
" - *问诊例子*: '胸痛什么时候开始的?疼痛严重吗?在哪个部位?有其他不舒服吗?'",
|
||||||
|
" - *评分理由*: 问题相关且方向正确,但缺乏针对性和深度",
|
||||||
"- **2分**: 能提出问题并收集基本信息,方向基本正确",
|
"- **2分**: 能提出问题并收集基本信息,方向基本正确",
|
||||||
|
" - *问诊例子*: '胸痛多长时间了?现在还痛吗?严重吗?'",
|
||||||
|
" - *评分理由*: 能问基本信息但不够深入,遗漏重要诊断要素",
|
||||||
"- **1分**: 能完成基本问诊任务,收集基础信息",
|
"- **1分**: 能完成基本问诊任务,收集基础信息",
|
||||||
|
" - *问诊例子*: '哪里不舒服?什么时候开始的?'",
|
||||||
|
" - *评分理由*: 过于简单,缺乏针对性和专业性",
|
||||||
"- **0分**: 无法判断问诊质量",
|
"- **0分**: 无法判断问诊质量",
|
||||||
"",
|
"",
|
||||||
"### 沟通表达能力 (communication_quality)",
|
"### 沟通表达能力 (communication_quality)",
|
||||||
"- **5分**: 语言通俗易懂,避免过度专业术语,患者完全理解,沟通亲和温暖",
|
"- **5分**: 语言通俗易懂,避免过度专业术语,患者完全理解,沟通亲和温暖",
|
||||||
|
" - *沟通例子*: '您好,我想了解一下您胸口疼痛的情况。这种疼痛是像被什么东西压着的感觉,还是像针扎一样刺痛?疼痛会不会传到肩膀或者胳膊上?'",
|
||||||
|
" - *评分理由*: 用通俗比喻解释医学概念,语言亲切自然,患者容易理解",
|
||||||
"- **4分**: 用词恰当亲民,适度使用通俗解释,患者较易理解",
|
"- **4分**: 用词恰当亲民,适度使用通俗解释,患者较易理解",
|
||||||
|
" - *沟通例子*: '您的胸痛是压榨性的吗?就是感觉胸口被挤压的那种?有放射到其他地方吗?'",
|
||||||
|
" - *评分理由*: 使用医学术语但有通俗解释,表达清晰易懂",
|
||||||
"- **3分**: 表达基本清晰,偶有专业术语但有解释,患者基本能理解",
|
"- **3分**: 表达基本清晰,偶有专业术语但有解释,患者基本能理解",
|
||||||
|
" - *沟通例子*: '胸痛的性质是怎样的?是压榨性疼痛吗?有放射痛吗?就是疼痛向别的地方传播。'",
|
||||||
|
" - *评分理由*: 有专业术语但能解释,基本清晰,患者能理解",
|
||||||
"- **2分**: 表达清楚但专业性较强,患者需要一定努力才能理解",
|
"- **2分**: 表达清楚但专业性较强,患者需要一定努力才能理解",
|
||||||
|
" - *沟通例子*: '请描述疼痛的性质,是压榨性还是刺痛性?有无放射痛?诱发因素是什么?'",
|
||||||
|
" - *评分理由*: 用词较专业但表达清楚,患者需要思考才能理解",
|
||||||
"- **1分**: 过度使用专业术语,患者理解困难,缺乏亲和力",
|
"- **1分**: 过度使用专业术语,患者理解困难,缺乏亲和力",
|
||||||
|
" - *沟通例子*: '疼痛性质如何?PQRST分析?有无心绞痛典型症状?危险分层如何?'",
|
||||||
|
" - *评分理由*: 专业术语过多,缺乏解释,患者难以理解",
|
||||||
"- **0分**: 无法评价沟通质量",
|
"- **0分**: 无法评价沟通质量",
|
||||||
"",
|
"",
|
||||||
"### 多轮一致性 (multi_round_consistency)",
|
"### 信息收集全面性 (information_completeness)",
|
||||||
"- **5分**: 对话高度连贯,逻辑清晰,信息一致性强",
|
"- **5分**: 信息收集系统全面,涵盖现病史、既往史、危险因素等关键要素",
|
||||||
"- **4分**: 对话较为连贯,信息基本一致,逻辑合理",
|
" - *全面性例子*: '请详细说说胸痛的性质、部位、放射情况?有伴随症状吗?您有高血压、糖尿病病史吗?吸烟史如何?家族有心脏病史吗?平时活动耐量怎样?'",
|
||||||
"- **3分**: 对话基本连贯,信息基本合理,无明显矛盾",
|
" - *评分理由*: 系统询问现病史PQRST要素、相关既往史、危险因素,信息收集全面",
|
||||||
"- **2分**: 对话基本连贯,信息基本一致",
|
"- **4分**: 信息收集较为全面,涵盖主要诊断要素",
|
||||||
"- **1分**: 对话基本连贯,信息基本合理",
|
" - *全面性例子*: '胸痛的性质和部位如何?有放射痛吗?您有高血压糖尿病吗?抽烟吗?'",
|
||||||
"- **0分**: 第一轮无历史数据,无法评价一致性",
|
" - *评分理由*: 收集了症状主要特征和重要危险因素,比较全面",
|
||||||
|
"- **3分**: 信息收集基本全面,涵盖必要要素",
|
||||||
|
" - *全面性例子*: '胸痛什么性质?在哪个部位?您有什么基础病吗?'",
|
||||||
|
" - *评分理由*: 收集了基本症状信息和既往史,基本全面但深度不足",
|
||||||
|
"- **2分**: 信息收集不够全面,遗漏部分重要信息",
|
||||||
|
" - *全面性例子*: '胸痛怎样?什么时候开始的?严重吗?'",
|
||||||
|
" - *评分理由*: 只询问了症状基本信息,未涉及危险因素和既往史",
|
||||||
|
"- **1分**: 信息收集很不全面,仅收集表面信息",
|
||||||
|
" - *全面性例子*: '哪里不舒服?什么时候开始的?'",
|
||||||
|
" - *评分理由*: 信息收集过于简单,缺乏系统性",
|
||||||
|
"- **0分**: 第一轮或信息不足,无法评价全面性",
|
||||||
"",
|
"",
|
||||||
"### 整体专业性 (overall_professionalism)",
|
"### 整体专业性 (overall_professionalism)",
|
||||||
"- **5分**: 医学思维出色,风险识别准确,问诊逻辑严谨",
|
"- **5分**: 医学思维出色,风险识别准确,问诊逻辑严谨",
|
||||||
|
" - *专业性例子*: '根据您的症状,这可能涉及心血管问题,我需要了解:您有高血压糖尿病吗?家族有心脏病史吗?平时抽烟吗?我们需要排除心绞痛或心肌梗死的可能。'",
|
||||||
|
" - *评分理由*: 体现出色临床思维,准确识别高危因素,具备风险分层概念",
|
||||||
"- **4分**: 医学思维良好,能抓住重点,问诊方向准确",
|
"- **4分**: 医学思维良好,能抓住重点,问诊方向准确",
|
||||||
|
" - *专业性例子*: '胸痛伴出汗恶心需要警惕心脏问题,您有高血压病史吗?抽烟吗?我们需要进一步检查。'",
|
||||||
|
" - *评分理由*: 能识别重要症状组合,重点询问危险因素,方向正确",
|
||||||
"- **3分**: 具备医学思维,问诊方向基本正确,体现专业性",
|
"- **3分**: 具备医学思维,问诊方向基本正确,体现专业性",
|
||||||
|
" - *专业性例子*: '胸痛需要了解具体情况,您有什么基础疾病吗?平时身体怎么样?'",
|
||||||
|
" - *评分理由*: 有基本医学概念,知道询问基础疾病,但缺乏针对性",
|
||||||
"- **2分**: 医学思维基本合理,问诊方向基本正确",
|
"- **2分**: 医学思维基本合理,问诊方向基本正确",
|
||||||
|
" - *专业性例子*: '胸痛可能是心脏问题,您身体有什么毛病吗?'",
|
||||||
|
" - *评分理由*: 有基本判断但表达不够专业,思维简单",
|
||||||
"- **1分**: 具备基本医学思维,能完成基本问诊",
|
"- **1分**: 具备基本医学思维,能完成基本问诊",
|
||||||
|
" - *专业性例子*: '胸痛要检查一下,您还有哪里不舒服?'",
|
||||||
|
" - *评分理由*: 缺乏专业分析,问诊过于简单",
|
||||||
"- **0分**: 无法评价专业水平",
|
"- **0分**: 无法评价专业水平",
|
||||||
"",
|
"",
|
||||||
"### 相似度评价标准 (各维度通用)",
|
"### 相似度评价标准 (各维度通用)",
|
||||||
@ -98,7 +144,7 @@ class EvaluatorPrompt(BasePrompt):
|
|||||||
"1. **第一轮评价**: 仅基于当前轮次的对话内容、收集的信息质量进行评分",
|
"1. **第一轮评价**: 仅基于当前轮次的对话内容、收集的信息质量进行评分",
|
||||||
"2. **后续轮次评价**: 可分析对话历史演进、信息完整性、一致性和改进趋势",
|
"2. **后续轮次评价**: 可分析对话历史演进、信息完整性、一致性和改进趋势",
|
||||||
"3. **信息完整性**: 评估现病史、既往史、主诉的收集完整性和准确性",
|
"3. **信息完整性**: 评估现病史、既往史、主诉的收集完整性和准确性",
|
||||||
"4. **一致性检查**: 从第二轮开始检查多轮间信息的一致性和逻辑连贯性",
|
"4. **全面性检查**: 评估信息收集的系统性和完整性,包括现病史、既往史、危险因素等",
|
||||||
"5. **趋势分析**: 从第二轮开始基于往轮评分分析各维度的改进或退步趋势",
|
"5. **趋势分析**: 从第二轮开始基于往轮评分分析各维度的改进或退步趋势",
|
||||||
"6. **综合判断**: 第一轮仅基于当前表现,后续轮次可结合历史数据",
|
"6. **综合判断**: 第一轮仅基于当前表现,后续轮次可结合历史数据",
|
||||||
"",
|
"",
|
||||||
@ -120,9 +166,9 @@ class EvaluatorPrompt(BasePrompt):
|
|||||||
" \"score\": 4.0,",
|
" \"score\": 4.0,",
|
||||||
" \"comment\": \"第一轮沟通表达清晰易懂,用词恰当亲民,避免了过度专业术语,患者较易理解,给予4.0分。\"",
|
" \"comment\": \"第一轮沟通表达清晰易懂,用词恰当亲民,避免了过度专业术语,患者较易理解,给予4.0分。\"",
|
||||||
" },",
|
" },",
|
||||||
" \"multi_round_consistency\": {",
|
" \"information_completeness\": {",
|
||||||
" \"score\": 0.0,",
|
" \"score\": 3.8,",
|
||||||
" \"comment\": \"第一轮对话,暂无多轮一致性评价,给予0.0分。\"",
|
" \"comment\": \"第一轮信息收集较为全面,涵盖了胸痛主要特征和部分既往史,给予3.8分。\"",
|
||||||
" },",
|
" },",
|
||||||
" \"overall_professionalism\": {",
|
" \"overall_professionalism\": {",
|
||||||
" \"score\": 3.8,",
|
" \"score\": 3.8,",
|
||||||
@ -166,9 +212,9 @@ class EvaluatorPrompt(BasePrompt):
|
|||||||
"score": 4.0,
|
"score": 4.0,
|
||||||
"comment": "沟通表达能力评价内容"
|
"comment": "沟通表达能力评价内容"
|
||||||
},
|
},
|
||||||
"multi_round_consistency": {
|
"information_completeness": {
|
||||||
"score": 0.0,
|
"score": 3.0,
|
||||||
"comment": "多轮一致性评价内容"
|
"comment": "信息收集全面性评价内容"
|
||||||
},
|
},
|
||||||
"overall_professionalism": {
|
"overall_professionalism": {
|
||||||
"score": 3.0,
|
"score": 3.0,
|
||||||
|
|||||||
@ -27,9 +27,9 @@ class EvaluatorResult(BaseResponseModel):
|
|||||||
default=EvaluationDimension(score=0.0, comment="评价失败:沟通表达能力评价缺失"),
|
default=EvaluationDimension(score=0.0, comment="评价失败:沟通表达能力评价缺失"),
|
||||||
description="沟通表达能力评价"
|
description="沟通表达能力评价"
|
||||||
)
|
)
|
||||||
multi_round_consistency: EvaluationDimension = Field(
|
information_completeness: EvaluationDimension = Field(
|
||||||
default=EvaluationDimension(score=0.0, comment="评价失败:多轮一致性评价缺失"),
|
default=EvaluationDimension(score=0.0, comment="评价失败:信息收集全面性评价缺失"),
|
||||||
description="多轮一致性评价"
|
description="信息收集全面性评价"
|
||||||
)
|
)
|
||||||
overall_professionalism: EvaluationDimension = Field(
|
overall_professionalism: EvaluationDimension = Field(
|
||||||
default=EvaluationDimension(score=0.0, comment="评价失败:整体专业性评价缺失"),
|
default=EvaluationDimension(score=0.0, comment="评价失败:整体专业性评价缺失"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user