LangChain Tool + Agent 最小可运行示例解析

AI Agent开发实战:从Tool到Workflow的完整构建指南 在人工智能应用开发领域,Agent架构正成为连接大语言模型与实际业务需求的关键技术范式。其核心原理在于通过模块化设计,将复杂任务分解为可执行的原子操作单元,从而实现自动化决策与执行。从技术价值角度看,这种架构显著提升了AI系统的可扩展性、可维护性和任务完成能力,使得单一模型能够处理多步骤、多工具的复杂场景。在实际工程实践中,开发者需要掌握从基础工具封装、技能组合到工作流编排的完整链路。本文聚焦于LangChain与LangGraph等主流框架,通过构建天气查询、旅行规划等具体案例,详细演示了如何实现Tool 阅读详情

下面给出一个代码示例: 展示如何使用 LangChain + 通义千问(Qwen),通过 ReAct Agent 安全地调用自定义工具完成数学计算任务。

示例代码取自《AI Agent智能体开发实践》第8章。

# -*- coding: utf-8 -*-
"""
Created on Fri Jul 25 09:55:25 2025

@author: liguo
"""
from langchain.tools import tool
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
from langchain_community.chat_models import ChatTongyi
import os
# 👇 核心计算函数,不被 @tool 装饰,避免递归调用工具对象
def _factorial(n: int) -> int:
    """内部阶乘计算函数,使用循环避免递归栈和工具调用问题"""
    if n < 0:
        raise ValueError("阶乘不支持负数")
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

# 👇 工具层函数,负责接收输入、类型转换、调用核心函数
@tool
def calculate_factorial(n: int) -> int:
    """计算给定数字的阶乘"""
    # 确保输入是整数(兼容字符串输入)
    if isinstance(n, str):
        n = int(n.strip())
    return _factorial(n)

# 工具列表
tools = [calculate_factorial]

# 初始化 Qwen 模型(请替换为你自己的 DashScope API Key)
llm = ChatTongyi(
    model="qwen-max",        # 也可用 qwen-turbo, qwen-plus
    temperature=0,
    #dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    # 推荐:在终端或系统环境变量中设置 DASHSCOPE_API_KEY
)

# 拉取 ReAct 提示词模板
prompt = hub.pull("hwchase17/react")

# 创建 Agent
agent = create_react_agent(llm, tools, prompt)

# 创建执行器
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 执行任务
if __name__ == "__main__":
    response = executor.invoke({"input": "计算5的阶乘"})
    print("\n" + "="*50)
    print("最终结果:", response["output"])

下面我按模块 + 执行流程,对你给出的代码做一次逐行、偏实战向的解析,帮助你真正理解每一步在干什么、为什么要这样写。


一、整体结构概览

你的代码可以分为 6 个层次:

  1. 导入依赖

  2. 核心计算函数(不暴露给 Agent)

  3. LangChain Tool 包装函数

  4. 工具注册 & LLM 初始化

  5. ReAct Agent 构建

  6. 执行与结果输出


二、逐段解析


1️⃣ 头部 & 编码声明

# -*- coding: utf-8 -*-

✅ 确保 Python 能正确处理中文注释

✅ 在 Python 3 中不是必须,但写工具/脚本时仍是好习惯


2️⃣ 导入模块

from langchain.tools import tool
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
from langchain_community.chat_models import ChatTongyi
import os

各模块作用

模块

作用

@tool

把普通函数注册为 Agent 可调用的工具

AgentExecutor

实际运行 Agent 的引擎

create_react_agent

创建 ReAct 模式 Agent

hub

从 LangChain Hub 拉取 Prompt

ChatTongyi

通义千问(Qwen)LLM

os

读取环境变量


3️⃣ 核心计算函数(⚠️ 关键点)

def _factorial(n: int) -> int:
    """内部阶乘计算函数,使用循环避免递归栈和工具调用问题"""
    if n < 0:
        raise ValueError("阶乘不支持负数")
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

✅ 为什么不用递归?

❌ 递归写法:

def factorial(n):
    return n * factorial(n-1)

