LangChain v0.3 Agent教程:工具定义、构建与执行全流程

基于LangChain v0.3从零构建AI Agent的完整教程
本文系统介绍了基于LangChain v0.3构建AI Agent的核心概念与实践方法。涵盖工具定义(@tool装饰器、JSON Schema生成)、Agent核心组件(LLM、Tools、Prompt、Memory)、ReAct推理框架、Agent与Agent Executor的职责区分,以及并行工具调用和LangSmith可观测性等高级特性,帮助开发者理解Agent从决策到执行的完整工作原理。
引言:为什么Agents是AI应用的核心
AI Agent(智能代理)是当前AI应用中最重要的组件之一,几乎所有智能AI应用的核心都是某种形式的Agent实现。本文基于LangChain v0.3,从零开始介绍如何构建一个功能完整的AI Agent,包括工具定义、Agent构建和执行器配置等核心概念。
Agent的本质是让LLM具备"行动能力"——它不再只是生成文本,而是能够调用外部工具、搜索网络、执行计算,并基于结果进行多步推理。
AI Agent的技术背景与发展脉络
AI Agent的概念源于1990年代的多智能体系统(Multi-Agent Systems)研究,但真正与大语言模型结合并走向实用是2022年之后的事。ReAct(Reasoning + Acting)论文(2022年)是现代LLM Agent的理论基础,它提出让LLM交替进行"推理"和"行动",形成思维链与工具调用的闭环。随后,AutoGPT、BabyAGI等项目的爆发式传播让Agent概念进入大众视野。LangChain正是在这一浪潮中崛起,将Agent的工程实现标准化,使开发者无需从零构建推理-行动循环,极大降低了构建生产级Agent应用的门槛。
LangChain工具(Tools):Agent的能力扩展
工具的本质与设计原则
工具是Agent能力的基础。简单来说,工具就是一个经过特殊格式化的Python函数,使LLM能够理解何时、为何以及如何使用它。
设计一个高质量工具需要遵循三个原则:
- 清晰的文档字符串(docstring):用自然语言解释工具的用途和使用场景
- 语义化的参数名:参数名应自解释,若不够直观则需在docstring中补充说明
- 完整的类型注解:为参数和返回值添加类型标注
使用@tool装饰器创建工具
通过LangChain的@tool装饰器,我们可以将普通函数转换为结构化工具对象(StructuredTool):
from langchain.core.tools import tool
@tool
def multiply(x: float, y: float) -> float:
"""Multiply two numbers together."""
return x * y
装饰器会自动提取函数名作为工具名称,docstring作为描述,并生成包含参数类型、是否必填等信息的JSON Schema。
JSON Schema与工具描述的技术原理
JSON Schema是一种用于描述JSON数据结构的规范,LangChain利用它向LLM传递工具的"使用说明书"。当@tool装饰器处理一个Python函数时,它会通过Python的inspect模块提取函数签名,结合Pydantic进行类型验证,最终生成符合OpenAI Function Calling规范的JSON Schema。这个Schema包含工具名称、描述、参数名、参数类型、是否必填等结构化信息,LLM在推理时会将这些Schema作为上下文,判断何时调用哪个工具以及如何构造参数。这也是为什么docstring和类型注解如此重要——它们直接影响LLM对工具的理解质量,一个模糊的描述可能导致LLM在不恰当的场景下调用工具,或传入错误格式的参数。

