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

64 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 从原理到代码,讲清楚大模型的 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