问题:

  • Python 递归深度有限

  • LangChain Agent 容易误以为这是工具

  • 极易触发 无限递归调用工具

✅ 你用了 循环 + 私有函数:

  • _factorial:只做计算

  • 不会被 @tool装饰

  • Agent 永远看不到它

✅ 这是 LangChain 工具设计的最佳实践


4️⃣ Tool 层(Agent 可见的唯一入口)

@tool
def calculate_factorial(n: int) -> int:
    """计算给定数字的阶乘"""
    if isinstance(n, str):
        n = int(n.strip())
    return _factorial(n)

这一层做了 3 件事:

✅ 1. 注册为工具

@tool会把它变成:

Tool(
    name="calculate_factorial",
    func=calculate_factorial,
    description="计算给定数字的阶乘"
)

Agent 只能看到这个工具


✅ 2. 输入类型容错
if isinstance(n, str):
    n = int(n.strip())

原因:

  • LLM 经常返回 "5"而不是 5

  • JSON / Agent 解析不稳定

✅ 这一步非常关键,否则容易报错


✅ 3. 调用核心逻辑
return _factorial(n)

✅ 工具 ≠ 业务逻辑

✅ 解耦,方便测试、复用、维护


5️⃣ 工具注册

tools = [calculate_factorial]

✅ Agent 可用的工具列表

✅ 以后加工具只需:

tools = [calculate_factorial, add, multiply]

6️⃣ 初始化大模型(Qwen)

llm = ChatTongyi(
    model="qwen-max",
    temperature=0,
)

参数解释

参数

含义

model

通义千问模型

temperature=0

输出确定性强(数学问题必选)

✅ API Key 通过环境变量注入(安全)


7️⃣ 拉取 ReAct Prompt

prompt = hub.pull("hwchase17/react")

ReAct 是什么?

ReAct = Reasoning + Acting

Prompt 强制 LLM 按如下格式思考:

Thought: 我要算 5 的阶乘
Action: calculate_factorial
Action Input: 5
Observation: 120
Final Answer: 120

✅ 这是工具调用的标准范式

⚠️ 缺点:依赖 LangChain Hub(有时慢)


8️⃣ 创建 Agent

agent = create_react_agent(llm, tools, prompt)

等价于告诉 Agent:

你有一个大脑(LLM)

你有这些工具(tools)

你必须按这个 Prompt 的格式思考


9️⃣ 创建执行器(AgentExecutor)

executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True
)

AgentExecutor 的职责

功能

说明

解析 LLM 输出

Thought / Action

调用工具

calculate_factorial

把结果塞回 LLM

Observation

控制循环

防止死循环

✅ verbose=True:打印完整推理过程


🔟 执行任务

response = executor.invoke({"input": "计算5的阶乘"})

实际发生了什么?

  1. Agent 收到问题

  2. 决定使用 calculate_factorial

  3. 调用 calculate_factorial(5)

  4. 得到 120

  5. 生成最终自然语言回答


最终输出

print(response["output"])

示例:

5的阶乘是120。

三、整体执行流程图(文字版)

用户输入
   ↓
AgentExecutor
   ↓
ReAct Prompt + LLM
   ↓
Action: calculate_factorial
   ↓
Tool 调用
   ↓
_factorial()
   ↓
Observation
   ↓
Final Answer

四、一句话总结

✅ 这是一个 结构正确、工程化、可扩展的 LangChain Tool + ReAct Agent 示例​

✅ 你已经避开了 90% 新手会踩的坑(递归 / 工具循环 / 输入类型)

​

​

Grok Bot与Agent工作流:从概念到最小可运行示例 在大模型应用快速演进的今天,聊天机器人已不再是唯一形态。Agent作为一种能够自主规划、调用工具并执行任务的智能系统,正在重新定义开发者与AI的协作方式。Grok Bot背后所代表的Agent化模式,让开发者从重复的代码执行中解放出来,转而专注于目标定义与结果审核。理解模型、Bot与Agent三层概念的差异,掌握工具调用、任务循环和上下文记忆等核心机制,是落地Agent工程实践的关键。通过xAI API可以快速搭建一个最小可运行的Agent示例,覆盖文件读取、信息查询等典型场景。在实际接入生产环境前,还需关 阅读详情

