这次我们来看一个医疗问诊 Agent 的实现案例,它基于 LangChain、LangGraph 和 LangSmith 三大组件构建。这个项目不是简单的概念介绍,而是通过一个具体的应用场景,让你直观理解这三个工具各自扮演什么角色、如何协同工作,以及如何从零搭建一个能实际运行的 AI Agent。

对于开发者而言,最关心的往往是:这套技术栈学习成本高吗?本地环境能否跑起来?有没有现成的代码和清晰的步骤可以 follow?本文将围绕一个模拟的医疗问诊 Agent,拆解其核心架构,并提供从环境搭建、代码实现到效果监控的完整实操指南。无论你是想入门 AI Agent 开发,还是希望将 LangChain 等工具用于实际项目,这篇文章都能提供一条清晰的路径。

1. 核心能力速览:技术栈定位与分工

在深入代码之前,我们先快速厘清 LangChain、LangGraph 和 LangSmith 在这个 Agent 中的核心职责,这有助于理解后续的每一个设计决策。

组件 角色定位 在医疗问诊 Agent 中的具体作用 关键特点
LangChain 基础编排框架 提供与大模型(如 OpenAI GPT、通义千问等)对话的基础能力,管理提示词模板、记忆(Memory)、工具(Tools)的调用链。 模块化设计,简化了与大模型交互的复杂度,是构建 Agent 的“地基”。
LangGraph 工作流与状态机引擎 定义问诊流程(如:症状收集 -> 初步判断 -> 追问细节 -> 生成建议),管理 Agent 在不同状态间的跳转和循环。 支持复杂、有状态的多步骤工作流,用“图”的概念清晰定义执行路径,解决传统链式调用难以处理循环和分支的问题。
LangSmith 开发与监控平台 全程跟踪 Agent 每一次的调用(LLM、工具)、记录输入输出、评估性能、帮助调试和优化提示词。 提供可视化追踪链路,是提升 Agent 可靠性和调试效率的“望远镜”和“仪表盘”。

这个技术组合的核心价值在于 :LangChain 让你能快速“搭起来”,LangGraph 让你能精细地“控制流程”,而 LangSmith 则让你能清晰地“看到问题并改进”。接下来,我们将基于这个分工,构建一个具体的医疗问诊 Agent。

2. 项目目标与使用边界

我们的目标是构建一个 演示性质 的医疗问诊 AI Agent。它能够模拟以下流程:

  1. 主动询问 :引导用户描述主要症状。
  2. 智能追问 :根据初始症状,自动提出相关问题以收集关键信息(如持续时间、疼痛性质、既往病史等)。
  3. 初步分析 :基于收集的信息,提供可能的疾病方向或健康建议。
  4. 强调边界 :始终给出免责声明,强调本 Agent 不能替代专业医疗诊断。

适用场景与读者

  • AI 应用开发者 :希望学习如何将 LangChain/LangGraph 用于垂直领域。
  • 技术决策者 :评估此类技术栈构建复杂业务逻辑的可行性。
  • 学生与研究者 :需要可运行的案例进行学习和实验。

重要边界与免责声明

  • 非医疗诊断工具 :本项目生成的任何内容均为基于模式识别的信息整合与推理演示, 绝对不能 用于真实的医疗诊断、治疗或健康决策。
  • 数据与隐私 :示例中不使用任何真实患者数据。在实际应用中,处理健康信息必须严格遵守相关法律法规(如 HIPAA、GDPR 等)。
  • 模型依赖性 :Agent 的表现严重依赖底层大模型的能力和训练数据。需要针对专业领域进行精调(Fine-tuning)或检索增强生成(RAG)才能达到实用水平。

3. 环境准备与依赖安装

我们将使用 Python 作为开发语言。请确保你的环境满足以下条件。

3.1 基础环境要求

  • 操作系统 :Windows 10/11, macOS, 或 Linux (Ubuntu 20.04+ 推荐)。
  • Python 版本 :3.8 至 3.11(建议使用 3.10 以获得最佳兼容性)。
  • 包管理工具 pip conda
  • 网络 :能够访问互联网,用于安装包和调用大模型 API(如 OpenAI)。
  • 硬件 :无特殊 GPU 要求,因为主要调用云端 API。本地运行仅需普通 CPU 和足够内存(建议 8GB 以上)。

3.2 核心依赖安装

