| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- """
- 健康报告生成 Agent
- """
- import json
- from typing import Dict, Any, List
- from agents.base import BaseAgent
- from core.exceptions import AgentException
- class ReportAgent(BaseAgent):
- def __init__(self, task_id=None, llm=None):
- super().__init__(name="ReportAgent", task_id=task_id, llm=llm)
- async def run(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
- self.set_state("running")
- indicators = input_data.get("indicators", [])
- risk_assessment = input_data.get("risk_assessment", {})
- advice = input_data.get("advice") or {}
- confidence = risk_assessment.get("confidence", 0.5)
- retrieved_memory = str(input_data.get("retrieved_memory") or "(暂无召回记忆)")
- advice_list = advice.get("advice", [])
- prompt = self._build_prompt(
- indicators, risk_assessment, advice_list, confidence, retrieved_memory
- )
- response = await self.think(prompt)
- try:
- result = json.loads(response)
- summary = result.get("summary", "根据当前分析生成的健康报告摘要。")
- except json.JSONDecodeError:
- result = {
- "summary": "解析失败,返回原始结果",
- "raw_response": response
- }
- # 构建最终报告
- report = {
- "title": "个人健康评估报告",
- "summary": summary,
- "indicator_section": indicators,
- "risk_section": risk_assessment,
- "advice_section": advice_list,
- "confidence": confidence,
- "disclaimer": "本报告仅供健康管理参考,不构成医疗诊断。"
- }
- self.set_state("completed")
- return {
- "report": {
- **report,
- "report_text": summary
- }
- }
-
- def _build_prompt(
- self,
- indicators: List[Dict[str, Any]],
- risk_assessment: Dict[str, Any],
- advice_list: List[Dict[str, Any]],
- confidence: float,
- retrieved_memory: str,
- ) -> str:
- return f"""
- 你是一名健康报告整理助手。
- 请根据以下结构化分析结果,生成一份清晰、专业、易读的健康评估报告。
- 健康指标分析结果:
- {json.dumps(indicators, ensure_ascii=False, indent=2)}
- 健康风险评估结果:
- {json.dumps(risk_assessment, ensure_ascii=False, indent=2)}
- 健康建议:
- {json.dumps(advice_list, ensure_ascii=False, indent=2)}
- 整体置信度:
- {confidence}
- 历史记忆召回(RAG):
- {retrieved_memory}
- 要求:
- - 不新增分析结论
- - 不修改已有判断
- - 语言清晰、结构清楚
- - 面向普通用户
- 请返回 JSON 格式:
- {{
- "summary": "..."
- }}
- """
- def get_required_fields(self) -> list[str]:
- return []
|