函数调用与工具模式
发布: (2026年2月8日 GMT+8 21:28)
4 分钟阅读
原文: Dev.to
Source: Dev.to
概览
本学习环节探讨 函数调用和工具模式(tool schemas)——即代理如何与外部工具交互。对话捕捉了用户与 Klover(AI 助手)之间的来回交流,突出误解、纠正以及更深入的洞见。
工具模式定义
工具模式 不仅仅是列出可用工具;它定义了如何调用每个工具,类似于代码中的函数签名。
- Name – 模型使用的标识符。
- Description – 为大语言模型(LLM)提供的自然语言解释。
- Parameters – 带有必填/可选标记的类型化字段。
天气工具的示例模式:
name: get_weather
description: "Get current weather for a location"
parameters:
location:
type: string
required: true
description: City name
units:
type: string
required: false
description: '"celsius" or "fahrenheit"'
模式存放位置
模式 不属于模型的训练数据。它在运行时注入,通常通过:
- 系统提示,或
- 请求负载中的专用 “tools” 部分。
模型在训练期间学习了 模式的格式,从而能够使用它从未见过的自定义工具。
完整的往返过程(LLM ↔ 工具)
- Thought – 模型决定需要使用工具。
- Action – 它输出结构化的 JSON 表示工具调用。
- Observation – 编排器执行工具,获取结果,并将其反馈给模型。
- Thought – 模型结合观察结果继续推理。
示例工具调用输出
{
"tool": "get_weather",
"parameters": {
"location": "Singapore",
"units": "celsius"
}
}
LLM 不会自行执行 调用;它在发出 JSON 后停止。你的应用(编排器)随后:
- 解析 JSON。
- 调用实际的 API。
- 将 API 响应作为观察结果返回。
- 让 LLM 生成下一个 thought。
编排器的角色
编排器位于 LLM 与外部工具之间,提供关键的安全保障:
- Validate 在执行前验证参数。
- Rate limit 防止无限循环。
- Filter 根据上下文或权限过滤不允许的工具。
- Log 记录每一次调用,以便调试和审计。
- Sanitize 在回馈给模型前清理工具输出。
没有这一层,恶意提示可能诱导模型执行危险操作(例如 delete_database)。
编写良好模式的重要性
糟糕的模式会导致行为不可靠:
| 问题 | 后果 |
|---|---|
| 描述模糊 | 模型选择错误的工具或跳过应使用的工具。 |
| 类型错误 / 缺少必填项 | 请求格式错误、崩溃或产生垃圾输出。 |
| 缺少参数细节 | 模型自行猜测含义,导致不可预测的调用。 |
设计工具模式本质上是 工具的提示工程。清晰的名称、精准的描述以及正确的类型规范是构建可靠代理的关键。
会话详情
- Date: February 8, 2026
- Status: Exposure
- Notes: 用户展示了良好的直觉,自然地将概念关联到 ReAct 循环。已安排明天进行审查。