创建一个新的 Python 虚拟环境是良好的实践。然后安装以下核心库:

# 创建并激活虚拟环境 (以 conda 为例)
conda create -n medical-agent python=3.10
conda activate medical-agent

# 安装 LangChain 核心库、LangGraph 和 LangSmith SDK
pip install langchain langgraph langsmith

# 安装 OpenAI 库(作为本例的 LLM 提供商)
pip install openai

# 可选但推荐:安装环境变量管理库
pip install python-dotenv

版本兼容性说明 :LangChain 生态更新较快,建议查看官方文档锁定主要版本。例如:

pip install "langchain>=0.1.0,<0.2.0" "langgraph>=0.0.30,<0.1.0"

3.3 配置 API 密钥与环境变量

本项目需要调用大模型 API(例如 OpenAI)。为了安全,切勿将密钥硬编码在代码中。

  1. 在项目根目录创建 .env 文件。
  2. 填入你的 API 密钥:
    # .env 文件内容
    OPENAI_API_KEY=sk-your-openai-api-key-here
    LANGCHAIN_API_KEY=ls-your-langsmith-api-key-here  # 如需使用 LangSmith 追踪功能
    LANGCHAIN_TRACING_V2=true
    LANGCHAIN_PROJECT=Medical-Diagnosis-Agent-Demo # 你的 LangSmith 项目名
    
  3. 在 Python 代码开头加载环境变量:
    import os
    from dotenv import load_dotenv
    load_dotenv()  # 加载 .env 文件中的变量
    
    openai_api_key = os.getenv("OPENAI_API_KEY")
    # 如果设置了 LangSmith 密钥,LangChain 会自动将运行记录发送到平台
    

4. 医疗问诊 Agent 的 LangChain 基础构建

我们首先使用 LangChain 搭建 Agent 的核心“大脑”和“工具”。

4.1 定义工具(Tools)

工具是 Agent 可以执行的动作。在这个问诊场景中,我们可以定义一些模拟的“医学知识查询”工具。

from langchain.tools import tool
from typing import Optional

@tool
def search_medical_library(symptom: str, keyword: Optional[str] = None) -> str:
    """
    模拟搜索医学知识库。根据症状关键词查找相关信息。
    
    Args:
        symptom: 主要症状描述。
        keyword: 可选的具体关键词。
    
    Returns:
        返回模拟的医学知识摘要。
    """
    # 这里应该是连接真实医学数据库的代码,此处为演示返回模拟数据
    knowledge_base = {
        "headache": "常见原因包括紧张性头痛、偏头痛、感冒或流感、视力疲劳等。严重或突发剧烈头痛需警惕脑血管疾病。",
        "fever": "发热是身体对感染的常见反应。需关注体温、持续时间、是否伴有寒战、皮疹等其他症状。",
        "cough": "咳嗽可分为干咳和湿咳(有痰)。可能原因包括呼吸道感染、过敏、哮喘或胃食管反流等。"
    }
    
    # 简单的关键词匹配逻辑
    for key, info in knowledge_base.items():
        if key in symptom.lower():
            return f"根据医学知识库,关于“{symptom}”:{info}"
    
    return f"关于“{symptom}”的通用信息:建议关注症状的持续时间、严重程度、伴随症状,并及时记录。"

@tool
def calculate_bmi(weight_kg: float, height_m: float) -> str:
    """计算身体质量指数 (BMI)。"""
    bmi = weight_kg / (height_m ** 2)
    category = "体重过轻" if bmi < 18.5 else "正常范围" if bmi < 25 else "超重" if bmi < 30 else "肥胖"
    return f"您的 BMI 指数为 {bmi:.1f},属于“{category}”。(注:此为通用筛查工具,个体情况请咨询医生)"

4.2 构建提示词模板与 LLM

我们设计一个系统提示词来塑造 Agent 的“医生助手”角色。

from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_openai import ChatOpenAI

