news 2026/4/28 8:46:28

LangChain 工具调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain 工具调用

一、LangChain 1.0+ 工具调用核心概念

LangChain 1.0+ 对工具调用进行了全面重构,现在的 API 更简洁、更灵活、更符合现代 Python 风格。核心分为两个概念:Tool(单个工具)Toolkit(工具集合)

1. Tool(单个工具)

核心定义

Tool 是 LangChain 中工具的最小单位,它封装了一个具体的功能(比如搜索、计算、代码执行、文件读写),LLM 可以根据用户的需求,自主选择调用哪个工具、传入什么参数。

LangChain 1.0+ 工具的三种来源

表格

来源说明示例
预定义工具LangChain 官方内置了 100+ 预定义工具,直接导入即可使用Serper 搜索、DuckDuckGo 搜索、PythonREPL 代码执行器、计算器
自定义工具@tool装饰器,把任意 Python 函数包装成 LangChain 工具你自己写的天气查询函数、数据库查询函数
OpenAI 兼容工具直接使用 OpenAI Functions 格式的工具定义兼容所有 OpenAI 兼容模型(豆包、通义千问)

最简单的自定义工具示例

from langchain_core.tools import tool @tool def multiply(a: int, b: int) -> int: """ 乘法计算器,计算两个整数的乘积 :param a: 第一个整数 :param b: 第二个整数 :return: 乘积 """ return a * b # 查看工具信息 print(multiply.name) print(multiply.description) print(multiply.args)

2. Toolkit(工具集合)

核心定义

Toolkit 是一组相关工具的集合,比如 GitHubToolkit 包含了「查询仓库、创建 Issue、提交代码」等多个 GitHub 相关工具,你可以一次性导入整个 Toolkit,不用逐个导入单个工具。

常用预定义 Toolkit

表格

Toolkit 名称说明
SerperToolkitSerper 搜索引擎工具集合
PythonToolkitPython 代码执行、文件读写工具集合
GitHubToolkitGitHub 操作工具集合
SQLDatabaseToolkitSQL 数据库查询工具集合

二、准备工作:获取 Serper API Key

我们用Serper 搜索引擎(免费、稳定、国内访问快)来实现能上网的聊天机器人,它是 LangChain 官方推荐的搜索引擎工具。

1. 获取 Serper API Key

  1. 访问 Serper 官网
  2. 用邮箱注册账号(免费版每天有 2500 次查询,足够学习使用)
  3. 登录后进入「Dashboard」,复制你的API Key

2. 配置.env文件

在项目根目录的.env文件中添加 Serper API Key:

# 豆包 API Key DOUBAO_API_KEY=你的豆包APIKey # Serper 搜索引擎 API Key SERPER_API_KEY=你的SerperAPIKey

三、完整代码:LangChain 1.0+ 集成 Serper 搜索的聊天机器人

这个代码完全兼容 LangChain 1.0+ 最新版本,使用LCEL 语法bind_tools绑定工具RunnableWithMessageHistory管理记忆,实现了一个能实时搜索、能记住上下文的智能聊天机器人。

import os from dotenv import load_dotenv # ====================== LangChain 1.0+ 新包导入 ====================== from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables.history import RunnableWithMessageHistory from langchain_core.chat_history import BaseChatMessageHistory, InMemoryChatMessageHistory from langchain_community.tools import SerperSearchRun from langchain_core.tools import tool # ====================== 1. 初始化配置 ====================== load_dotenv() # 初始化豆包 ChatModel(必须用支持工具调用的模型,推荐 doubao-pro-32k) llm = ChatOpenAI( api_key=os.getenv("DOUBAO_API_KEY"), base_url="https://ark.cn-beijing.volces.com/api/v3", model="doubao-pro-32k", # 必须用 pro 模型,支持工具调用 temperature=0.7 ) # ====================== 2. 初始化 Serper 搜索工具 ====================== @tool def serper_search(query: str) -> str: """ Serper 搜索引擎工具,用于查询实时信息、新闻、知识等 当用户的问题涉及实时信息、最新动态、或你不确定的知识时,使用这个工具 :param query: 搜索关键词,用中文或英文都可以 :return: 搜索结果摘要 """ search = SerperSearchRun(serper_api_key=os.getenv("SERPER_API_KEY")) return search.run(query) # 工具列表:把所有工具放在一个列表里 tools = [serper_search] # ====================== 3. 定义聊天提示词模板(必须包含工具调用的说明) ====================== prompt = ChatPromptTemplate.from_messages([ ("system", """你是一个友好、聪明的聊天助手,不仅能聊天,还能通过搜索引擎获取实时信息。 ## 核心规则 1. 如果用户的问题涉及实时信息(比如今天的天气、最新新闻、体育比赛结果)、或你不确定的知识,必须先调用 serper_search 工具搜索,再根据搜索结果回答 2. 必须记住用户之前提到的关键信息(姓名、喜好、需求),后续对话主动呼应 3. 语气亲切自然,不使用书面化套话、不生硬、不啰嗦 4. 纯文本回答,不使用特殊格式 """), MessagesPlaceholder(variable_name="history"), ("user", "{input}") ]) # ====================== 4. 记忆管理(和之前一样) ====================== store = {} def get_session_history(session_id: str) -> BaseChatMessageHistory: if session_id not in store: store[session_id] = InMemoryChatMessageHistory() return store[session_id] # ====================== 5. 构建带工具调用的 LCEL Chain(核心变化) ====================== # 第一步:把工具绑定到 LLM 上(LangChain 1.0+ 核心方法) llm_with_tools = llm.bind_tools(tools) # 第二步:构建基础链 base_chain = prompt | llm_with_tools | StrOutputParser() # 第三步:带记忆的链 chain_with_history = RunnableWithMessageHistory( base_chain, get_session_history, input_messages_key="input", history_messages_key="history" ) # ====================== 6. 聊天主循环 ====================== def main(): print("===== LangChain 1.0+ 能上网的聊天机器人(Serper 搜索) =====") print("输入 'q' 退出,输入 'clear' 清空上下文\n") session_id = "user_123" while True: user_input = input("你:").strip() if user_input.lower() == "q": print("🤖 再见!下次再聊~") break if user_input.lower() == "clear": if session_id in store: store[session_id].clear() print("🤖 上下文已清空啦~") continue if not user_input: continue # 调用带记忆的 Chain response = chain_with_history.invoke( {"input": user_input}, config={"configurable": {"session_id": session_id}} ) print(f"🤖:{response}\n") if __name__ == "__main__": main()