相关推荐

LangChain+LangGraph开发实战:从0到1打造企业级Agent

大模型应用正从单次问答走向复杂任务自动化,智能体(Agent)编排成为关键能力。LangChain 组件化串联提示词、检索与工具,LangGraph 以状态化图实现分支、循环和人工审批,两者结合能构建可靠的企业级 AI 流程。聚焦 RAG、多 Agent 协作、API 暴露与批量任务等实践,从最小可运行示例到完整项目架构,系统梳理状态设计、节点划分、工具注册和异常排查方法,帮助开发者避开常见陷阱,掌握可落地的 Agent 开发路径。

weixin_33798152的博客 1194

LangChain ReAct Agent最小可运行示例详解

Agent是大模型与外部工具协同决策的核心范式,其本质是基于推理(Reasoning)与执行(Acting)的闭环交互协议。ReAct框架通过结构化提示模板强制规范Thought/Action/Observation流转逻辑,确保LLM输出可解析、可调度、可验证。Tool作为可注册的原子能力单元,需严格满足名称一致性、输入契约明确性与描述语义可检索性三大技术要求,否则将导致路由失败或解析崩溃。该模式广泛应用于智能客服、自动化运维、AI编程助手等需调用API或本地函数的工程场景。本文聚焦LangChain中c

weixin_33841503的博客 559

MCP + LangChain Agent 实战:从零构建大模型工具调用最小闭环

大语言模型本身不具备执行代码的能力,要让模型完成真实业务,需要借助工具调用机制来实现意图与外部系统的对接。从早期的 Function Calling 到如今逐渐流行的 MCP 协议,工具接入方式正从私有化定制走向标准化互操作。MCP 通过 Server、Client、Host 三个角色,将任意外部服务统一为可被模型调用的工具接口,而 LangChain Agent 则负责在动态循环中决策工具调用顺序。这种组合显著降低了 AI 应用开发的集成成本,适用于任务管理、RAG 检索、自动化流程等场景。本文以 Fas

weixin_34209851的博客 360

langchain 的 agent + tool 使用

langchain 中提供了内置工具的,但是基本不能用,除了一个计算器和一个执行 python 代码的,其他的都要 apiTool 模块相当于是使用外部工具,或者自定义工具。

木下瞳的博客 1万+

Tool和Agent

Tool和Agent AI应用开发 langchain自带的tool

SO_zxn的博客 1630

AI Agent开发核心概念解析:Agent、Tool、Skill与MCP协议详解

在人工智能和大型语言模型应用开发领域,理解核心架构组件是构建高效智能系统的关键。从基本原理来看,智能体通过感知、决策、执行的循环与环境交互,其能力扩展依赖于对外部工具的调用。这一技术架构的价值在于将大语言模型的通用推理能力与专用功能模块相结合,实现复杂任务的自动化处理。在实际应用场景中,开发者需要清晰区分不同组件的职责边界:Agent作为决策中枢负责任务规划,Tool提供原子化操作能力,Skill封装可复用的工作流,而MCP协议则实现了工具的标准化集成。本文聚焦于Agent、Skill和MCP协议这三个关键

weixin_34258838的博客 384

使用LangChain4J实现Agent与Tool调用

OpenAI引领风潮的大语言模型(以下称为LLM)出世,给行业带来无比震撼,公众号、朋友圈、新闻与短视频App里,无不充斥着哪一家AI公司又放出效能更强大的模型之类的信息,文字生成、图像生成、音频生成、视频生成等的效果有多么令人惊叹。但LLM的行业应用、业务场景、怎么落地、如何将LLM技术融入系统之中,却一直处在被高度讨论,但多数人又摸不着门道的尴尬情况。

m0_63171455的博客 3818

LangChain生产级AI员工:RAG+Agent+Tool Calling实战架构