# 1. 定义系统提示词
system_prompt = """你是一位专业的医疗问诊辅助助手。你的目标是帮助用户清晰描述症状,并提供基于公共医学知识的初步分析参考。
你的核心工作流程是:
1.  首先,友好问候并询问用户的主要不适。
2.  根据用户的描述,主动、有条理地追问关键信息,例如:症状开始时间、具体部位、性质(钝痛/刺痛)、严重程度(1-10分)、伴随症状、已用药物、过敏史、既往病史等。
3.  在获得足够信息后,利用可用的工具(如医学知识库查询)进行信息整合。
4.  最后,给出初步的、可能的方向性建议,并**必须强烈强调**以下免责声明:
    “重要提醒:我是人工智能模型,无法提供医疗诊断。以上信息仅为健康知识科普和症状整理参考,不能替代执业医师的面对面诊疗。如果感到不适,请务必及时前往正规医院就医。”

请始终保持专业、谨慎和富有同理心的态度。"""

# 2. 构建提示词模板
prompt = ChatPromptTemplate.from_messages([
    ("system", system_prompt),
    MessagesPlaceholder(variable_name="messages"), # 用于存放历史对话
    ("human", "{input}"), # 用户最新输入
])

# 3. 初始化 LLM(使用 OpenAI GPT-4 或 GPT-3.5-Turbo)
llm = ChatOpenAI(
    model="gpt-3.5-turbo", # 或 "gpt-4"
    temperature=0.2, # 较低的温度使输出更稳定、专业
    api_key=openai_api_key
)

4.3 创建基础 Agent 执行链

将工具、LLM 和提示词组合成一个简单的链。

from langchain.agents import create_react_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory

# 绑定工具
tools = [search_medical_library, calculate_bmi]

# 创建 ReAct 智能体(Reason + Act)
agent = create_react_agent(
    llm=llm,
    tools=tools,
    prompt=prompt,
)

# 创建记忆,使 Agent 能记住对话历史
memory = ConversationBufferMemory(memory_key="messages", return_messages=True)

# 创建执行器
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent,
    tools=tools,
    memory=memory,
    verbose=True, # 设置为 True 可以在控制台看到详细的推理步骤
    handle_parsing_errors=True # 优雅处理解析错误
)

至此,一个具备基础对话和工具调用能力的医疗问诊 Agent 就完成了。你可以运行一个简单对话测试:

# 测试对话
response = agent_executor.invoke({"input": "你好,我最近有点头痛。"})
print(response["output"])

这个基础版本已经能工作,但它缺乏 结构化的流程控制 。例如,我们无法强制它必须完成“症状收集”阶段才能进入“分析建议”阶段。这就需要 LangGraph 登场。

5. 使用 LangGraph 构建结构化问诊工作流

LangGraph 允许我们将问诊过程定义为一个有向图,节点代表步骤(如“询问症状”、“分析信息”),边代表步骤间的流转条件。

5.1 定义图的状态(State)

首先,我们需要定义一个状态类,用来在整个工作流中传递和存储信息。

from typing import TypedDict, Annotated, List
import operator

class AgentState(TypedDict):
    """
    定义图的状态结构。
    """
    messages: Annotated[List[str], operator.add]  # 对话消息历史
    current_step: str  # 当前步骤,如 "greeting", "symptom_collection", "analysis", "end"
    collected_symptoms: dict  # 收集到的症状信息
    user_input: str  # 用户最新输入
    agent_response: str  # Agent 的响应

5.2 定义图的节点(Nodes)

每个节点是一个函数,接收状态,执行操作,并返回更新后的状态。

from langgraph.graph import END, StateGraph

def greeting_node(state: AgentState) -> AgentState:
    """初始问候节点。"""
    greeting = "您好!我是您的医疗问诊辅助助手。为了更好地帮助您,请告诉我您今天主要哪里不舒服?"
    state["messages"].append(greeting)
    state["agent_response"] = greeting
    state["current_step"] = "symptom_collection"
    return state

def symptom_collection_node(state: AgentState) -> AgentState:
    """症状收集节点。这里可以集成之前的 LangChain Agent 来动态追问。"""
    # 将当前状态和历史消息传递给 LangChain Agent
    history_text = "\n".join(state["messages"][-5:]) # 取最近5条历史
    user_input = state.get("user_input", "")
    
    # 构建给基础 Agent 的输入
    agent_input = f"对话历史:{history_text}\n用户最新输入:{user_input}\n请根据以上信息,进行专业的症状追问或总结。"
    
    # 调用之前创建的 LangChain Agent 执行器
    result = agent_executor.invoke({"input": agent_input})
    
    # 更新状态
    state["messages"].append(f"用户:{user_input}")
    state["messages"].append(f"助手:{result['output']}")
    state["agent_response"] = result['output']
    
    # 简单逻辑判断是否收集到足够信息(实际应更复杂)
    if "建议" in result['output'] or "提醒" in result['output']:
        state["current_step"] = "analysis"
    else:
        state["current_step"] = "symptom_collection" # 继续收集
    
    return state

