首页QQ牛牛机器人QQ牛牛机器人 Langchain简单快速上手教程(三)——聊天模型之工具

QQ牛牛机器人 Langchain简单快速上手教程(三)——聊天模型之工具

分类QQ牛牛机器人时间2026-09-09 10:30:12发布admin浏览64
摘要:本教程聚焦聊天模型与工具调用的核心落地方法,从基础概念到可运行代码,带你快速掌握LangChain中让大模型主动调用外部能力的完整流程。...

本教程聚焦聊天模型与工具调用的核心落地方法,从基础概念到可运行代码,带你快速掌握LangChain

中让大模型主动调用外部能力的完整流程。


🎯 核心概念:什么是聊天模型工具调用


工具调用(Tool Calling)是LangChain聊天模型的核心能力:大模型不再局限于自身知识库输出,而是可

以根据用户的问题,主动判断是否需要调用外部工具(计算器、数据库查询、API接口等),获取实时/外部

数据后再整理出最终回答。

该能力仅支持原生具备函数调用能力的大模型,比如OpenAI GPT系列、Anthropic Claude系列、Google

 Gemini系列等。


🔧 第一步:环境准备与基础依赖安装


先完成基础环境配置,确保后续代码可直接运行:


安装核心依赖包:

bash

pip install langchain langchain-openai langchain-anthropic python-dotenv


配置大模型API密钥,在项目根目录创建.env文件:

env

OPENAI_API_KEY=你的OpenAI密钥

# 若使用Claude模型则补充配置

ANTHROPIC_API_KEY=你的Anthropic密钥


🛠️ 第二步:自定义工具定义


LangChain提供@tool装饰器,无需复杂配置即可快速将普通Python函数转化为大模型可识别的工具:


python

from langchain_core.tools import tool


# 定义一个乘法计算工具

@tool

def multiply(first_int: int, second_int: int) -> str:

    """两个整数相乘,返回计算结果的字符串形式"""

    return str(first_int * second_int)


# 直接测试工具调用

print(multiply.invoke({"first_int": 4, "second_int": 5}))

# 输出结果:20


工具函数的参数类型必须明确标注,大模型会自动识别参数类型完成入参生成。

函数的文档字符串必须清晰描述工具的作用,大模型会基于这段描述判断是否要调用该工具。

🚀 第三步:聊天模型绑定工具


将自定义工具绑定到聊天模型,让大模型自动适配工具调用格式:


python

from langchain_openai import ChatOpenAI

from dotenv import load_dotenv

import os


load_dotenv()

# 初始化聊天模型

model = ChatOpenAI(model="gpt-3.5-turbo-1106", api_key=os.getenv("OPENAI_API_KEY"))


# 将工具绑定到模型

model_with_tools = model.bind_tools([multiply])



绑定完成后,大模型收到用户提问时,会自动判断是否需要调用工具:如果需要,会返回结构化的工具调用指

令,而非直接返回自然语言回答。


⚡ 第四步:构建工具调用执行链


基于LangChain的链式调用能力,实现“用户提问→模型生成工具调用指令→执行工具→返回结果给模型→生

成最终回答”的完整闭环:


python

from langchain_core.output_parsers import StrOutputParser

from langchain_core.prompts import ChatPromptTemplate

from langchain_core.runnables import RunnablePassthrough


# 构建基础提示词模板

prompt = ChatPromptTemplate.from_messages([

    ("system", "你是一个擅长使用工具的助手,遇到计算类问题优先调用提供的工具完成计算"),

    ("user", "{input}")

])


# 构建完整执行链

chain = RunnablePassthrough.assign(

    # 模型生成工具调用指令

    tool_calls = prompt | model_with_tools

).assign(

    # 执行所有生成的工具调用

    tool_results = lambda x: [tc.invoke(tc.args) for tc in x["tool_calls"].tool_calls]

) | StrOutputParser()


# 测试完整流程

result = chain.invoke({"input": "4乘以5等于多少?"})

print(result)


📌 进阶:基于LangGraph构建计算器Agent


对于需要多轮工具调用的复杂场景,可以用LangGraph构建更稳定的Agent,官方提供的标准实现如下:


python

from langgraph.graph import StateGraph, MessagesState

from langgraph.prebuilt import ToolNode


# 把工具放入工具执行节点

tools = [multiply]

tool_node = ToolNode(tools)


# 构建状态图

workflow = StateGraph(MessagesState)

# 添加节点

workflow.add_node("agent", model_with_tools)

workflow.add_node("tools", tool_node)

# 添加流转边

workflow.add_edge("agent", "tools")

workflow.add_edge("tools", "agent")

# 设置入口点

workflow.set_entry_point("agent")


# 编译运行Agent

app = workflow.compile()

final_result = app.invoke({"messages": [("user", "4乘以5等于多少?")]})



该实现会自动处理多轮工具调用,直到大模型拿到足够的信息生成最终回答,无需手动编写循环逻辑。


⚠️ 常见避坑要点

不要给不支持原生函数调用的大模型绑定工具,会出现大量幻觉生成无效的工具调用指令。

工具的参数描述和函数文档字符串必须尽可能清晰,否则大模型很容易生成错误的入参。

生产环境中必须给工具执行增加权限校验,避免大模型被Prompt注入诱导执行高危操作。


需要我为你补充这篇教程对应的‌可直接运行的完整项目代码包‌吗?你复制到本地配置好API密钥就能直接跑通全流程。


牛牛机器人 / 牛牛算账机器人版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

牛牛算账机器人 DolphinDB推出的动态脚本优化机制 微信牛牛机器人 每天白嫖 WorkBuddy 100 积分,我让 WorkBuddy 自己领
↑