| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- from typing import Optional
- import logging
- from src.graphs.tongue import get_tongue_graph
- logger = logging.getLogger(__name__)
- class TongueDiagnosisAgent:
- """舌诊分析 Agent — 调用 LangGraph 舌诊 graph(glm-5 视觉模型)"""
- async def diagnose(
- self,
- image_url: str,
- user_id: int,
- additional_context: Optional[dict] = None,
- ) -> dict:
- return await self._via_llm(image_url)
- async def _via_llm(self, image_url: str) -> dict:
- try:
- graph = get_tongue_graph()
- result = graph.invoke({
- "request": {"image_url": image_url},
- "image_base64": None,
- "raw_response": "",
- "overall_assessment": "",
- "indicators": [],
- "error": None,
- })
- if result.get("error"):
- logger.warning("舌诊 graph 失败: %s", result["error"])
- return self._mock_result()
- return {
- "overall_assessment": result["overall_assessment"],
- "indicators": result["indicators"],
- }
- except Exception as e:
- logger.warning("舌诊 graph 执行异常: %s", e)
- return self._mock_result()
- def _mock_result(self) -> dict:
- return {
- "overall_assessment": "舌象基本正常, 舌质淡红, 苔薄白, 提示脾胃功能尚可。",
- "indicators": [
- {"code": "tongue_color", "value": "淡红"},
- {"code": "coating_color", "value": "薄白"},
- {"code": "coating_texture", "value": "润"},
- {"code": "fissure", "value": "无"},
- {"code": "teeth_mark", "value": "轻"},
- {"code": "sublingual_vein", "value": "正常"},
- {"code": "constitution", "value": "平和质"},
- ],
- }
|