def analysis_node(state: AgentState) -> AgentState:
    """分析总结节点。调用工具进行信息整合,并生成最终建议。"""
    # 模拟从收集的信息中提取关键词
    symptoms_summary = state.get("collected_symptoms", "用户描述的症状")
    
    # 调用医学知识库工具
    tool_result = search_medical_library.invoke(symptoms_summary)
    
    # 构建最终分析提示
    final_prompt = f"""
    基于以下收集到的症状信息:
    {symptoms_summary}
    
    以及医学知识库查询结果:
    {tool_result}
    
    请生成一份最终的健康建议摘要,并再次附上强烈的免责声明。
    """
    
    analysis_result = llm.invoke(final_prompt)
    
    state["messages"].append(f"助手(分析总结):{analysis_result.content}")
    state["agent_response"] = analysis_result.content
    state["current_step"] = "end"
    return state

5.3 构建图并定义流转逻辑(Edges)

# 创建图构建器
workflow = StateGraph(AgentState)

# 添加节点
workflow.add_node("greeting", greeting_node)
workflow.add_node("collect_symptoms", symptom_collection_node)
workflow.add_node("analyze", analysis_node)

# 设置入口点
workflow.set_entry_point("greeting")

# 定义边(流转逻辑)
workflow.add_edge("greeting", "collect_symptoms")

# 从症状收集节点出来的流转:根据状态决定下一步
def route_after_collection(state: AgentState):
    if state["current_step"] == "analysis":
        return "analyze"
    else:
        return "collect_symptoms" # 继续循环收集

workflow.add_conditional_edges(
    "collect_symptoms",
    route_after_collection,
    {
        "analyze": "analyze",
        "collect_symptoms": "collect_symptoms",
    }
)

workflow.add_edge("analyze", END)

# 编译图
app = workflow.compile()

现在,我们得到了一个名为 app 的、具备状态和流程控制的医疗问诊工作流。你可以这样运行它:

# 初始化状态
initial_state = {
    "messages": [],
    "current_step": "start",
    "collected_symptoms": {},
    "user_input": "",
    "agent_response": ""
}

# 运行图(模拟多轮对话)
# 第一轮:问候
result1 = app.invoke(initial_state)
print("助手:", result1["agent_response"])

# 模拟用户输入“头痛”
result1["user_input"] = "从昨天开始,一阵一阵的头痛,主要在太阳穴这边。"
result2 = app.invoke(result1)
print("助手:", result2["agent_response"])

# 继续交互...

通过 LangGraph,我们实现了从“自由对话”到“受控流程”的升级。Agent 现在必须按照我们设计的路径(问候 -> 循环收集症状 -> 分析总结)来运行。

6. 集成 LangSmith 进行追踪、调试与评估

LangSmith 是提升开发效率的关键。它能记录每一次 LLM 调用、工具调用和状态流转,方便我们回溯和优化。

6.1 配置与基本追踪

如果你已按照第 3.3 节设置了环境变量 ( LANGCHAIN_API_KEY 等),那么 LangChain 和 LangGraph 的调用会自动记录到 LangSmith 平台。

  1. 访问 LangSmith 官网 ,使用你的 API 密钥登录。
  2. 运行上面的 app.invoke() 代码几次,模拟不同的问诊对话。
  3. 在 LangSmith 的 Dashboard 中,你应该能看到一个名为 “Medical-Diagnosis-Agent-Demo” 的项目,里面包含了每次运行的详细记录。

6.2 利用追踪记录进行调试

假设 Agent 在某次追问中问题不准确,你可以:

  • 在 LangSmith 中找到对应的运行轨迹(Trace)。
  • 点击展开,查看每一步的 输入 输出
  • 重点检查 collect_symptoms 节点中, agent_executor 收到的输入和 LLM 生成的输出。可能是提示词不够清晰,或者工具返回的信息有误导。
  • 直接在平台上复制这次运行的提示词和参数,在 Playground 中修改并快速测试,无需重启本地程序。

6.3 评估与改进

