100 lines
3.1 KiB
Python
Raw Normal View History

from typing import Optional
from agent_system.base import BaseAgent
from agent_system.monitor.prompt import MonitorPrompt
from agent_system.monitor.response_model import MonitorResult
class Monitor(BaseAgent):
"""
Monitor智能体
监控和评估现病史既往史和主诉的质量提供完成度评分
"""
def __init__(self, model_type: str = "gpt-oss:latest", llm_config: dict = {}):
super().__init__(
model_type=model_type,
description=MonitorPrompt.description,
instructions=MonitorPrompt.instructions,
response_model=MonitorResult,
llm_config=llm_config,
structured_outputs=True,
markdown=False,
use_cache=False
)
def run(self, hpi_content: str, ph_content: str, chief_complaint: str) -> MonitorResult:
"""
监控病史质量
Args:
hpi_content: 现病史内容
ph_content: 既往史内容
chief_complaint: 主诉
Returns:
MonitorResult: 包含完成度评分和评分理由
"""
# 构建评估提示
prompt = self.build_prompt(hpi_content, ph_content, chief_complaint)
# 调用LLM进行评估
result = super().run(prompt)
# 确保返回正确的类型
if isinstance(result, MonitorResult):
return result
elif isinstance(result, dict):
return MonitorResult(**result)
else:
# 解析失败,返回默认结果
return MonitorResult(
completion_score=0.0,
reason="监控评估失败无法解析LLM响应"
)
def build_prompt(self, hpi_content: str, ph_content: str, chief_complaint: str) -> str:
"""
构建监控评估的提示语
Args:
hpi_content: 现病史内容
ph_content: 既往史内容
chief_complaint: 主诉
Returns:
str: 构建好的提示语
"""
prompt = f"""请对以下病史信息进行质量监控和评估:
**主诉**
{chief_complaint}
**现病史**
{hpi_content}
**既往史**
{ph_content}
**评估要求**
1. 综合评估现病史既往史和主诉的信息完整性
2. 考虑信息之间的逻辑一致性和相互关联性
3. 基于医学标准评估信息的临床价值
4. **必须先给出详细的评分理由再基于理由给出0.0-1.0范围内的完成度评分**
5. 评分必须与理由保持逻辑一致
**输出格式**
严格按照以下JSON格式输出
{{
"completion_score": 浮点数0.0-1.0
"reason": "详细的评分理由"
}}
**评分指导**
- 0.9-1.0: 信息非常完整逻辑清晰临床价值高
- 0.8-0.9: 信息较完整有少量缺失整体质量良好
- 0.7-0.8: 信息基本完整存在一些不足
- 0.6-0.7: 信息不够完整有明显缺失
- 0.5-0.6: 信息缺失较多质量有待提高
- 0.0-0.5: 信息严重不足需要大幅改善
请基于上述标准进行客观评估"""
return prompt