函数调用与结构化输出的边界:什么时候该让模型「填表」

人工智能 · 2026-10-07

让模型输出结构化数据有两条路线:填表与调工具。本文给出各自的适用场景、一个务实的组合方式(模型填意图表、代码去落地)、三个常见错误与选型检查清单。


两种"让模型输出结构化数据"的路线

  • **路线 A:让模型填表**(给它 schema,让它产出 JSON);
  • **路线 B:让模型调用工具**(用函数调用/工具调用,参数就是 schema)。
  • 两者都能拿到结构化结果,但**适用场景与风险不同**。选错的代价通常体现在稳定性和可控性上。

    什么时候该"填表"

  • 任务是**抽取/分类**(从这段文本里取出字段),没有副作用;
  • 一次要给多个字段(模型能一次看全上下文再决定);
  • 结果要**整体校验**(字段之间有关联,如起止日期);
  • 希望**批处理**(一次处理很多条,填表更省往返)。
  • 什么时候该"调工具"

  • 需要**执行动作**(查库、下单、发信),而不只是产出数据;
  • 参数之间**有先后依赖**(先查 ID 再更新);
  • 需要**幂等与审计**(每次调用是一条可追踪的记录);
  • 需要在执行前做**权限校验**(工具层能拦住越权)。
  • 一个务实的组合

    **"填表"负责意图,工具负责落地**:

    1. 让模型填一张"意图表"(动作 + 参数 + 理由);

    2. 程序**校验意图表**(字段、范围、业务规则、权限);

    3. 校验通过后,由**代码**按意图表去调用工具(而不是让模型直接调)。

    好处:模型犯错时**不会直接产生副作用**;校验与审计都在一条链上;重试也更容易做。

    三个常见错误

  • **让模型直接执行写操作**:一旦幻觉出参数,代价是真实的;
  • **只校验 JSON 合法性**:合法 JSON 也可能是错的业务值(金额为负、ID 不存在);
  • **把工具返回塞回模型再让它填表**:容易形成"模型改数据"的链路,越改越偏 —— 数据变换应交给代码。
  • 选型检查清单

    1. 这个任务是"取数据"还是"做事"?(取→填表;做→工具)

    2. 参数有没有依赖与幂等要求?

    3. 出错时的后果可控吗?(不可控 → 加人工确认)

    4. 有没有更简单的做法?(能用规则/正则解决的,不要上模型)

    想要你的品牌在AI回答里被推荐?

    免费诊断 →