LangSmith 支持对运行结果进行人工或自动评估。

  • 人工反馈 :你可以在界面上对某次 Agent 的回复打分(Thumbs Up/Down),并添加评论。
  • 自动化评估 :可以编写评估函数(例如,检查回复中是否包含免责声明、追问的问题是否相关等),让 LangSmith 批量对历史运行记录进行评分,找出薄弱环节。
# 示例:一个简单的自动化评估函数(需在 LangSmith 中配置)
def contains_disclaimer_evaluator(run_output: str) -> dict:
    """评估 Agent 回复是否包含免责声明关键词。"""
    disclaimer_keywords = ["不能替代", "仅供参考", "请及时就医", "执业医师"]
    score = any(keyword in run_output for keyword in disclaimer_keywords)
    return {"score": score, "key": "contains_disclaimer"}

通过 LangSmith 的数据反馈,你可以系统地优化提示词、调整工具、或修改 LangGraph 中的流程逻辑,形成一个“开发-运行-监控-优化”的闭环。

7. 完整代码整合与运行示例

将以上所有部分整合到一个可执行的 Python 脚本中。

# medical_agent_demo.py
import os
from dotenv import load_dotenv
from typing import TypedDict, Annotated, List, Optional
import operator
from langchain.tools import tool
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
from langgraph.graph import END, StateGraph

# --- 1. 加载环境变量 ---
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")

# --- 2. 定义工具 ---
@tool
def search_medical_library(symptom: str, keyword: Optional[str] = None) -> str:
    # ... (工具实现同上,此处省略以节省篇幅)
    pass

@tool
def calculate_bmi(weight_kg: float, height_m: float) -> str:
    # ... (工具实现同上,此处省略以节省篇幅)
    pass

# --- 3. 构建基础 LangChain Agent ---
system_prompt = """...""" # 同上文系统提示词
prompt = ChatPromptTemplate.from_messages([...])
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.2, api_key=openai_api_key)
tools = [search_medical_library, calculate_bmi]
agent = create_react_agent(llm=llm, tools=tools, prompt=prompt)
memory = ConversationBufferMemory(memory_key="messages", return_messages=True)
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent, tools=tools, memory=memory, verbose=False, handle_parsing_errors=True
)

# --- 4. 定义 LangGraph 状态与节点 ---
class AgentState(TypedDict):
    messages: Annotated[List[str], operator.add]
    current_step: str
    collected_symptoms: dict
    user_input: str
    agent_response: str

def greeting_node(state: AgentState):
    # ... (实现同上)
    pass
def symptom_collection_node(state: AgentState):
    # ... (实现同上)
    pass
def analysis_node(state: AgentState):
    # ... (实现同上)
    pass

# --- 5. 构建并编译工作流图 ---
workflow = StateGraph(AgentState)
workflow.add_node("greeting", greeting_node)
workflow.add_node("collect_symptoms", symptom_collection_node)
workflow.add_node("analyze", analysis_node)
workflow.set_entry_point("greeting")
workflow.add_edge("greeting", "collect_symptoms")

def route_after_collection(state: AgentState):
    if state["current_step"] == "analysis":
        return "analyze"
    else:
        return "collect_symptoms"

workflow.add_conditional_edges("collect_symptoms", route_after_collection, {"analyze": "analyze", "collect_symptoms": "collect_symptoms"})
workflow.add_edge("analyze", END)
app = workflow.compile()

# --- 6. 运行演示 ---
if __name__ == "__main__":
    print("=== 医疗问诊 Agent 演示开始 ===")
    state = {
        "messages": [],
        "current_step": "start",
        "collected_symptoms": {},
        "user_input": "",
        "agent_response": ""
    }
    
    # 启动流程
    state = app.invoke(state)
    print(f"助手: {state['agent_response']}")
    
    # 模拟用户交互
    simulated_conversation = [
        "我头痛,还有点发烧。",
        "从昨天下午开始的,体温大概38度。",
        "没有药物过敏史。"
    ]
    
    for user_say in simulated_conversation:
        state["user_input"] = user_say
        state = app.invoke(state)
        print(f"用户: {user_say}")
        print(f"助手: {state['agent_response']}")
        print("-" * 40)
    
    print("=== 演示结束 ===")
    print("提示:请登录 LangSmith 平台查看本次运行的详细追踪记录。")

运行此脚本,你将在控制台看到结构化的对话流程,同时在 LangSmith 上获得完整的可视化追踪。

