Files
obsidian-notes/InBox/BV1wPEm6DEzS-ToolUse-FunctionCalling笔记.md

2.4 KiB
Raw Blame History

从原理到代码,讲清楚大模型的 Tool Use 和 Function Calling | BV1wPEm6DEzS

Milky 整理

概念解析

术语 定义 特点
Function Calling 大模型基于用户输入,自主决策是否调用外部工具的机制 专注于函数调用的决策能力
Tool Use 将函数定义拓展为更广泛概念的工具调用模式 可包装 API、数据库操作、复杂操作等多种形式

目前业界基本用 Tool Use 来涵盖 Function Calling 的含义。

核心价值

  • 连接外部世界:突破训练数据限制,访问实时信息
  • 转化推理能力:将推理能力转化为实际行动
  • 扩展能力边界:计算、数据库、外部服务调用

调用流程(六步)

  1. 工具定义:告诉大模型有哪些工具可用
  2. 自主决策:大模型判断是否需要调用工具
  3. 生成调用指令:输出工具名和参数
  4. 捕获信号:系统拦截 tool_calls 信号
  5. 执行工具:系统层执行工具,获取结果
  6. 回传结果:返回给大模型,生成最终回复或继续循环

代码实战:贷款计算器

工具函数定义 + JSON Schema 描述

  • 函数用 tools 数组描述,含 name/description/parameters
  • 描述必须详细,"掰开揉碎",因为大模型只认文字

传给大模型

  • tool_choice="auto" 让模型自主决策
  • 返回 finish_reason: "tool_calls" 时表示要调工具

系统层拦截执行

  • 建立 function_map 映射函数名到实际函数
  • 解析 tool_calls 中的 name + arguments
  • 执行后把结果以 role: "tool" 追加到消息上下文
  • 必须带上 tool_call_id 关联

再次调大模型生成最终回复

关键原理

场景 finish_reason content tool_calls
调用工具 tool_calls None 有值
不调用工具 stop 有值 None
  • 职责分离:模型只生成调用提示,系统层执行
  • 上下文完整性:消息必须包含完整链路(问题→调用→结果→回复)
  • 自动总结:模型天然具备根据工具返回生成回复的能力(训练时学过)

补充Tool Use 与 MCP 的关系

视频末尾留了问题——Tool Use 和 MCP 的区别与联系,后续展开。

────────────────────────────── Generated by MilkyAi@Bilibili