四、核心变化详解(LangChain 1.0+ 工具调用)

1. 工具绑定:llm.bind_tools(tools)

这是 LangChain 1.0+ 工具调用的核心方法,它把工具列表绑定到 LLM 上,让 LLM 知道自己有哪些工具可以调用、每个工具的功能是什么、入参出参是什么。

2. 提示词必须包含工具说明

在系统提示词里,必须明确告诉 LLM:

  • 什么时候需要调用工具
  • 调用哪个工具
  • 工具的作用是什么

这样 LLM 才能准确判断是否需要调用工具。

3. 必须用支持工具调用的模型

豆包的doubao-pro-32kdoubao-pro-128k支持工具调用,doubao-lite系列不支持,这点一定要注意。

五、运行效果演示

===== LangChain 1.0+ 能上网的聊天机器人(Serper 搜索) ===== 输入 'q' 退出,输入 'clear' 清空上下文 你:今天北京的天气怎么样? 🤖:我需要先搜索一下今天北京的天气情况。 (后台自动调用 serper_search 工具搜索) 🤖:根据最新搜索结果,今天北京的天气是晴,温度 18-28℃,东北风 3 级,空气质量优,非常适合出门哦~ 你:我叫小明,喜欢打篮球 🤖:你好小明!很高兴认识你,打篮球是一个很棒的爱好,既能锻炼身体又能放松心情~ 你:我喜欢什么? 🤖:你喜欢打篮球呀,小明~ 你:2026年世界杯在哪里举办? 🤖:我需要搜索一下2026年世界杯的举办地。 (后台自动调用 serper_search 工具搜索) 🤖:根据搜索结果,2026年世界杯将由美国、加拿大、墨西哥三国联合举办,这是世界杯历史上首次由三个国家联合举办。

六、总结

  1. LangChain 1.0+ 工具调用核心
    • @tool装饰器把 Python 函数包装成工具
    • llm.bind_tools(tools)把工具绑定到 LLM 上
    • 提示词里必须明确说明工具的使用规则
  2. Tool 和 Toolkit 的区别
    • Tool 是单个工具,比如 Serper 搜索
    • Toolkit 是一组相关工具的集合,比如 GitHubToolkit
  3. 扩展更多工具:你可以用@tool装饰器,把任意 Python 函数包装成工具,比如天气查询、数据库查询、文件读写等,然后添加到tools列表里,LLM 就能自主调用了。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 8:42:24

Cursor设备ID修改器:原理、实现与多场景应用指南

1. 项目概述:Cursor设备ID修改器的核心价值如果你是一名开发者,尤其是经常使用Cursor这类AI驱动的代码编辑器,那么你很可能遇到过这样的场景:在调试一个需要特定设备或用户标识的应用时,或者在多台机器上同步开发环境时…

作者头像 李华
网站建设 2026/4/28 8:39:39

如何快速创建虚拟显示器:ParsecVDisplay终极操作指南

如何快速创建虚拟显示器:ParsecVDisplay终极操作指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 你是否曾因显示器数量不足而影响工作效率?或者需要为…

作者头像 李华
网站建设 2026/4/28 8:39:38

3步实现微信聊天记录完整备份:WeChatExporter开源工具详解

3步实现微信聊天记录完整备份:WeChatExporter开源工具详解 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 微信作为国内最主流的社交应用,承载着大…

作者头像 李华
网站建设 2026/4/28 8:38:38

物料管理是什么?物料管理的具体工作有哪些?

对于任何一家实体企业而言,物料管理不仅仅是管好几个仓库那么简单,它是企业成本控制的生命线,也是生产交付的晴雨表。究竟物料管理是什么?简单来说,物料管理是对企业生产经营活动所需的各种物料,从需求预测…

作者头像 李华
网站建设 2026/4/28 8:35:24

BabelDOC:智能排版保留的专业PDF翻译工具终极指南

BabelDOC:智能排版保留的专业PDF翻译工具终极指南 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 你是一个文章写手,你负责为开源项目写专业易懂的文章。BabelDOC是一款…

作者头像 李华
网站建设 2026/4/28 8:34:22

ASM开源库实现函数耗时插桩

文章目录一、ASM简介1. 设计框架2. 设计模式:访问者模式和责任链模式3. visitor访问顺序二、ASM插桩常见用途1. 性能监控优化2. 自动化埋点与数据采集(无痕埋点)3. 热修复与功能动态化4. 隐私合规与安全改造三、ASM实现函数耗时统计1. AGP环境…

作者头像 李华