LLM工具调用机制详解
LLM本身并不直接执行工具。实际流程是:LLM生成一个JSON字符串,指定要调用的工具名和参数,然后由Agent执行逻辑解析这个JSON并实际调用对应函数:
import json
# LLM输出的字符串
llm_output = '{"x": 10.7, "y": 7.68}'
params = json.loads(llm_output)
# 实际执行工具
result = exponentiate.func(**params)
这个"LLM决策 → 执行逻辑调用"的模式是理解Agent工作原理的关键。
构建LangChain Agent:从Prompt到执行器
Agent的核心组件
一个完整的LangChain Agent需要四个核心组件:
- LLM:决策大脑
- Tools:可调用的工具集
- Prompt:包含系统消息、聊天历史和Agent Scratchpad
- Memory:对话记忆
其中,Agent Scratchpad是一个特殊的占位符,用于存储Agent在多步推理过程中的内部对话——包括它调用了哪些工具、获得了什么结果、以及下一步的决策。
ReAct框架:Agent推理的底层逻辑
LangChain Agent的执行流程本质上是ReAct(Reason + Act)框架的工程实现。ReAct框架定义了一个循环:Thought(思考当前状态)→ Action(决定调用哪个工具)→ Observation(获取工具返回结果)→ 再次Thought……直到LLM判断任务完成并输出Final Answer。Agent Scratchpad正是这个循环的记录载体,它将每一轮的Thought/Action/Observation序列化为文本,追加到Prompt中,让LLM在下一轮推理时能"看到"自己之前做了什么。这种设计使得LLM的无状态特性与多步任务执行之间的矛盾得以调和——每次LLM调用都是无状态的,但通过Scratchpad的上下文注入,Agent整体表现出有状态的连续推理能力。

Agent与Agent Executor的区别
这是一个容易混淆的概念。LangChain中的Agent和Agent Executor承担不同职责:
- Agent:负责决策——告诉我们应该使用哪个工具、传入什么参数
- Agent Executor:负责执行——实际调用工具、管理多步迭代、处理记忆

工具被传递两次的原因也在于此:传给Agent是为了让LLM了解工具的Schema(如何使用),传给Executor是为了获取工具的实际函数引用(执行调用)。
Agent实际执行流程
当我们问Agent "10.7乘以7.68等于多少"时,执行流程如下:
- LLM分析问题,决定使用multiply工具
- LLM输出工具调用参数:
{"x": 10.7, "y": 7.68} - Executor实际执行multiply函数,得到结果82.176
- 结果作为"观察"反馈给LLM
- LLM生成最终回答

高级特性:并行工具调用与外部API集成
并行工具调用
Agent支持在单次执行循环中并行调用多个工具。例如,当要求计算"(3+5) × 2的3次方 - 10"时,Agent会:
- 并行执行add(3,5)、multiply和exponentiate
- 等待结果后执行subtract
- 返回最终答案
通过LangSmith可以清晰地看到这种并行执行的调用链路,这对于复杂计算场景非常高效。
LangSmith可观测性平台
LangSmith是LangChain官方推出的LLM应用可观测性(Observability)平台,类似于传统软件开发中的APM(应用性能监控)工具。它能够追踪每一次LLM调用的完整链路:输入Prompt、输出内容、Token消耗、延迟时间、工具调用顺序等。对于Agent这类多步执行的复杂系统,LangSmith的调用链可视化尤为重要——开发者可以直观看到并行工具调用的时序关系、每个节点的耗时分布,以及中间推理步骤的完整内容。这对于调试Agent行为异常(如工具调用顺序错误、参数构造失败)、优化执行效率、以及在生产环境中持续评估模型表现都有不可替代的价值。
集成Google搜索与自定义工具
LangChain提供了预构建工具的加载机制:
from langchain.agents import load_tools
tools = load_tools(["serpapi\
相关推荐
教程攻略Cursor+Codex双IDE协同:开源项目二开实战方法论
基于实战经验总结的开源项目二次开发完整方法论,详解Cursor+Codex双IDE协同工作流,涵盖二开七环节、MVP验证、AI读源码技巧,帮助开发者三天跑通项目、两周完成业务集成。
教程攻略Cursor多Agent实战:50分钟搭建Next.js全栈博客
使用Cursor IDE多Agent协作模式,50分钟内从零搭建全栈博客。涵盖Next.js、Clerk认证、Supabase数据库集成,详解4个AI Agent分阶段开发流程与关键避坑经验。
教程攻略从零搭建AI软件工厂:Cursor工程师的多Agent协作实战经验
Cursor工程师Eric分享AI软件工厂构建实战:从自动化六层级、护栏设计、并行Agent管理到规模化扩展,详解如何用多Agent协作实现7×24小时高效软件开发。