8. 常见问题与排查方法

在开发和运行此类 Agent 时,你可能会遇到以下典型问题:

问题现象 可能原因 排查方式 解决方案
ModuleNotFoundError: No module named 'langchain' 依赖未安装或不在当前 Python 环境。 在终端执行 pip list | grep langchain 在正确的虚拟环境中,使用 pip install 重新安装所需包。
AuthenticationError Invalid API Key OpenAI API 密钥错误或未设置。 检查 .env 文件中的 OPENAI_API_KEY ,或 print(os.getenv('OPENAI_API_KEY')) 确保密钥正确,且已通过 load_dotenv() 加载。
Agent 回答不符合预期,胡言乱语。 提示词(System Prompt)设计不佳,或 Temperature 参数过高。 在 LangSmith 中检查发送给 LLM 的最终提示词内容。 细化系统提示词,明确角色和步骤;将 temperature 调低(如 0.1-0.3)。
LangGraph 图卡在某个节点无限循环。 节点间的条件边(Conditional Edge)逻辑有误,状态 current_step 未按预期更新。 在节点函数内打印 state['current_step'] ,或在 LangSmith 中查看状态变化。 仔细检查 route_after_collection 等路由函数的逻辑,确保所有可能的状态都有对应的出口。
LangSmith 上看不到追踪记录。 1. API 密钥未设置或错误。
2. 环境变量 LANGCHAIN_TRACING_V2 未设为 true
3. 网络问题。
1. 检查环境变量。
2. 检查 LangSmith 控制台是否有新项目创建。
1. 确认 .env 文件正确且被加载。
2. 确保代码中未主动设置 tracing_v2=False
工具(Tool)未被调用。 1. 工具描述不够清晰,LLM 无法理解何时调用。
2. Agent 类型选择不当。
在 LangSmith 追踪中查看 LLM 的思考过程,看它是否“考虑”了工具。 1. 优化工具的 description 和参数说明。
2. 尝试使用 create_react_agent 或其他更擅长工具调用的 Agent 类型。
错误: Graph with name 'XX' already exists 重复定义了同名的图。 检查代码,确保 StateGraph compile() 只执行一次。 将图的构建和编译放在函数或主程序入口,避免模块重复导入时多次执行。

9. 最佳实践与进阶方向

基于这个医疗问诊 Agent 的 demo,你可以遵循以下实践并探索更多可能性:

  1. 提示词工程 :医疗领域对准确性要求极高。投入时间精心设计系统提示词和工具描述,是提升效果性价比最高的方式。可以利用 LangSmith 的 Playground 进行 A/B 测试。
  2. 迭代开发 :采用“小步快跑”的方式。先构建一个最小可行产品(如只有症状收集),运行并评估,再逐步添加分析、工具调用、多轮循环等复杂逻辑。
  3. 状态设计 AgentState 的设计至关重要。开始时可以简单,随着流程复杂化,逐步增加如 symptom_duration severity 等结构化字段,这能让节点逻辑更清晰。
  4. 引入外部知识 :当前的 search_medical_library 是模拟的。 真正的实用化必须接入权威、最新的医学知识库 。这可以通过 LangChain 的 Retrieval 模块实现,将 PDF、医学文献向量化后供 Agent 检索。
  5. 复杂工作流 :LangGraph 支持子图、并行执行、人工审批节点等。例如,可以在“分析”节点后,增加一个“严重程度分诊”子图,将用户引导至急诊、门诊或自我护理等不同路径。
  6. 评估与监控 :利用 LangSmith 建立持续的评估体系。除了自动检查免责声明,还可以评估回复的准确性、完整性和同理心,长期监控 Agent 的性能漂移。
  7. 安全与合规 :这是医疗类应用的底线。除了前端免责声明,应在系统层面设置安全护栏,对输入输出进行过滤,并建立人工审核流程,确保内容安全可靠。

通过这个从零到一的项目,你应该能清晰地看到 LangChain、LangGraph 和 LangSmith 如何各司其职又紧密协作。LangChain 提供了与 AI 交互的“砖块”,LangGraph 让你能设计复杂的“建筑蓝图”,而 LangSmith 则是确保“建筑”质量可靠的“监理系统”。掌握这套组合,你就能更自信地应对各类复杂的 AI Agent 开发挑战。

更多推荐