从血液检测到医生预约:使用 LangGraph 和 GPT-4 构建自主健康代理
Source: Dev.to
我们都有过这种经历:收到血液检测结果,看到一堆可怕的红色箭头标记着 “高” 或 “低”, 然后立刻陷入 WebMD 的恐慌深渊。但如果你的 AI 不仅仅是解释结果,而是通过寻找专科医生并为你预约,直接解决问题,会怎样?
在本教程中,我们将使用 LangGraph、GPT‑4 和 函数调用 构建一个复杂的 AI 健康代理。这不仅仅是另一个聊天机器人;它是一个为 医疗自动化 设计的自治系统,弥合数据分析与现实行动之间的鸿沟。通过利用 LLM‑驱动的工作流,我们可以实现从临床数据到医生预约的全程自动化。
💡 旁注:虽然这是一项关于代理工作流的技术探索,但请始终咨询真人医生以获取医疗建议。如果你在寻找更适用于生产环境的医疗 AI 模式,请查看 WellAlly Tech Blog 上的高级案例研究。
架构:闭环
传统的 LLM 链是线性的,但健康相关的任务往往是循环的,需要状态管理。这就是我们使用 LangGraph 的原因——它让我们能够定义状态机,使代理能够回环、搜索更多信息,或根据报告中检测到的“异常”触发特定工具。
系统工作流
graph TD
A[Input: Blood Test PDF/Text] --> B{GPT‑4 Analysis}
B -- Normal --> C[Summarize & Finish]
B -- Abnormal Findings --> D[Tavily API: Search Specialists]
D --> E[GPT‑4: Select Best Match]
E --> F[Google Calendar API: Check Slots]
F --> G[Confirm & Book Appointment]
G --> H[Final Report to User]
style B fill:#f96,stroke:#333,stroke-width:2px
style G fill:#00ff00,stroke:#333,stroke-width:2px
前置条件
要跟随操作,您需要:
- Python 3.10+
- LangGraph & LangChain – 用于代理编排
- OpenAI GPT‑4 API key – 用于高推理提取
- Tavily API – 用于专业医学资源搜索
- Google Calendar API – 处理日程安排逻辑
第一步:定义代理状态
在 LangGraph 中,状态 是在节点之间传递的唯一真实来源。我们需要跟踪血液检查结果、已识别的异常以及推荐的医生。
from typing import List, TypedDict
from langgraph.graph import StateGraph, END
class AgentState(TypedDict):
raw_report: str
abnormalities: List[str]
specialist_recommendation: List[dict]
appointment_confirmed: bool
final_summary: str
第2步:分析节点(GPT‑4 + Pydantic)
我们希望代理提取结构化数据。我们将使用 GPT‑4 配合特定的 Pydantic 模式,以避免大量文本。
from pydantic import BaseModel, Field
class Finding(BaseModel):
indicator: str = Field(description="The name of the test, e.g., LDL Cholesterol")
value: str = Field(description="The numeric value detected")
status: str = Field(description="High, Low, or Normal")
def analyze_report_node(state: AgentState):
# Call GPT‑4 with the Findings schema
# report = state["raw_report"]
# structured_data = llm.with_structured_output(Finding).invoke(report)
# Simulating a 'High Glucose' finding
return {
"abnormalities": ["High Glucose (120 mg/dL)"],
"next_step": "search"
}
第3步:工具集成(Tavily 与 Google Calendar)
如果代理检测到异常,它会触发 Tavily API 来查找当地的内分泌科医生,然后调用 Google Calendar API 来寻找空闲时段。
from langchain_community.tools.tavily_search import TavilySearchResults
def search_specialist_node(state: AgentState):
search = TavilySearchResults(k=3)
query = f"Best endocrinologists for {state['abnormalities'][0]} in San Francisco"
results = search.run(query)
return {"specialist_recommendation": results}
def book_appointment_node(state: AgentState):
# In a real app this would use the Google Calendar API:
# service.events().insert(calendarId='primary', body=event).execute()
print("🚀 Auto‑booking appointment for next Tuesday at 10:00 AM...")
return {"appointment_confirmed": True}
第4步:构建图
现在我们把各部分连接起来。当存在异常时,条件边将流程发送到搜索步骤,否则图结束。
workflow = StateGraph(AgentState)
workflow.add_node("analyzer", analyze_report_node)
workflow.add_node("searcher", search_specialist_node)
workflow.add_node("scheduler", book_appointment_node)
workflow.set_entry_point("analyzer")
def should_continue(state: AgentState):
return "continue" if state["abnormalities"] else "end"
workflow.add_conditional_edges(
"analyzer",
should_continue,
{
"continue": "searcher",
"end": END,
},
)
workflow.add_edge("searcher", "scheduler")
workflow.add_edge("scheduler", END)
app = workflow.compile()
为什么这很重要:向行动导向 AI 的转变
大多数 AI 教程只停留在“总结文档”。在真实世界中,企业和用户需要 结果。通过将 LangGraph 的有状态编排与 LLM 推理以及外部工具相结合,我们可以从被动洞察转向主动协助——自动将血液检测报告转化为已预约的专科医生就诊。
编码愉快! 🚀
使用 Tavily、Google Calendar 等强大工具进行状态管理,可将被动的 LLM 转变为用户健康旅程中的主动参与者。
这种模式——检测 → 搜索 → 行动——是下一代企业 AI 的蓝图。
若想深入了解如何安全地处理 PHI(受保护的健康信息)或优化这些代理提示以降低延迟,请查阅位于 的深入指南。它们涵盖了超出简单 MVP 的生产级细节。
结论
我们已经成功构建了一个自主循环,能够:
- 理解 复杂的实验室数据。
- 决定 是否需要采取行动。
- 执行 真实世界的 API 调用以预约。
医疗的未来不仅仅是更好的药物;更是更好的可及性和减轻患者的认知负担。
接下来你想自动化什么? 也许是一个根据你的睡眠数据调整锻炼的健身代理?在评论中告诉我吧! 👇
