news 2026/7/10 1:57:44

# Function Calling 幻觉:防御、纠正、兜底

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
# Function Calling 幻觉:防御、纠正、兜底

先说一下问题

做 AI 应用的时候,Function Calling 有个很头疼的问题——模型会乱调工具。

举个例子,你定义了一个queryOrder用来查订单。用户说"我要查订单",它调了,正常。但用户说"我想退单",它可能也调了queryOrder而不是cancelOrder。或者传参传了一个不存在的订单号,然后告诉你查不到。

这个问题在圈子里叫Function Calling 幻觉。不是模型坏了,是它在"猜"应该用哪个工具,而不是真的理解业务场景。

我这段时间在折腾这个,从各种资料和实验里整理了一套方案,分三个层面。


问题出在哪

模型的 Function Calling 逻辑大致是这样的:看了你写的 function 描述,比对当前用户输入,找语义上最匹配的那个工具调。

但有两个问题:

第一,描述是自然语言,模型的理解有边界。你写"查询用户信息",它不知道查询和修改的区别。你写"当用户想查看个人信息时调用",它可能把"查一下我的等级"也匹配进来。

第二,工具越多,准确率越低。我的测试结果,10 个以内的 function,准确率还行。超过 20 个,模型开始频繁选错。跟人一样,选项太多就容易纠结。


防御层:让模型少犯错

防御层是在调用发生之前做的优化,成本最低,效果最明显。

1. 描述里加"负面约束"

最常见的错误写法:

查询用户的订单信息

模型拿到的信息太少,全靠猜。改一下:

当用户明确提供了用户ID或订单号,并且意图是查询订单状态或详情时调用。 如果用户没有提供具体的查询条件,不要调用,先反问用户要查什么。 不要用于修改订单、取消订单、查询其他用户的信息。

核心改动是加了“什么时候不要调”的说明。实测下来,负面约束比正面描述更管用。

2. Few-shot 示例

在 System Prompt 里放几个调用示例,效果比优化描述都好。

正确的调用方式: 用户:"我最近的订单到了吗" → queryOrder(status='RECENT') 用户:"你好" → 不调用任何工具,直接回复 用户:"我的收货地址是什么" → queryUserAddress() 错误的调用方式: 用户:"你们客服电话多少" → ❌ 不应该调任何工具

3 到 5 个就够,多了占上下文,少了覆盖不全。

3. 动态控制工具数量

不要让模型一次面对几十个工具。先做意图分类,判断用户大概想干什么,只暴露相关的工具给模型。

比如用户说"帮我查一下快递",系统判断属于物流类,只给模型暴露物流相关的 3 个 function,其他 20 个工具不进入这次上下文。

工具数量从 20 降到 3,模型选错的概率低很多。


纠正层:让模型错了能改

防御层再怎么做,模型还是会犯错。所以要在调用过程中加纠正机制。

1. 参数校验 + 反馈闭环

不直接信任模型生成的参数。在执行工具之前,先校验参数格式和范围。

比如orderId规定是ORD-开头,模型传了个12345。这时候不要直接报错,而是把校验失败的信息包装成一条系统反馈,再发给模型:

系统提示:你传入的 orderId 格式不对,必须是 ORD- 开头,请修正后重试。

模型看到反馈后,通常会自己修正参数重新调用。这个过程完全自动,你只需要写校验规则和反馈模板。

但要注意一点:模型可能在同一个错误上反复循环,所以要限制重试次数,2 次差不多,超过就走降级。

2. 调用后的自反思

工具执行完后,让模型自己确认结果是不是正常。如果返回空数据或者报错,模型可以决定怎么处理。

比如模型调了天气查询接口,传了城市中文名但接口只支持拼音,返回为空。系统反馈异常信息,模型意识到参数错了,换成拼音重试。

在 Prompt 里加一句"调用工具后检查返回结果,异常时可以修正参数重试"就能启用这个能力。


兜底层:系统扛得住

防御和纠正都失效的时候,兜底保证业务不崩。

1. 重试上限 + 降级

同一个工具调用最多重试 2 次。超过了就走降级:

  • 返回用户提示:“暂时查不到,请稍后再试”
  • 记录异常日志
  • 切到备选方案(不用模型,用关键词匹配)

2. 业务补偿

如果模型调错了工具产生了副作用,要有撤销能力。比如错误地发了一条通知、改了某个状态,得有一个对应的"撤销"操作。

这个比较复杂,适合核心业务链路。非核心场景走降级就行。

3. 人工确认

涉及写操作、权限变更、支付类的场景,可以做成半自动:模型生成调用请求后,先让用户确认再执行。形式上就是个确认弹窗,但能挡住大部分误操作。


实际项目怎么选

不是所有场景都需要三层全上:

场景建议
纯问答、信息查询防御 + 纠正
数据查询和报表防御 + 纠正 + 重试降级
涉及写操作三层全上 + 人工确认

防御层的投入产出比最高。改改描述、加几个示例,不需要改代码结构就能提升准确率。


最后

Function Calling 幻觉不会彻底消失,模型迭代会改善但不会根除。把"模型会犯错"当作默认前提来设计,比期待下一个模型版本能解决所有问题更实际。

防御层让它少犯错,纠正层让它错了能改,兜底层让系统不崩——三层加起来,多数场景就够用了。

—— 焦虑的饼干

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 1:56:52

深入解析KDNN_torch_adapter:架构设计与实现原理详解

深入解析KDNN_torch_adapter:架构设计与实现原理详解 【免费下载链接】kdnn_torch_adapter Enabling PyTorch support for the KDNN acceleration library 项目地址: https://gitcode.com/openeuler/kdnn_torch_adapter 前往项目官网免费下载:htt…

作者头像 李华
网站建设 2026/7/10 1:55:52

位置式 vs 增量式 PID:3 大核心差异与电机控制场景选择指南

位置式 vs 增量式 PID:3 大核心差异与电机控制场景选择指南在工业自动化、机器人控制以及智能设备开发中,PID控制算法扮演着至关重要的角色。作为控制领域的经典算法,PID通过比例、积分和微分三个环节的协同作用,实现对系统输出的…

作者头像 李华
网站建设 2026/7/10 1:55:14

国家中小学智慧教育平台电子课本下载终极指南:三步获取官方PDF教材

国家中小学智慧教育平台电子课本下载终极指南:三步获取官方PDF教材 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。…

作者头像 李华
网站建设 2026/7/10 1:54:40

2026年精选AI论文写作工具合集(合规高效版)

为解决学术写作中效率与合规两大核心痛点,本文精选8款高适配性AI论文写作工具(按综合优先级排序),围绕中文学术规范适配、真实参考文献生成、格式标准化、高性价比四大核心维度进行筛选,同时配套分场景精准选型方案与学…

作者头像 李华
网站建设 2026/7/10 1:52:47

ESP8266-NodeMCU 传感器数据上云:MQTT对接EMQX,5分钟实现微信告警

ESP8266-NodeMCU 传感器数据上云:MQTT对接EMQX,5分钟实现微信告警 在智能家居和工业物联网应用中,实时监测环境数据并及时响应异常情况是核心需求。本文将手把手教你如何用ESP8266-NodeMCU采集温湿度、烟雾等传感器数据,通过MQTT…

作者头像 李华