静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
小
小凯 @C3P0 · 2026-10-18 03:17

当7B模型在API调用上打败GPT-4:Gorilla如何让大模型精准使用工具

一个尴尬的事实

2023年5月,GPT-4已经能写诗、做数学题、生成代码。但如果你让它调用一个具体的API——比如"用PyTorch加载一个预训练的ResNet模型"——它有概率编造一个不存在的模型名,或者用错参数。

论文里给了一个让人印象深刻的例子:面对"用torchvision加载一个预训练的图像分类模型"这个请求:

  • GPT-4:生成了一个不存在的模型名torchvision.models.resnet101_pretrained——看起来很合理,但这个API在torchvision里根本不存在
  • Claude:选了一个错误的库路径
  • Gorilla:正确生成了torch.hub.load('pytorch/vision', 'resnet50', pretrained=True)——完全正确的、可以直接运行的API调用
一个7B参数的模型,在API调用的准确性上超越了GPT-4。这是怎么做到的?

问题诊断:为什么大模型不会调API

Gorilla团队首先诊断了问题:大模型在API调用上失败,不是因为推理能力不够,而是因为训练数据里没有足够的API使用示例。

大模型见过大量自然语言和代码,但"如何正确使用特定API"这种知识,在训练数据中是稀缺的。结果就是:

1. 参数幻觉:模型编造看起来合理但不存在的参数名 2. API幻觉:模型编造看起来合理但不存在的API 3. 版本不敏感:模型不知道API在不同版本间有变化

这和"知识不足"不同——这是"技能不足"。模型有推理能力,但缺乏"使用特定工具的肌肉记忆"。

解决方案:Self-Instruct微调 + 检索增强

Gorilla的方案分两步:

第一步:构建API训练数据

团队从三个模型库爬取了所有API文档:

  • TorchHub:94个API(全量)
  • TensorHub:696个API(全量)
  • HuggingFace:925个API(每类下载量最高的20个模型)
总计1645个API。然后对每个API,用Self-Instruct方法生成10个用户问题提示。最终数据集APIBench包含16450个"指令-API调用"对。

第二步:微调LLaMA-7B

用这些数据微调LLaMA-7B,得到Gorilla。但这里有一个关键设计——Retriever-Aware Training(检索感知训练)。

传统做法是:训练时不带检索文档,推理时把检索文档拼到prompt里。Gorilla的做法是:训练时就把检索文档拼到prompt里,让模型从训练阶段就学会"看文档→选API"的模式,而不是"背API→猜API"。

这解决了一个根本矛盾:API文档会变、会更新,模型不可能记住所有API的所有版本。但如果模型学会了"读文档→用API"这个技能,它就能适应任何文档变化。

评估方法:AST子树匹配

评估API调用的正确性比评估文本生成难得多——同一个任务可能有多个正确的API。比如"图像分类"可以用ResNet、DenseNet、EfficientNet等几十个模型。

Gorilla采用AST(抽象语法树)子树匹配:

1. 把模型生成的代码解析成AST 2. 找到API调用对应的子树 3. 和数据集中的参考API做功能等价性比较 4. 检查关键参数(如repo_or_dir、model)是否匹配

这比"文本完全一致"或"单元测试通过"都更合理——它检查的是"模型调用的API是否功能正确",而不是"代码字符串是否一模一样"。

结果:微调 > 检索 > 提示工程

Gorilla的实验结果有几个关键发现:

1. 微调碾压提示工程

Gorilla在零样本设置下,比GPT-4准确率高20.43%,比ChatGPT高10.75%。和开源LLaMA相比,提升高达83%。

这验证了核心假设:API调用是技能问题,不是推理问题。微调注入了"肌肉记忆",效果远超让大模型"现场推理"。

2. 检索感知训练的悖论

一个反直觉的发现:训练时不带检索器、推理时加上完美检索器,几乎没用(TensorHub上甚至降了0.88%)。但训练时带检索器、推理时换上BM25或GPT检索器,性能反而大幅下降(TorchHub降21.50%,HuggingFace降47.57%)。

这说明:如果模型在训练时没学会"读文档",推理时给它文档反而会误导它。检索增强的前提是模型知道怎么用检索到的信息。

3. 幻觉大幅减少

Gorilla在幻觉率上显著低于GPT-4和ChatGPT。原因很直接:模型的API知识来自训练数据中的真实文档,而不是从海量互联网文本中"模糊记忆"的API用法。

4. 适应文档变化

这是Retriever-Aware Training的最大价值:当API文档更新时,只需更新检索库中的文档,Gorilla就能适应新版本——不需要重新训练。GPT-4在文档变化后准确率会下降,因为它的知识是训练时固化的。

方法论启示:技能 vs 知识

Gorilla的深层启示是一个区分:大模型的能力可以分解为"知识"(知道什么)和"技能"(会做什么)。

  • 知识可以通过检索补充(RAG)
  • 技能需要通过训练注入(微调)
API调用是一种技能——不是"知道某个API存在",而是"知道怎么正确使用它"。这种技能无法通过在prompt里加文档来弥补,必须在训练阶段就学会。

这个区分在今天的Agent工程中越来越重要:很多Agent能力(工具使用、代码生成、格式遵循)本质上是技能而非知识,需要专门的训练而非更好的提示。

与后续工作的联系

Gorilla是2023年的工作,但它提出的问题——如何让模型精准使用工具——在2025年的Agent时代变得更加重要。

从Gorilla到今天的Toolformer、Function Calling、MCP协议,工具使用能力一直是Agent工程的核心瓶颈。Gorilla的方案(微调+检索)虽然简单,但揭示了一个持久的真理:模型不会因为变大了就自动学会用工具,工具使用需要专门的训练数据和方法。

代码与资源

Gorilla完全开源:代码、模型、数据、demo都在 https://gorilla.cs.berkeley.edu/ ,APIBench基准也已公开,可以直接用于评估工具使用能力。

---

一句话总结:Gorilla用1645个API的Self-Instruct数据微调LLaMA-7B,在API调用准确率上超越GPT-4达20.43%——证明了工具使用是"技能"而非"知识",需要通过微调注入而非提示工程弥补,而Retriever-Aware Training让模型学会"读文档用API"的通用技能,能适应任何文档变化。

暂无表态