LangChain作为面向复杂工作流的AI编排引擎,其核心价值在于将模糊的人类决策过程转化为可验证、可回溯、可插拔的工程化能力。RAG解决知识时效性与语义召回问题,Agent提供结构化推理协议(如ReAct),Tool Calling实现业务系统安全联动——三者协同构成AI员工的‘感知-决策-执行’闭环。技术选型需兼顾鲁棒性(如Chroma持久化+cosine距离)、可解释性(Thought链记录)与工程约束(Pydantic参数校验、HyDE查询重写)。典型应用场景包括跨系统工单查询、政策合规问答、多步骤

weixin_30443075的博客 440

【大模型LLM第五篇】langchain agent及用langchain框架写一个math agent

前言利用langchain快速实现一个使用tool的agentlangchain agent相关的文章以下都值得花时间看看提供的内置tools:https://python.langchain.com/v0.2/docs/integrations/tools/agent的类型:https://python.langchain.com/v0.1/docs/modules/agents/agent_t...

AI蜗牛车 1619

LangChain核心概念,Chain、Agent、Tool、Memory、Retriever一文搞懂

记忆篇结束,我们进入LangChain深度篇。前面三十多篇里,我们手写了记忆系统,手写了工具调用,手写了RAG流程。代码能跑,功能也有,但每写一个新功能都要从零搭一遍。提示词拼来拼去,消息列表手动维护,工具分发自己写if-else。功能越加越多,代码就越乱。这种时候你会想,有没有人把这些常见套路封装好。LangChain就是干这个的。它把AI应用里反复出现的模式抽象成几个核心概念,Chain、Agent、Tool、Memory、Retriever。理解了这五个,LangChain的大部分代码你都能看懂。

白话机器学习 233

【纯血鸿蒙】安装hdc工具

参考资料:

oh.K 5544

603-LangChain框架Agent教程 - Tool Calling Agent案例分析

本案例旨在介绍LangChain中的Tool Calling Agent,展示如何创建一个能够调用外部工具的智能代理。包括:(1)如何创建和使用LangChain工具;(2)如何将工具与LLM模型绑定;(3)如何创建Tool Calling Agent;(4)如何使用AgentExecutor执行Agent任务;(5)如何实现流式输出和自定义解析器。

rengang66的博客 1064

Silvaco Atlas新手入门:从安装到第一个半导体器件仿真(附DeckBuild配置)

本文为Silvaco Atlas新手提供了一份从软件安装、DeckBuild环境配置到完成第一个半导体器件仿真的实战指南。通过构建一个经典的PN结二极管案例,详细讲解了Atlas仿真语句的语法、核心命令顺序以及结果调试与可视化方法,帮助初学者快速上手并理解TCAD仿真流程。

sql99的博客 332

LangChain Agent中Tool的实战解析

LangChain 当前最直接的 Tool 定义方式,是使用@tool装饰器。@tool"""查询指定城市当前的天气。"""return f"{city}今天晴,25℃"此时,普通 Python 函数被转换成了一个 LangChain Tool。Tool 是 Agent 从“生成文本”走向“执行任务”的重要接口。模型并不会真正执行 Python 函数。它看到的是 Tool 的名称、描述和参数 Schema,根据当前上下文生成 Tool Call;

suaizai_的博客 196

python实现边缘检测Canny算子 (附完整源码)

python实现边缘检测Canny算子 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 456

2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真

1.题目 给定两个单电源的双运放芯片READ2302G芯片(当时记得增益带宽积好像是6M),一片HD74LS74数字芯片双D触发器,需要详细电路图、手写报告,5个波形输出,测频,测幅,8:00公布题目,15:00停止答题,中间可以吃饭(也可以不吃继续做),15:00清场,休息一段时间后开始进场测试,打分。 2.要求 (1)一片运放搭建方波振荡电路,频率 20 KHz,误差 0.1 KHz,幅度 3...

DengFengLai123的博客 2万+

用langchain构建传统agent

各位可以选择去看里面的源码,但是我个人觉得作用不大,因为一环套一环,短时间内不太容易看懂(当然看懂以后收获还是很大的),我这里说一下AgentExcutor的缺点,第一个是它一次只能调用一个tool,第二个就是程序执行以后无法人为控制(因为缺少可能和人的交互,所以会大大限制agent的作用)而langgraph是用来构建比较重的单agent或者多agent的构建。create_tool_calling_agent是用来创建agent的,AgentExecutor是用来管理agent的。

