[LangChain] 学习笔记(08):工具调用底层闭环与第三方搜索(Tavily)实战

📌 核心结论(TL;DR)

  1. 底层闭环 :大模型不直接执行代码。工具调用的本质是模型返回包含参数的 tool_calls(JSON),开发者本地执行后,将结果包装为 ToolMessage 再次发给模型。

  2. 第三方生态 :无需手搓所有工具,LangChain 生态提供了如 TavilySearch 等现成的联网搜索工具,直接 bind_tools 即可突破大模型的知识时间限制。

  3. 状态追加 :在二次调用模型生成最终答案前,必须 将模型发出的 ai_msg 和工具返回的 tool_msg 追加到 messages 历史中,否则模型会陷入死循环。

🔍 一、 原理图解与核心概念

1. 工具调用的协作流

  • Human:用户提问

  • AI :返回 tool_calls(发起请求)

  • Tool :开发者本地执行函数,生成 ToolMessage(返回结果)

  • AI:收到结果,生成最终自然语言答复。

2. 实时数据的破局之道

大模型有训练截止日期,无法获取最新资讯。引入 TavilySearch 工具后,大模型会判断是否需要联网,并自动生成搜索关键词。

💻 二、 精选核心代码片段

1. 工具调用的底层闭环(手动执行)

python 复制代码
# 基于 test_18_tool_binding.py 的核心逻辑
messages = [HumanMessage("2乘3等于多少?")]
ai_msg = model_with_tools.invoke(messages)
messages.append(ai_msg)

# 手动执行工具
tools_map = {"multiply": multiply, "add": add}
for tool_call in ai_msg.tool_calls:
    selected_tool = tools_map[tool_call["name"]]
    tool_msg = selected_tool.invoke(tool_call)
    messages.append(tool_msg)

final_result = model_with_tools.invoke(messages)

2. 第三方联网搜索工具(Tavily)

python 复制代码
from langchain_tavily import TavilySearch

tool = TavilySearch(max_results=4) 
model_with_tools = model.bind_tools([tool])

messages = [HumanMessage("最近人工智能有什么最新新闻?")]

# 1. 模型决策
ai_msg = model_with_tools.invoke(messages)
messages.append(ai_msg)

# 2. 执行搜索
for tool_call in ai_msg.tool_calls:
    tool_message = tool.invoke(tool_call)
    messages.append(tool_message)

# 3. 模型总结
print(model_with_tools.invoke(messages).content)

(完整的 test_18 闭环代码与 test_20 搜索实战代码已上传至 Gitee 仓库)

⚠️ 三、 踩坑排查排雷

  1. 报错 Invalid tool_call_id :二次请求时,忘记将 ai_msg 和 tool_msg 放入 messages 历史中。大模型看不到结果,会反复要求调用。

  2. Tavily 网络超时 :Tavily 服务器在海外。排查:请检查网络代理配置,或在代码中设置环境变量。

  3. 模型不调用搜索工具:如果提问的问题过于简单(如"1+1"),模型会自己回答,不调用搜索。这是正常的模型自主决策。

相关推荐
DQQzero21 分钟前
0.16 元/秒的短剧流水线:即梦短剧工作室把 AI 视频生产改成了什么样
人工智能·ai·aigc·视频生成
@追求卓越28 分钟前
深度学习记录
人工智能·深度学习
Century_Dragon1 小时前
让新能源故障诊断实训“触手可及“——仿真教学软件(VR)介绍
学习
武子康1 小时前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
江屿风1 小时前
【Git-组件】【Git入门:从文档灾难到版本掌控】流食般投喂
运维·笔记·git·组件·版本控制
GISer_Jing1 小时前
AI Agent秋招面试万字通关指南|架构、ReAct、上下文工程、RAG、评测、生产运维全解
后端·ai·langchain
装不满的克莱因瓶2 小时前
【SpringAI Alibaba】ReactAgent结构化输出OutputType与OutputSchema实战
java·人工智能·ai·springai·springaialibaba
楚山之石2 小时前
【Radiology】影像组学的标准化与可重复性:IBSI 卷积滤波器共识及其未能覆盖的环节
人工智能·学习·机器学习·mri
东姬AI2 小时前
挖出948个内核漏洞、自动写补丁:GPT-6 Cyber把AI推进“实战岗“,内容行业还卡在哪一关?
人工智能·网络安全·openai·gpt-6