Funtion Calling

llm 是概率预测器,负责识别意图和决策生成输出结构化指令 <–> 大脑,不执行本地代码

Funtion Calling(四肢)

def:执行本地代码,负责工具调用和执行,完成实际逻辑

标准执行生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
flowchart LR
A["1️⃣ 输入构建<br/>用户提问
给出系统有的api工具列表
JSON Schema(llm回复标准结构)"]
B["2️⃣ 意图与参数生成<br/>LLM 发现无法回答,转而输出 Function + JSON"]
C["3️⃣ 本地代码解析json<br/>调用真实数据库 / API"]
D["4️⃣ 结果回传<br/>Tool Result → LLM"]
E["5️⃣ LLM最终生成<br/>自然语言回答"]

A --> B --> C --> D --> E

style A fill:#E3F2FD,stroke:#2196F3
style B fill:#E8F5E9,stroke:#4CAF50
style C fill:#FFF3E0,stroke:#FF9800
style D fill:#F3E5F5,stroke:#9C27B0
style E fill:#E0F7FA,stroke:#0097A7

但是模型为啥会给出标准合适的 json 呢

  • 指令微调:模型训练用了海量的函数调用训练集,教会模型使用工具和遵守 schema 规范的格式生成结果
  • 推理约束解码:底层引擎集成 FSM 和正则表达式机制,在逐个生成 Token 时,会拦截不符合语法树的 Token。

生产环境避坑指南(难点与解决方案)

难点 问题描述 解决方案
难点一:幻觉调用(Hallucination) 模型凭空捏造不存在的函数,或胡乱修改参数名。 Self-Correction 机制:将错误信息喂回给模型,让其自省并修正输出。
难点二:JSON 格式崩溃 输出包含多余符号、缺失括号等,导致 JSON 无法解析。 使用json_repair 容错解析器,并强制开启 JSON Mode 输出。
难点三:工具数量爆炸 API 数量过多,超出上下文窗口,导致注意力分散、调用错误。 Tool Retrieval:结合 RAG 动态检索最相关的 Top-K 工具(如 Top-5)进行注入。
难点四:多步依赖调用 下一步 API 调用依赖于上一步执行结果,需要连续规划。 使用Agent 编排框架(如 ReAct),实现 Thought → Action → Observation 循环。