
30款热门AI模型一站整合DeepSeek/GLM/Claude 随心用限时 5 折。 点击领海量免费额度这次我们来看一个关于 LangChain 和 AI Agent 架构的核心概念解析。如果你正在学习或开发基于大语言模型的智能体应用但被各种术语如“工具调用”、“记忆”、“规划”搞得晕头转向这篇文章就是为你准备的。我们不空谈理论而是直接切入 LangChain 官方文档中定义的五个核心架构概念让你快速理解一个 AI Agent 是如何被“组装”起来并运作的。本文将重点拆解这五个核心概念路由器、结构化输出、工具调用、记忆和规划。它们是构建从简单路由到复杂多步决策 Agent 的基石。理解它们你就能看懂大多数 Agent 框架如 LangGraph的设计思路并知道如何为自己的项目选择合适的架构模式。本文会结合 LangChain 官方文档的说明为你梳理每个概念的作用、实现方式以及它们如何协同工作最终形成一个能自主决策、使用工具并记住上下文的智能体。1. 核心能力速览AI Agent 架构五要素在深入细节之前我们先通过一个表格快速把握这五个核心概念在整个 Agent 架构中的定位和关键作用。这能帮助你在后续阅读时始终清楚每个部分在解决什么问题。核心概念核心作用类比在 LangChain/LangGraph 中的体现路由器 (Router)让 LLM 做单项选择从有限选项中决定下一步走哪条路。交通路口的分流标志指引车辆选择A或B方向。通过结构化输出实现用于构建简单的决策分支。结构化输出 (Structured Output)约束 LLM 的响应格式确保输出能被程序可靠地解析和执行。填写一份标准表格必须按姓名、日期、金额的固定格式填写。通过提示工程、输出解析器或 LLM 内置的工具调用功能实现。工具调用 (Tool Calling)赋予 LLM 调用外部函数/API 的能力以获取信息或执行操作。给助理LLM一本工具手册它可以根据任务需求选择使用计算器、搜索引擎或邮件客户端。ChatModel.bind_tools()方法将 Python 函数绑定为工具。记忆 (Memory)使 Agent 能保留和利用历史信息包括当前会话的短期记忆和跨会话的长期记忆。助理的笔记本记录了当前对话的上下文和过去的重要结论。LangGraph 的State状态模式、Checkpointer检查点、Store存储机制。规划 (Planning)让 LLM 能够制定并执行一个多步骤的计划来达成复杂目标而不仅仅是单次响应。项目规划师先拆解目标写报告再规划步骤查资料、写大纲、撰写、润色最后逐步执行。在工具调用 Agent 中通过while循环实现LLM 反复决策直到任务完成。这五个概念并非孤立而是层层递进、组合使用的。简单的 Agent 可能只用到路由和结构化输出而强大的 Agent如 ReAct 架构则会综合运用工具调用、记忆和规划。2. 适用场景与使用边界在开始构建之前明确这些架构概念能解决什么问题以及它们的边界在哪里至关重要。适用场景任务自动化与编排需要根据用户输入动态决定调用哪个数据库、API 或内部服务。例如一个客服机器人需要根据问题类型订单查询、技术故障路由到不同的处理模块。复杂问题求解任务无法通过一次 LLM 调用完成需要拆解为搜索、计算、分析、生成等多个步骤。例如让 Agent 分析一份财报并生成摘要报告。上下文感知对话应用需要记住对话历史实现多轮连贯交互。例如一个编程助手需要记住你之前定义的变量和函数。集成外部系统需要将 LLM 的能力与现有的软件工具、数据库、知识库相结合。例如让 LLM 通过调用 SQL 工具来查询业务数据。使用边界与注意事项可靠性依赖 LLMAgent 的决策质量根本上取决于底层 LLM 的推理和工具调用能力。模型的选择和提示词工程至关重要。复杂性与调试成本引入规划、记忆等机制会显著增加系统的复杂性调试链式调用错误可能比传统程序更困难。延迟与成本多步规划和工具调用意味着多次 LLM API 调用会增加响应延迟和 API 使用成本。安全与权限工具调用功能强大必须严格限制 Agent 可访问的工具范围和操作权限防止越权操作。不确定性LLM 的决策具有一定随机性在生产环境中需要设计验证、人工审核或回退机制。3. 环境准备与前置条件要实践这些概念你需要一个基础的 Python 开发环境。以下是一个通用的准备清单具体版本可能随 LangChain 更新而变化。Python 环境推荐使用 Python 3.10 或 3.11。使用conda或venv创建独立的虚拟环境是最佳实践。包管理工具pip是最常用的工具。LangChain 核心库这是构建 Agent 的基础框架。LangChain 社区工具包可选提供大量预构建的工具如搜索引擎、计算器、维基百科API等。LangGraph用于高级工作流如果你需要构建有状态、多步骤的复杂 Agent 工作流LangGraph 是官方推荐的库。大语言模型接入你需要一个 LLM 提供商。可以是OpenAI API最常用稳定工具调用能力强。Anthropic Claude API同样支持工具调用。开源模型本地部署如通过Ollama,vLLM,Transformers库调用 Llama、Qwen 等模型。需注意模型本身需支持工具调用功能。代码编辑器VS Code, PyCharm 等。4. 安装部署与启动方式这里不涉及“一键启动”的 Web 服务因为核心概念的学习和验证更侧重于代码层面。我们通过安装必要的库并运行一个简单的脚本来验证环境。首先安装核心依赖。建议在虚拟环境中操作# 创建并激活虚拟环境 (以 conda 为例) conda create -n langchain-agent python3.10 conda activate langchain-agent # 安装 LangChain 和 LangGraph (用于构建工作流) pip install langchain langgraph # 安装你选择的 LLM 接口包例如 OpenAI pip install openai # 安装 langchain-community 以获取更多社区工具可选但推荐 pip install langchain-community接下来我们通过一个最简单的“路由器”示例来验证环境并理解第一个核心概念。创建一个名为test_router.py的文件# test_router.py from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser import os # 设置你的 OpenAI API 密钥请替换为你的真实密钥或从环境变量读取 os.environ[OPENAI_API_KEY] your-api-key-here # 1. 初始化 LLM llm ChatOpenAI(modelgpt-4o-mini, temperature0) # 2. 定义一个简单的“路由”提示词 prompt ChatPromptTemplate.from_messages([ (system, 你是一个分类机器人。根据用户输入判断它属于以下哪一类问候、技术问题、闲聊。只输出类别名称不要任何其他文字。), (user, {input}) ]) # 3. 创建链 chain prompt | llm | StrOutputParser() # 4. 测试 result chain.invoke({input: 你好今天天气怎么样}) print(f输入: 你好今天天气怎么样 - 路由结果: {result}) result2 chain.invoke({input: Python中的装饰器是什么}) print(f输入: Python中的装饰器是什么 - 路由结果: {result2})运行这个脚本python test_router.py如果输出类似于路由结果: 闲聊和路由结果: 技术问题说明你的环境已就绪并且已经实现了一个基于提示词工程的简单“路由器”。这为我们理解更复杂的架构打下了基础。5. 功能测试与效果验证逐个击破五大概念我们将通过五个逐渐复杂的代码示例来验证和体会每个核心概念是如何工作的。5.1 概念一路由器与结构化输出测试目的验证 LLM 能否根据用户意图可靠地选择不同的处理路径。结构化输出是确保路由决策可被程序解析的关键。操作步骤与代码 上面的test_router.py已经演示了最简单的路由。但它的输出是纯文本程序需要做字符串匹配来判断不够健壮。我们使用Pydantic来定义结构化的输出让 LLM 返回一个 JSON 对象。# test_structured_router.py from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.pydantic_v1 import BaseModel, Field from langchain_core.output_parsers import PydanticOutputParser import os os.environ[OPENAI_API_KEY] your-api-key-here # 1. 定义我们期望的结构化输出格式 class RouteDecision(BaseModel): category: str Field(description输入所属的类别, enum[问候, 技术问题, 闲聊, 其他]) confidence: float Field(description分类的置信度0到1之间, ge0, le1) next_step: str Field(description建议的下一步操作) # 2. 创建解析器 parser PydanticOutputParser(pydantic_objectRouteDecision) # 3. 构建提示词将格式指令注入 prompt ChatPromptTemplate.from_messages([ (system, 你是一个路由分析器。分析用户输入并按照指定格式输出。\n{format_instructions}), (user, {input}) ]).partial(format_instructionsparser.get_format_instructions()) # 4. 初始化 LLM 和链 llm ChatOpenAI(modelgpt-4o-mini, temperature0) chain prompt | llm | parser # 5. 测试 test_inputs [ Hello!, 如何用Python连接MySQL数据库, 讲个笑话吧。, 我想订一张明天去北京的机票。 ] for inp in test_inputs: try: result: RouteDecision chain.invoke({input: inp}) print(f输入: {inp}) print(f 类别: {result.category}, 置信度: {result.confidence:.2f}, 建议: {result.next_step}) print(- * 40) except Exception as e: print(f处理输入 {inp} 时出错: {e})预期结果与判断 程序应成功输出结构化的对象包含类别、置信度和建议。例如对于技术问题next_step可能是“调用技术文档检索工具”。这证明了我们可以通过结构化输出让 LLM 做出可靠的、程序可处理的决策这是构建更复杂 Agent 的第一步。5.2 概念二工具调用测试目的验证 LLM 能否理解工具的定义并根据用户问题自动选择并调用正确的工具。操作步骤与代码 我们将定义两个简单的工具一个计算器和一个获取当前时间的工具。然后看 LLM 如何调用它们。# test_tool_calling.py from langchain_openai import ChatOpenAI from langchain_core.tools import tool import datetime import os os.environ[OPENAI_API_KEY] your-api-key-here # 1. 使用 tool 装饰器定义工具 tool def calculator(expression: str) - str: 计算一个数学表达式的值。支持加减乘除和括号。 # 警告在生产环境中直接使用 eval 是危险的这里仅作演示。 # 应使用安全的计算库如 ast.literal_eval 或 numexpr。 try: result eval(expression) return f计算结果: {result} except Exception as e: return f计算错误: {e} tool def get_current_time(timezone: str Asia/Shanghai) - str: 获取指定时区的当前时间。 try: # 简化处理实际应使用 pytz 库 if timezone Asia/Shanghai: tz_offset datetime.timedelta(hours8) elif timezone UTC: tz_offset datetime.timedelta(hours0) else: tz_offset datetime.timedelta(hours8) # 默认 current_time datetime.datetime.utcnow() tz_offset return f当前时间 ({timezone}): {current_time.strftime(%Y-%m-%d %H:%M:%S)} except Exception as e: return f获取时间错误: {e} # 2. 准备工具列表 tools [calculator, get_current_time] # 3. 初始化 LLM并将工具绑定给它 llm_with_tools ChatOpenAI(modelgpt-4o-mini, temperature0).bind_tools(tools) # 4. 模拟一个简单的 Agent 单步调用 def simple_agent_step(user_query: str): print(f\n用户问题: {user_query}) # LLM 生成包含工具调用请求的消息 ai_msg llm_with_tools.invoke(user_query) # 检查消息中是否有工具调用 if ai_msg.tool_calls: for tc in ai_msg.tool_calls: tool_name tc[name] tool_args tc[args] print(f Agent 决定调用工具: {tool_name}, 参数: {tool_args}) # 找到对应的工具并执行 tool_to_use next((t for t in tools if t.name tool_name), None) if tool_to_use: tool_result tool_to_use.invoke(tool_args) print(f 工具执行结果: {tool_result}) # 在实际的 ReAct 循环中这个结果会作为“观察”反馈给 LLM 进行下一步 return tool_result else: print(f 错误未找到工具 {tool_name}) else: print(f Agent 直接回复: {ai_msg.content}) return ai_msg.content # 5. 测试 simple_agent_step(123乘以456等于多少) simple_agent_step(现在上海是几点钟) simple_agent_step(今天天气怎么样) # 这个问题没有对应工具应直接回复预期结果与判断 对于前两个问题LLM 应成功识别并请求调用calculator和get_current_time工具并传入正确的参数。对于第三个问题由于没有相关工具LLM 应直接生成一个回复如“我无法获取实时天气信息”。这验证了工具调用的核心机制LLM 理解工具描述并能在适当时机发起调用。5.3 概念三记忆测试目的验证 Agent 能否在对话中记住之前的交互内容。我们将实现一个简单的对话记忆。操作步骤与代码 LangChain 提供了多种记忆后端。这里我们使用最简单的ConversationBufferMemory来演示。# test_memory.py from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain import os os.environ[OPENAI_API_KEY] your-api-key-here # 1. 初始化 LLM 和记忆 llm ChatOpenAI(modelgpt-4o-mini, temperature0.7) # 温度稍高对话更自然 memory ConversationBufferMemory() # 2. 创建对话链 conversation ConversationChain( llmllm, memorymemory, verboseFalse # 设为 True 可以看到详细的提示词和记忆 ) # 3. 进行多轮对话 print(开始对话输入 quit 退出...) while True: human_input input(\n你: ) if human_input.lower() quit: break # 调用链它会自动处理记忆的读取和写入 response conversation.predict(inputhuman_input) print(fAI: {response}) # 可选打印当前记忆内容 # print(f[DEBUG] 当前记忆: {memory.buffer}) # 4. 演示记忆的持久化与加载简化版 print(\n--- 演示记忆保存 ---) print(f完整的对话历史:\n{memory.buffer}) # 在实际应用中你可以将 memory.buffer 或 memory.chat_memory.messages 保存到数据库或文件 # 例如保存为 JSON import json memory_dict memory.load_memory_variables({}) print(f记忆变量:\n{json.dumps(memory_dict, ensure_asciiFalse, indent2)})预期结果与判断 进行多轮对话例如你我叫小明。AI: 你好小明很高兴认识你。你我的名字是什么 AI 应该能回答“你叫小明”。这证明了ConversationBufferMemory自动将历史对话上下文纳入了后续的提示词中实现了短期会话记忆。对于更复杂的长期记忆和自定义状态管理则需要使用 LangGraph 的StateGraph来构建。5.4 概念四规划测试目的验证 Agent 能否为一个复杂任务制定多步计划并执行。我们将模拟一个结合了工具调用和规划的简单 ReAct 循环。操作步骤与代码 我们创建一个极简的“规划-执行”循环。Agent 先规划步骤然后逐步执行这里简化为按顺序执行规划好的工具调用。# test_planning.py from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser import os os.environ[OPENAI_API_KEY] your-api-key-here llm ChatOpenAI(modelgpt-4o-mini, temperature0) # 定义工具复用之前的计算器和时间工具 from test_tool_calling import calculator, get_current_time tools [calculator, get_current_time] tool_map {tool.name: tool for tool in tools} # 规划提示词让 LLM 为一个复杂任务列出步骤 planning_prompt ChatPromptTemplate.from_messages([ (system, 你是一个任务规划师。请将用户的复杂请求分解为一系列可执行的步骤。 每个步骤应该清晰、具体并且最好能对应一个可用的工具。可用的工具有{tool_list}。 请以“1. 步骤描述建议工具XXX”的格式输出计划。如果某步不需要工具就写“建议工具无”。), (user, {input}) ]) planning_chain planning_prompt | llm | StrOutputParser() def execute_plan(user_request: str): print(f\n用户请求: {user_request}) # 步骤1规划 tool_names [t.name for t in tools] plan_text planning_chain.invoke({input: user_request, tool_list: , .join(tool_names)}) print(f生成的计划:\n{plan_text}) # 步骤2简化版执行这里不实现完整的 ReAct 循环只演示概念 # 在实际的 LangGraph ReAct Agent 中这会是一个 While 循环LLM 每步决定下一步做什么。 print(\n开始执行计划模拟...) # 解析计划文本并模拟执行这是一个非常简化的演示 lines plan_text.split(\n) for line in lines: line line.strip() if line.startswith((1., 2., 3., 4., 5.)): print(f 执行: {line}) # 这里可以添加更复杂的逻辑来匹配工具并调用 # 例如如果 line 包含“计算”则调用 calculator if 计算 in line or 等于 in line: # 提取表达式很复杂这里仅演示 print(f [模拟] 调用计算器工具) elif 时间 in line: print(f [模拟] 调用获取时间工具) print(计划执行完毕模拟。) print(提示完整的规划-执行应使用 LangGraph 的 ReAct 或 StateGraph 实现。) # 测试 execute_plan(先计算一下(1527)*3等于多少然后告诉我现在的时间最后把这两个结果用一句话总结。)预期结果与判断 LLM 应生成一个包含多个步骤的计划文本例如“1. 计算表达式 (1527)*3 的值建议工具calculator。2. 获取当前时间建议工具get_current_time。3. 将前两步的结果用一句话总结建议工具无。” 这个示例虽然简化了执行但清晰地展示了“规划”的概念LLM 不是直接回答而是先拆解任务。在完整的 ReAct Agent 中LLM 会与“执行”步骤在一个循环中交替进行。5.5 概念五自定义架构与高级模式子图、并行化等测试目的理解如何将这些基础概念组合起来并了解 LangGraph 提供的高级功能如子图多 Agent 协作和并行化。操作步骤与代码 由于完整实现一个多 Agent 系统代码量较大我们这里描述其架构思想和 LangGraph 的关键组件并给出一个伪代码/概念图。概念解析自定义架构通过 LangGraph 的StateGraph你可以自由定义 Agent 的状态State和节点Node构建任意复杂的工作流而不仅限于预定义的 ReAct 模式。子图 (Subgraph)可以将一个复杂的图的一部分封装成一个子图。这在多 Agent 系统中非常有用每个 Agent 可以是一个子图拥有自己独立的状态和逻辑并通过父图进行协调。例如一个“研究 Agent”子图负责搜索和分析一个“写作 Agent”子图负责生成报告。并行化 (Parallelism)LangGraph 的SendAPI 允许你同时向多个节点发送消息实现并行处理。例如同时调用多个搜索引擎工具然后汇总结果。LangGraph 构建自定义 Agent 的工作流概览# 伪代码展示 LangGraph 的核心构建块 from langgraph.graph import StateGraph, END from typing import TypedDict, Annotated import operator # 1. 定义状态结构这是你的“记忆”的蓝图 class AgentState(TypedDict): messages: Annotated[list, operator.add] # 对话历史 plan: list[str] # 当前计划 current_step: int # 当前执行到第几步 results: dict # 中间结果 # 2. 定义各个节点函数工具调用、规划、总结等 def plan_node(state: AgentState): # 根据 messages 生成 plan new_plan llm.invoke(f为以下任务制定计划: {state[messages][-1]}) return {plan: new_plan, current_step: 0} def execute_step_node(state: AgentState): # 根据 plan[current_step] 决定调用哪个工具 step state[plan][state[current_step]] tool_result call_appropriate_tool(step) return {results: {state[current_step]: tool_result}} def should_continue_node(state: AgentState): # 判断是否继续执行下一步 if state[current_step] len(state[plan]) - 1: return continue else: return end # 3. 构建图 workflow StateGraph(AgentState) workflow.add_node(plan, plan_node) workflow.add_node(execute, execute_step_node) workflow.set_entry_point(plan) workflow.add_conditional_edges( execute, should_continue_node, {continue: execute, end: END} # 条件路由 ) # ... 添加更多边 # 4. 编译并运行图 app workflow.compile() final_state app.invoke({messages: [(user, 复杂任务)]})这个伪代码展示了如何将状态、节点、条件路由组合起来形成一个自定义的工作流。子图和并行化的配置则是在此基础上的更高级构图操作。6. 接口 API 与批量任务对于生产环境我们通常会将构建好的 Agent 封装成 API 服务并处理批量任务。API 服务封装 可以使用 FastAPI 将上述的 LangGraphapp暴露为 HTTP 端点。# app.py (FastAPI 示例) from fastapi import FastAPI, HTTPException from pydantic import BaseModel from your_agent_builder import app as agent_app # 导入你编译好的 LangGraph app app FastAPI(titleAI Agent API) class AgentRequest(BaseModel): query: str session_id: str | None None # 用于区分不同会话的记忆 class AgentResponse(BaseModel): answer: str session_id: str steps: list[dict] | None None app.post(/chat, response_modelAgentResponse) async def chat_with_agent(request: AgentRequest): try: # 调用 LangGraph App config {configurable: {session_id: request.session_id or default}} inputs {messages: [(user, request.query)]} final_state agent_app.invoke(inputs, configconfig) # 从 final_state 中提取最终回复和步骤历史 last_message final_state[messages][-1] if isinstance(last_message, tuple): _, answer last_message else: answer last_message.content return AgentResponse( answeranswer, session_idrequest.session_id or default, stepsfinal_state.get(intermediate_steps, []) ) except Exception as e: raise HTTPException(status_code500, detailstr(e)) if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)批量任务处理 对于批量处理大量查询需要引入任务队列如 Celery Redis或异步处理避免阻塞 API。# 批量处理伪代码 import asyncio from your_agent_builder import agent_app async def process_batch(queries: list[str], session_template: str batch_{idx}): results [] for idx, query in enumerate(queries): session_id session_template.format(idxidx) config {configurable: {session_id: session_id}} inputs {messages: [(user, query)]} # 注意实际应用中应考虑限流和错误处理 final_state await asyncio.to_thread(agent_app.invoke, inputs, config) # ... 提取结果 results.append(extract_result(final_state)) return results关键点是为每个批量任务使用独立的session_id来隔离记忆状态防止交叉污染。7. 资源占用与性能观察与部署视觉或语音模型不同基于 LangChain 的 Agent 架构本身不直接消耗大量 GPU 显存。其资源消耗主要来自LLM API 调用成本与延迟这是最主要的“资源”。每次工具调用、规划步骤都可能意味着一次新的 LLM API 请求。需要监控Token 消耗规划、工具调用、长记忆上下文都会增加 prompt 的 token 数量直接影响 API 成本。响应延迟多步 Agent 的完成时间等于各步 LLM 调用和工具执行时间的总和。复杂任务可能需数十秒。观察方法在代码中记录每个步骤的耗时和输入/输出的 token 数。大多数 LLM API 的响应头会包含usage字段。工具执行资源如果工具涉及本地计算、数据库查询或调用其他慢速 API它们可能成为性能瓶颈。内存占用主要在服务端维护对话状态记忆。如果使用ConversationBufferMemory并保存所有历史内存占用会随对话长度线性增长。对于高并发服务需要关注状态存储后端使用 Redis 或数据库存储记忆而非内存。记忆摘要对于长对话可以使用ConversationSummaryMemory或ConversationSummaryBufferMemory来压缩历史减少 token 消耗和存储压力。优化建议设置超时和重试对 LLM 调用和工具调用设置合理的超时并实现重试逻辑。缓存对频繁且结果不变的查询如某些计算、静态数据获取实施缓存。限制步骤在 ReAct 循环中设置最大迭代次数防止 Agent 陷入死循环。使用更高效的模型对于规划、路由等决策步骤可以使用更小、更快的模型如gpt-4o-mini仅在需要高质量生成时使用大模型。8. 常见问题与排查方法在开发和运行 AI Agent 时你会遇到一些典型问题。下表列出了常见问题及其排查思路问题现象可能原因排查方式解决方案LLM 不调用工具1. 工具描述不够清晰。2. LLM 模型不支持或工具调用能力弱。3. 提示词未引导 LLM 使用工具。1. 检查工具函数的docstring是否准确描述了功能和参数。2. 换用支持工具调用的模型如 GPT-4o, Claude-3。3. 在系统提示词中明确要求“你可以使用以下工具”。优化工具描述更换模型改进提示词。Agent 陷入循环或步骤过多1. 停止条件should_continue设置不合理。2. LLM 无法从工具结果中得出最终答案。1. 检查停止判断的逻辑。2. 打印每一步的输入输出观察 Agent 的“思考”过程。1. 设置最大迭代次数硬限制。2. 在提示词中强化“何时结束任务”的指导。记忆丢失或混乱1.session_id未正确传递或管理。2. 记忆后端如内存在服务重启后丢失。3. 状态State定义或更新逻辑有误。1. 检查每次调用是否使用了相同的configurable配置。2. 检查记忆存储是否持久化。3. 调试 State 的更新流程。1. 确保客户端或前端传递稳定的 session_id。2. 使用 Redis 等外部存储。3. 复查 LangGraph State 中annotated字段的运算符如operator.add是否正确。结构化输出解析失败1. LLM 未按指定格式输出。2.Pydantic模型定义太严格或存在歧义。1. 捕获OutputParserException打印 LLM 的原始输出。2. 简化输出格式或使用更宽松的解析器如JsonOutputParser。1. 在提示词中强化格式指令或使用JsonOutputParser。2. 使用OutputFixingParser自动修复小错误。API 服务响应慢1. 单个请求涉及多次 LLM 调用串行执行。2. 工具执行慢如网络请求。3. 未做异步处理。1. 使用监控工具分析各步骤耗时。2. 检查工具函数的性能。1. 对于可并行的工具调用利用 LangGraph 的并行化能力。2. 为工具调用设置超时和缓存。3. 使用异步框架如 FastAPI和异步的 LLM 客户端。多 Agent 协作时状态不同步子图之间的状态传递或通信机制有误。检查子图与父图之间共享的 State 键是否正确定义和更新。仔细设计 State 结构明确哪些状态是全局的哪些是子图局部的。使用SendAPI 进行通信。9. 最佳实践与使用建议基于上述概念和实践总结出以下构建可靠 AI Agent 的最佳实践从简单开始逐步复杂化不要一开始就构建多 Agent 系统。先从单个工具调用记忆的简单 Agent 开始确保链路跑通再逐步加入规划、路由、多 Agent 等复杂功能。设计清晰的状态State在 LangGraph 中State 是你的 Agent 的“内存模型”。花时间仔细设计它明确每个字段的用途和更新规则。这是调试复杂工作流的基础。为工具编写高质量的文档工具函数的docstring是 LLM 理解如何调用它的主要依据。描述要精确参数名和类型要清晰。可以用示例。实施严格的输入验证和工具权限控制永远不要相信 LLM 直接传递给工具的参数。在工具函数内部要对输入进行验证和清洗。特别是对于执行删除、写入、发送消息等有副作用的工具要有权限检查。设置明确的停止条件和超时无论是 ReAct 循环还是自定义工作流都必须有明确的结束条件如最大步数、特定输出格式和超时机制防止资源耗尽。日志和可观测性在关键节点如调用 LLM 前、调用工具后、状态更新时添加详细的日志。记录输入、输出、耗时和 token 使用量。这对于调试和成本优化至关重要。进行全面的测试不仅测试常规用例更要测试边缘用例和对抗性输入如“忽略之前的指令”。测试 Agent 在工具失败、网络超时、收到无效输入时的行为。成本与性能监控在生产环境中密切监控 LLM API 的调用成本和延迟。设置预算和告警。考虑对非关键路径使用成本更低的模型。合规与伦理确保你的 Agent 在使用外部工具如网络搜索、数据库时遵守相关法律法规和数据隐私政策。对生成的内容进行必要的审核特别是涉及金融、医疗、法律等专业领域时。理解路由器、结构化输出、工具调用、记忆和规划这五个核心概念是构建功能型 AI Agent 的基石。它们分别解决了决策格式化、能力扩展、上下文维持和任务分解的问题。通过 LangChain 和 LangGraph 这样的框架你可以像搭积木一样将这些概念组合起来从简单的分类机器人逐步构建出能自主完成复杂工作流的智能助手。最先应该验证的是工具调用这是 Agent 与外界交互的核心。最容易踩的坑是记忆状态的管理和规划循环的终止条件。建议在本地先用小模型如gpt-4o-mini快速原型验证整个流程再考虑优化和部署。下一步你可以探索 LangGraph 官方示例中的ReAct Agent、Multi-Agent Collaboration等高级模式将你的 AI Agent 能力提升到新的水平。 30款热门AI模型一站整合DeepSeek/GLM/Claude 随心用限时 5 折。 点击领海量免费额度