5、拓展:强制使用工具

5.1 tool_choice参数说明
bind_tools 可以传递参数tool_choice ,用于控制是否强制使用工具。
该字段最终会作为payload 的tool_choice 字段传递给模型,OpenAI和Deepseek的官方API服务对于tool_choice 的取值做了相同的规定。
OpenAI官方文档

图片[1]-5、拓展:强制使用工具-大赛人网

Deepseek官方文档

图片[2]-5、拓展:强制使用工具-大赛人网

此外, tool_choice 还支持传递any ,等价于required 。

5.2 none值举例

模型初始化:

图片[3]-5、拓展:强制使用工具-大赛人网

举例:

图片[4]-5、拓展:强制使用工具-大赛人网

用户要求查询天气,并提供了天气查询工具,但模型不会调用。

5.3 auto值举例

tool_choice 的默认值就是auto 。
举例1:需要调用工具的场景

图片[5]-5、拓展:强制使用工具-大赛人网

举例2:不需要调用工具的场景

from langchain.tools import tool
from langchain.messages import HumanMessage
图片[6]-5、拓展:强制使用工具-大赛人网

5.4 required值举例

举例1:需要调用工具的场景

图片[7]-5、拓展:强制使用工具-大赛人网

举例2:不需要调用工具的场景

图片[8]-5、拓展:强制使用工具-大赛人网

即便此时不需要,模型依然会调用工具

5.5 强制调用特定的工具

某些场景下我们希望调用特定的工具,仍然可以用tool_choice 解决。

from langchain.tools import tool
from langchain.messages import HumanMessage
图片[9]-5、拓展:强制使用工具-大赛人网
图片[10]-5、拓展:强制使用工具-大赛人网

反过来指定get_weather1

图片[11]-5、拓展:强制使用工具-大赛人网
图片[12]-5、拓展:强制使用工具-大赛人网

6、实践经验总结

1. 清晰的描述

图片[13]-5、拓展:强制使用工具-大赛人网

2. 功能单一

图片[14]-5、拓展:强制使用工具-大赛人网
图片[15]-5、拓展:强制使用工具-大赛人网
  1. 如何处理工具失败?
    三层防护:
    第1层:工具内部处理
图片[16]-5、拓展:强制使用工具-大赛人网

第2层:Agent 级重试(使用 prompt)

图片[17]-5、拓展:强制使用工具-大赛人网

第3层:调用级重试
在大模型应用(如 LangChain)中,网络请求和外部工具调用是最容易掉链子的地方。@retry 就像是一个容错保险。

图片[18]-5、拓展:强制使用工具-大赛人网

它的工作流程:
① 你调用 call_agent(“你好”) 。
② 程序进入函数,执行 agent.invoke(…) 。
③ 如果执行成功:正常返回结果, @retry 什么都不做。
④ 如果执行失败(报错): @retry 会拦截这个错误,不让程序直接崩溃。它会默默地帮你再次触发agent.invoke(…) 。
⑤ 如果连续 3 次都报错:它终于放弃了,把第 3 次的报错真正抛出来,程序此时才会报错中止。

4. 返回字符串

图片[19]-5、拓展:强制使用工具-大赛人网

在编写传统的 Python 代码时,返回字典( dict )显然更方便后续代码处理。但在 LangChain 的工具
(Tools)生态中,强烈建议工具返回字符串(str)。因为:
1)大模型(LLM)的本质只吃“文本”
2)避免大模型“胡思乱想”(乱码与格式问题)
如果你返回一个包含中文的字典 {“name”: “张三”} ,LangChain 在强制将其转换为字符串时,默认可能会采用 Unicode 编码,变成 {“name”: “\u5f20\u4e09”} 。
大模型虽然能理解 Unicode,但极易受到干扰。直接看到中文 张三 的大模型,和看到\u5f20\u4e09 的大模型,其输出的稳定性和准确率是有差距的。通过手动 json.dumps(…,ensure_ascii=False) ,你确保了喂给大模型的是最干净、最直观的纯文本。

  1. 选择同步 vs 异步
    同步工具:简单场景,CPU 密集型任务
    异步工具:IO 密集型(API 调用、数据库、文件操作)
图片[20]-5、拓展:强制使用工具-大赛人网
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容