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

LLM 如何把 What is 25 plus 17? 提取出表达式 25 + 17 并生成 tool_call

一、核心:文档字符串 + bind_tools 共同约束 LLM 完成转换 + tool_call

1. 工具 docstring 的作用(你这段注释就是关键指令)

python

运行

""" Evaluates basic mathematical expressions. Args: expression: A mathematical expression like "25 + 17" or "100 / 4" Returns: The calculated result as a string """

这段内容会完整打包进工具 JSON Schema 发给 LLM,给模型两个硬性规则:

  1. 这个工具只能接收标准数字运算符表达式,不能接收英文句子;
  2. 示例明确告知格式:"25 + 17""100 / 4",暗示plus要换成+divided换成/

2. bind_tools 强制模型输出结构化 tool_call

执行llm.bind_tools([calculator_tool])后:

  • LLM 不再允许自由文字回答计算题;
  • 必须输出tool_calls数组,包含工具名、参数字典;
  • 参数expression必须是纯算式字符串。

3. LLM 内部自动执行 4 步转换(无需手写代码处理文本)

输入 Prompt:

plaintext

Calculate the following using the calculator tool: What is 25 plus 17?

步骤 1:意图识别

句子包含计算语义,匹配calculator_tool

步骤 2:词汇映射(内置语言能力)

模型自动替换计算词汇:plus → +minus → -times → *divided by → /

步骤 3:清洗无关文本

删除虚词、疑问词:What is、问号、空格修饰,只保留数字与运算符。 输入文本What is 25 plus 17?→ 内部处理为25 + 17

步骤 4:组装标准 tool_call 结构

模型输出标准化 AIMessage,结构如下:

python

运行

AIMessage( content="", tool_calls=[ { "name": "calculator_tool", "args": {"expression": "25 + 17"}, "id": "auto-generated-uuid" } ] )

二、代码层面如何取出25 + 17

python

运行

# 调用绑定工具的LLM,传入自然语言问句 prompt = "Calculate the following using the calculator tool: What is 25 plus 17?" response = llm_with_calculator.invoke(prompt) # 判断是否生成了工具调用 if response.tool_calls: # 获取第一条工具调用 call_info = response.tool_calls[0] # 直接提取LLM转换好的纯表达式 math_expr = call_info["args"]["expression"] print(math_expr) # 输出:25 + 17 # 直接传入工具执行计算 res = calculator_tool.invoke(call_info["args"])

三、为什么不用自己写代码替换 plus→+?

  1. 语义泛化能力强复杂句子也能自动转换:sum of 12, 34 and 5"12 + 34 + 5"100 minus 6 multiplied by 7"100 - 6 * 7"
  2. Schema 强制规范输出 模型一定会输出标准算式,不会把英文问句塞进 expression,避免eval语法报错;
  3. docstring 示例起到示范作用 你写的like "25 + 17"是给模型的格式示范,大幅降低转换出错概率。

四、补充:如果想进一步强化转换规则(可选优化 docstring)

把词汇替换规则写进工具描述,模型转换准确率更高:

python

运行

@tool def calculator_tool(expression: str) -> str: """ Evaluates basic mathematical expressions. Convert math words to operators automatically: plus → +, minus → -, times → *, divided by → / Args: expression: Pure math expression like "25 + 17" or "100 / 4", NO natural language sentences Returns: The calculated result as a string """
http://www.gsyq.cn/news/1645793.html

相关文章:

  • Java安全管理器构建在线评测系统安全沙箱:原理、实战与避坑指南
  • 第1篇:一段 if-else 的代码,为什么成了“屎山”?
  • 基于Docker与Kubernetes的WebdriverIO自动化测试环境容器化实践
  • 手机号码定位神器:3分钟快速查询归属地完整指南
  • Wireshark+Fiddler手机抓包全攻略:从环境搭建到HTTPS解密与深度分析
  • Python爬虫如何绕过TLS指纹检测?curl_cffi实战指南
  • 语法全对,物理全错:2026年最危险的AI幻觉,正在污染你的仿真库
  • Android应用安全加固实战:代码混淆、资源加密、SO加固与完整性校验
  • 基于智普清言与LangChain构建私有化AI知识库:从架构设计到部署实践
  • iOS 17+隐私合规实战:从Reachability案例解析PrivacyInfo.xcprivacy配置
  • Cerast 智能:可查找域名暴露路径与配置错误,支持子字符串搜索
  • Java安全随机数生成:从Random漏洞到SecureRandom实战
  • 寄生感知共质心布局生成:集成布线优化的 3 步单元电容尺寸最小化方法
  • 【复现】配电网对分布式电源和电动汽车的承载力评估及提升方法综述(Matlab代码实现)
  • WebPack与JQuery安全检测:从打包到拆包的前端攻防实战
  • 基于开源AI与本地化部署的智能合同管理系统构建指南
  • 如何用哔哩下载姬高效管理你的B站视频收藏库
  • 开源热力图实战:基于OWA的用户点击行为可视化与深度分析
  • 防火玻璃到底是不是安全玻璃(二)
  • 基于微信小程序的校园食堂点餐订餐系统设计与实现
  • ResNet 残差块 2 种结构对比:Identity Block 与 Conv Block 的 3 大差异与适用场景
  • ONNX Runtime 1.19 GPU 安装避坑:CUDA 12.x/11.x 版本精确匹配与 3 步验证法
  • HSAK故障排查手册:常见问题分析与解决方案
  • UVa 628 Password
  • GitHub资源列表自动化维护:链接监控与README生成实战
  • JMeter分布式性能测试实战:从架构原理到避坑指南
  • Cantian connector for MySQL部署最佳实践:CentOS平台完整配置指南
  • TOTP双因素认证时钟同步原理与终极解决方案
  • 从RAG到智能体:构建工程化Agentic RAG系统的完整指南
  • 如何快速上手MLCacheDirect?从安装到基本使用的完整指南