weixin_44586881的博客 1465

054_小驰私房菜_Camx i2c读写相关备忘

Camera 对Ae、Af这些控制,实际都是,最终实际都是落实到hal下发相关的指令给驱动,那hal这边是怎么给驱动下发相关命令的呢?#小驰私房菜054# #Qcom Camx#可以参考看下下面相关代码内容。

148

LangChain.js:Tool、Memory 与 Agent 的深度解析与实战

文章摘要: 本文基于LangChain.js v1.0+框架,系统介绍了构建LLM应用的四个关键阶段:从基础文本生成到智能体(Agent)开发。首先展示了基础模型调用的局限性,随后深入解析Function Call机制,通过天气查询示例演示了原生工具调用的完整流程。接着介绍了LangChain.js的Tool封装方案,利用Zod模式简化工具开发。最后探讨了Memory管理,展示如何通过MemorySaver实现对话上下文持久化。全文通过TypeScript代码示例,为开发者提供了从基础到进阶的LLM应用开发

Web分享 1140

KMD 核心功能模块——命令提交与调度:Ring Buffer 与硬件引擎交互

《KMD 中的中断与同步机制——从 Fence 到 Timeline Semaphore 的深度解析》GPU 需要持续接收命令,但硬件执行是流式处理。Ring Buffer 作为。导致 CVE-2022-1234(GPU 挂起),修复后强制检查。:命令提交延迟从 50μs 降至 5μs(20 倍提升)。,CPU 通过写入该地址更新指针(避免直接操作寄存器)。,实现 CPU 与 GPU 的高效协同。),GPU 读指针更新是硬件自动完成的。(通过硬件状态机),实现真正的零等待。AMDGPU 驱动曾因。

amy_mhd的博客 82

【Python爬虫(1)】专栏开篇:夯实Python基础

要想熟练掌握 Python 爬虫技术,扎实的 Python 基础是必不可少的。这就好比建造高楼大厦,Python 基础就是那稳固的基石。只有打好了这个基础,我们才能在爬虫的学习道路上稳步前行,理解并运用各种爬虫技术和框架。

邓邓子的博客 2025

第十章 LangChain Agent开发实战

在上一篇 LangChain 快速入门中,我们学习了 Chain——它将 LLM 的调用流程固定下来: 这种方式适用于流程确定的场景。但现实中,很多问题是开放式的:这些场景的共同特点是:你不知道 LLM 需要做什么、做几次、以什么顺序做——这就是 Agent 的用武之地。Agent 运行的核心是一个**"思考-行动-观察"循环**(Thought-Action-Observation Loop): 这个循环会持续进行,直到 LLM 认为已经拿到了足够的信息来回答用户的问题。在深入代码之前,先理解 LangC

qq_53460854的博客 1809

【CASS精品教程】013:CASS9.1生成标准图幅案例教程

在CASS中,可以很方便的生成标准图幅,如50*50。本文演示cass中,根据测区范围标准图幅生成过程。

智慧空间实验室 1万+

[LangChain智能体本质论-08]中间件是如何参与Agent、Model和Tool三者交互的?

LangChain的中间件(Middleware)是围绕Agent执行流程构建的“可插拔钩子系统”。它允许开发者在不修改核心逻辑的情况下,在执行的关键节点(如输入处理、模型调用前后、输出解析等)对数据流进行拦截、修改或验证。中间件类型以`AgentMiddleware`为基类。

JaydenAI的博客 1323

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LangChain Agent终极对决:ReAct vs Tool Calling,谁才是真正的“智能之王”?

当我们使用 **LangChain** 构建 AI 智能体时,首先要做的是选择正确的智能体架构。 目前常用的2种架构是`create_react_agent`和`create_tool_calling_agent`。两者都可以让AI使用外部工具,但由于它们的运作方式不同,因此适合的场景也有区别。

老皮的博客 1092

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 会议实时记录(使用千问)
下一篇: 会议纪要/总结撰写(使用千问)
夏天又到了
博客等级 码龄19年 6582粉丝 1589原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值