LangChain Agent 实战接入:从原理到代码落地 1. 引言LangChain Agent 是 LangChain 框架中用于构建智能体应用的核心组件。它让大语言模型LLM不再局限于单次问答而是能够根据任务目标自主决定调用哪些工具、按什么顺序执行并在必要时进行多轮推理。本文将从 Agent 的核心原理出发通过完整的代码实战带你一步步接入 LangChain Agent并给出可运行的示例。2. Agent 核心概念在开始写代码之前先理解 Agent 的几个关键概念这有助于你后续调试和扩展。Agent负责决策的智能体它接收用户输入决定下一步动作调用工具、给出最终回答等。Tool工具Agent 可以调用的外部能力例如搜索、计算器、数据库查询、API 请求等。Toolkit工具包一组相关工具的集合方便一次性注册多个工具。AgentExecutor负责执行 Agent 决策的运行时它循环调用 Agent直到得到最终答案或达到最大迭代次数。Memory记忆让 Agent 在多轮对话中记住历史信息实现有状态的交互。3. 环境准备首先安装 LangChain 及相关依赖。建议使用 Python 3.9 及以上版本。pip install langchain langchain-openai langchain-community如果你需要使用搜索等社区工具可能还需要安装额外依赖pip install duckduckgo-search然后设置你的 OpenAI API Key 环境变量export OPENAI_API_KEYsk-你的密钥4. 第一个 Agent简单工具调用下面我们从一个最简单的例子开始让 Agent 调用一个自定义的加法工具。这个例子帮助你理解 Agent 的基本工作流程。from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain.tools import tool from langchain_core.prompts import ChatPromptTemplate 1. 定义工具 tool def add_numbers(a: int, b: int) - int: 计算两个整数的和。 return a b 2. 初始化大模型 llm ChatOpenAI(modelgpt-4o, temperature0) 3. 创建提示词模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一个乐于助人的助手可以调用工具来回答问题。), (human, {input}), (placeholder, {agent_scratchpad}), ]) 4. 创建 Agent agent create_tool_calling_agent(llm, [add_numbers], prompt) 5. 创建执行器 agent_executor AgentExecutor(agentagent, tools[add_numbers], verboseTrue) 6. 运行 result agent_executor.invoke({input: 请计算 123 和 456 的和是多少}) print(result[output])运行这段代码你会看到 Agent 先调用add_numbers工具再基于工具返回结果给出最终答案。这就是 Agent 最基本的「推理 行动」循环。5. 接入多个工具搜索与计算组合实际业务中Agent 往往需要组合多个工具。下面示例同时接入网络搜索和数学计算工具让 Agent 根据问题自主选择工具。from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain.tools import tool from langchain_community.tools import DuckDuckGoSearchRun from langchain_core.prompts import ChatPromptTemplate 1. 定义数学工具 tool def multiply_numbers(a: int, b: int) - int: 计算两个整数的乘积。 return a * b 2. 定义搜索工具 search DuckDuckGoSearchRun() 3. 组装工具列表 tools [multiply_numbers, search] 4. 初始化模型和提示词 llm ChatOpenAI(modelgpt-4o, temperature0) prompt ChatPromptTemplate.from_messages([ (system, 你是一个智能助手请根据问题选择合适的工具。), (human, {input}), (placeholder, {agent_scratchpad}), ]) 5. 创建 Agent 和执行器 agent create_tool_calling_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue, max_iterations5) 6. 测试数学计算 result1 agent_executor.invoke({input: 计算 25 乘以 4 的结果}) print(计算结果, result1[output]) 7. 测试网络搜索 result2 agent_executor.invoke({input: 搜索一下 LangChain 最新版本是什么}) print(搜索结果, result2[output])在这个例子中Agent 会根据问题内容自动判断调用乘法工具还是搜索工具体现了 Agent 的自主决策能力。6. 带记忆的 Agent多轮对话默认情况下Agent 是无状态的每次调用都是独立会话。为了让 Agent 记住上下文我们需要接入 Memory。from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain.tools import tool from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.memory import ConversationBufferMemory 1. 定义工具 tool def get_current_time() - str: 返回当前时间模拟。 return 2026-08-05 14:00:00 2. 初始化模型 llm ChatOpenAI(modelgpt-4o, temperature0) 3. 创建带记忆占位符的提示词 prompt ChatPromptTemplate.from_messages([ (system, 你是一个有帮助的助手。), MessagesPlaceholder(variable_namechat_history), (human, {input}), (placeholder, {agent_scratchpad}), ]) 4. 创建记忆对象 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) 5. 创建 Agent 和执行器 agent create_tool_calling_agent(llm, [get_current_time], prompt) agent_executor AgentExecutor( agentagent, tools[get_current_time], memorymemory, verboseTrue, ) 6. 第一轮对话 result1 agent_executor.invoke({input: 你好我叫小明}) print(第一轮, result1[output]) 7. 第二轮对话Agent 记得用户名字 result2 agent_executor.invoke({input: 我叫什么名字}) print(第二轮, result2[output])通过ConversationBufferMemoryAgent 在第二轮对话中能够回忆起用户的名字实现了有状态的交互。7. 实战构建一个数据分析 Agent下面我们综合前面所学构建一个更贴近真实业务的数据分析 Agent。它能够查询数据库、计算统计指标并给出分析结论。import sqlite3 import pandas as pd from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain.tools import tool from langchain_core.prompts import ChatPromptTemplate 1. 准备示例数据库 conn sqlite3.connect(:memory:) conn.execute(CREATE TABLE sales (id INTEGER, product TEXT, amount REAL)) conn.executemany( INSERT INTO sales (id, product, amount) VALUES (?, ?, ?), [(1, 手机, 5000), (2, 电脑, 8000), (3, 手机, 6000), (4, 平板, 3000)], ) conn.commit() 2. 定义数据库查询工具 tool def query_sales(sql: str) - str: 执行 SQL 查询并返回结果用于分析销售数据。 df pd.read_sql_query(sql, conn) return df.to_string() 3. 定义统计工具 tool def compute_stats(column: str) - str: 计算指定列的平均值、最大值和最小值。 df pd.read_sql_query(SELECT * FROM sales, conn) series df[column] return f平均值: {series.mean():.2f}, 最大值: {series.max():.2f}, 最小值: {series.min():.2f} 4. 初始化模型和提示词 llm ChatOpenAI(modelgpt-4o, temperature0) prompt ChatPromptTemplate.from_messages([ (system, 你是一名数据分析师请使用工具分析销售数据并给出结论。), (human, {input}), (placeholder, {agent_scratchpad}), ]) 5. 创建 Agent 和执行器 tools [query_sales, compute_stats] agent create_tool_calling_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue, max_iterations10) 6. 提问 result agent_executor.invoke({ input: 请分析销售数据每种产品的总销售额是多少哪个产品销售额最高 }) print(result[output])这个 Agent 会先调用query_sales查询分组汇总数据再结合结果给出分析结论展示了 Agent 在真实业务场景中的落地方式。8. 常见问题与调试技巧在实际接入过程中你可能会遇到以下问题这里给出对应的排查思路。问题现象可能原因解决方案Agent 反复调用同一工具工具返回结果不明确模型无法判断下一步优化工具描述让返回结果更结构化达到 max_iterations 仍无结果任务过于复杂或工具链设计不合理增加迭代次数或拆分任务为多个子 Agent工具参数解析错误工具函数签名不清晰缺少类型注解为工具参数添加类型注解和详细 docstringAPI 调用超时网络问题或模型响应过慢设置合理的超时时间使用重试机制调试时建议开启verboseTrue它会打印 Agent 的每一步思考过程和工具调用记录帮助你快速定位问题。9. 总结本文从 LangChain Agent 的核心概念出发通过四个由浅入深的实战示例带你完成了 Agent 的完整接入流程从最简单的单工具调用到多工具组合、带记忆的多轮对话再到贴近真实业务的数据分析 Agent。掌握这些基础后你可以进一步探索 ReAct 模式、自定义工具链、多 Agent 协作等高级主题将 Agent 能力应用到更复杂的业务场景中。