当前位置: 首页 > news >正文

【由浅入深探究langchain】第九集-简单的Agent工具调用

前言

在上一篇博客中,我们初步认识了 LangChain Agent 的基本构造。但 Agent 真正强大的地方在于它能够调用外部工具。

今天,我们要更进一步:不再局限于内置工具,而是通过自定义函数,让 Agent 能够执行我们特定的业务逻辑——比如查询某个商品的实时价格。

核心概念:什么是 Tools?

如果说大语言模型(LLM)是 Agent 的“大脑”,那么 Tools(工具) 就是它的“手脚”。比如代码中我问的问题”What's the price of gold now?“,LLM 本身并不知道实时金价,但它可以决定去调用一个名为get_price的函数,获取结果后再反馈给用户。

编码

沿用上集中使用的代码,加入tools的自定义方法:

def get_price(goods:str)->str:
"""Get price of given goods"""
return f"{goods}'s price is $2000"

这段代码的意思就是输入一个货物的名称,返回价格,在生产中,这里可能根据这个货物名去调用api接口等查询价格,我们这里直接先写死返回。

关键点:LLM 是通过函数的文档字符串Type Hint(类型提示)(就是三个引号定义的位置)来理解这个工具是做什么用的。所以,注释一定要写清楚!

然后再创建agent时将工具注入 Agent,增加一个工具tools的参数

tools=[get_price]

完整代码如下:

from langchain.agents import create_agent from langchain_openai import ChatOpenAI kimi_model = ChatOpenAI( model="kimi-k2.5", api_key="sk-uQpVxxxxxBa",#换成你的apikey base_url="https://api.moonshot.cn/v1", # 重点:这里严格对应 Kimi 的 API 结构 extra_body={ "thinking": {"type": "disabled"} } ) def get_price(goods:str)->str: """Get price of given goods""" return f"{goods}'s price is $2000" agent = create_agent( model=kimi_model, tools=[get_price] ) results = agent.invoke({"messages":[{"role":"user","content":"What's the price of gold now?"}]}) messages = results["messages"] print(f"历史消息:{len(messages)}条") for message in messages: message.pretty_print()

注意:
extra_body={
"thinking": {"type": "disabled"}
}

kimi-k2.5是一个支持“深度思考”(Reasoning)的模型,在 Kimi 的 API 规范中,如果模型决定调用工具(Tool Call),它通常会先输出一段“思考过程”。当你把这些消息传回给模型或者在链式调用中处理时,Kimi 要求 Assistant 消息必须包含reasoning_content字段(如果开启了思考功能)。

这里只是为了演示工具调用,不需要模型展示思考过程,为了方便测试先关闭kimi-k2.5的思考模式。

结果分析

当我们问 Agent:“What's the price of gold now?” 时,幕后发生了非常精彩的“四部曲”:

1. 意图识别 (Ai Message)

Agent 接收到问题,意识到自己无法直接回答,于是决定调用工具。

输出: "I'll check the current price of gold for you."

2. 发起工具调用 (Tool Calls)

Agent 生成了一个指令,指定调用get_price,并自动提取了参数goods: "gold"

3. 执行工具逻辑 (Tool Message)

系统执行了我们写的 Python 函数,并将结果返回给 Agent。

4. 最终汇总 (Final Ai Message)

Agent 结合工具返回的信息,组织成人类听得懂的语言回复用户。

总结

通过自定义工具,我们打破了 LLM 的知识边界。可以想象许多场景:

接入库存系统:check_inventory(item_id)

接入天气接口:get_weather(city)

接入内部数据库:query_user_order(order_id)

只需要你能写出 Python 函数,Agent 就能拥有无限的可能。

http://www.jsqmd.com/news/532902/

相关文章:

  • 搭建ai大模型集群
  • 使用IDEA插件提升效率:在开发环境中直接调用MiniCPM-o-4.5
  • 如何构建Headplane现代化Web管理界面:容器化部署终极指南
  • Granite TimeSeries FlowState R1开发环境配置全攻略:从零开始搭建AI预测项目
  • 头皮精华成分分析:哪种成分最适合你的头皮问题? - 博客万
  • 三. Java特性、版本、JDK/JRE/JVM
  • OpenClaw技能开发套件:为Qwen3.5-4B-Claude定制专属工具
  • 2026年3月,探寻市面上好的喷雾干燥机厂家,流化床干燥机/单锥干燥机/耙式干燥机/闪蒸干燥机,喷雾干燥机批发厂家分析 - 品牌推荐师
  • 毕业设计:基于springAi+vue的非遗数字文化馆(源码)
  • 众智商学院:助力外审员备考与能力进阶 - 众智商学院官方
  • 重构前端路由开发范式:vite-plugin-pages 从原理到实践
  • Avalonia+VSCode实时预览开发指南:用ReactiveUI快速构建响应式桌面应用(含项目结构解析)
  • FLUX.1-dev像素工坊应用场景:像素化无障碍界面设计——高对比度UI生成
  • 起猛了,发现我的工位上坐着一只“硅基吸血鬼”!
  • 10分钟快速掌握QQ空间历史说说备份神器
  • 分析金丝绒瓷砖生产商,莱曼缔克在泉州、佛山、肇庆的口碑如何? - 工业设备
  • 防脱精华品牌对比:日系、欧美、国货三足鼎立大PK - 博客万
  • TranslucentTB:为Windows任务栏注入透明美学的轻量级神器
  • ssm+java2026年毕设数据学院工作量管理系统【源码+论文】
  • 2026年杭州吸塑板材口碑榜,瑞新吸塑板材专业度咋样 - 工业品网
  • Anything V5效果展示:一键生成高质量二次元角色肖像图
  • C#读写各类配置文件
  • Leather Dress Collection 惊艳效果展示:多风格时尚文案与设计描述生成
  • Elden Ring帧率解锁终极指南:突破60帧限制的完整教程
  • CRM系统评测:如何避开功能缺陷,选择全球化支撑能力强的AI平台? - 纷享销客智能型CRM
  • 书匠策AI:问卷设计的“古法匠心”与“智法革新”大碰撞
  • hadoop+spark+hive链家租房租房推荐系统 租房可视化 K-means聚类算法 线性回归预测算法 机器学习
  • 深度剖析5大智能内容解锁策略:Chrome付费墙突破技术全解
  • 【数据结构与算法】第3篇:C语言核心机制回顾(二):动态内存管理与typedef
  • Ubuntu系统上通义千问1.5-1.8B-Chat-GPTQ-Int4的部署教程