Function Calling
type
Post
status
Published
date
Mar 29, 2026
slug
function-calling
summary
tags
category
LLM
icon
password
Place
Schema
1.1 Schema结构
一次聊天请求里,消息与工具定义是并列字段: 前者是 system、user、assistant… 后者是tools(每项含name、description、parameters)
1.2 Schema和Prompt区别
- 约束强度:Prompt偏软(模型可能忽略或理解偏);Schema可进行结构约束校验(若 API 支持
strict: true等,可对arguments做 Schema 校验后再交业务)。
- Schema主要负责参数有哪些字段、类型、必填、枚举等形状。Prompt主要负责何时用/不用。
- SpringAI框架从 Java 类型/注解生成 Schema 然后进行模型调用
函数名和描述
- 函数名:模型在
tool_calls里用此名定位工具;须与客户端注册名一致(如 Spring 里 Bean 名与defaultFunctions("mockWeatherTool")一致)。
- 工具级描述(
description):一句话说明用途,帮助在多工具间选型;可略写触发边界,细节放 System Prompt。
- 参数级描述:写在 Schema 各属性的
description(如 Jackson@JsonPropertyDescription),说明取值格式与示例。
Prompt
推荐以 SOP(标准操作流程)为主,把「工具触发」写成可执行的 if/then 规则,例如:先判断是否闲聊 → 是否明确需要结构化结果 → 再决定是否调用某工具。
- SOP:最适合写 何时用 / 何时不要用、与其它工具的分工、缺信息时先追问再调用——这是工具误用的主战场。
- Few-shot:在边界模糊时加 2~3 个短对话示例(用户怎么说 → 调或不调哪个工具),比纯规则更省 token、更直观;不必长链式演示。
- CoT(思维链):一般 不必 在 system 里要求模型「逐步推理」才允许调工具;易拖长输出、增加跑偏。若要用,只保留极短检查清单(例如「是否已具备 city」)即可。
实践组合:System 里 SOP + 少量 Few-shot;参数格式交给 Schema;复杂推理留给模型默认能力,不强行长篇 CoT。
按需加载
含义:不必在每一轮请求里把全部业务工具都写进
tools 数组(占 token、易选错)。常见做法是:- 只常驻一个(或少数)元工具,例如
search_tools/list_tools:入参是关键词或意图,返回可用工具名 + 简述 + 参数摘要;
- 由 编排层(或第二轮请求)根据检索结果,只把匹配到的子集注册进当前轮的
tools,再让模型做真正的tool_calls。
也可与 分层路由(先分类意图再给工具包)结合。核心是:候选工具列表动态裁剪,而不是永远暴露全集。
样例(Spring AI Function)
上一篇
Eden Switch
下一篇
ReAct
Loading...