微信扫码
与创始人交个朋友
我要投稿
无论是 LLM 还是 Agent 发挥胜寒里的核心点是「工具调用」或者说「函数调用」, 但是目前来看说通用的模型,函数调用的性能还不能很好满足我们的需求。本文探讨 如何提升函数调用准确性的一些方案。
这部分内容主要来自下面论文: 《Robust Function-Calling for On-Device Language Models via Function Masking》:
大家有兴趣可以在线阅读:
我们先介绍一个典型的函数调用过程,如上图所示。 在这个过程中,
实现这一目标取决于模型能否准确地将用户的意图与候选函数的功能相匹配, 即选择合适的函数,以及模型能否理解每个参数的用法,即用正确的参数填充函数。
在实践中观察到了一些反复出现的问题:
函数的定义通常包括函数名称、参数名称和描述。 函数和参数名称的格式通常非常紧凑,例如 cal_sum
或 max_value
, 并且受设计者的个人风格和偏好的影响。 当模型试图仅从函数名称推断函数的用途时, 这种紧凑性可能会导致歧义,从而误导模型的选择, 尤其是在存在复杂功能的情况下。
例如,名为parse_data
的函数可能用于解析 JSON 数据, 但同一名称可能指在不同上下文中解析 CSV 文件,从而导致潜在的误解。
同样,在根据参数名称推断参数用法时,模型可能会受到训练数据集中类似名称参数的历史用法的误导。 更具体地说,这些误导场景可以分为几种情况。
函数名称误导。当用户意图与训练标签中存在的函数名称高度一致时, 模型可能会在测试期间错误地将该函数从候选列表中优先考虑,即使其功能与预期操作有很大差异。
例如,如果训练对中包含一个名为fetch_data
的函数用于从数据库检索用户数据, 但在测试集中,同名函数从外部 API 检索数据,则模型可能会错误地仅根据名称选择它。
参数名称误导。在测试环境中,当参数的功能和描述发生变化时, 模型经常会坚持其原始的参数使用模式,从而导致错误的函数调用。
例如,如果函数的参数超时在一个上下文中应为表示秒的整数,但 在另一个上下文中,它被定义为“10s”格式的字符串,则模型对原始整数格式的依赖可能会导致错误调用。
命名偏好带来的困扰。当测试环境中函数或参数的命名约定与训练数据集中的命名约定不同时, 模型的稳健性可能会降低。诸如CamelCase
和snake_case
之间的差异等变化可能会降低模型的置信度, 因为设备上的轻量级模型可能难以在不同的命名风格中进行推广。
下面看看我们在测试集中屏蔽了函数和参数名称,即用随机字符串替换它们,并观察模型性能的变化。 受测试模型的性能大幅下降。
Hammer 模型在相同设置下的性能, 性能下降要小得多,证明了它在面对任意函数和参数命名模式时具有很强的适应性。
下面看如何实现。
缓解上述问题的直接方法是尽量减少函数名称和参数名称的干扰,同时强制模型根据候选函数的描述理解其功能和用法。
描述的优点:
下图展示了函数屏蔽的过程:
论文结果肯定是好的,看下测试结果:
Hammer2.0[2] 已经在 HuggingFace 上发布,最小的仅为 0.5B,最大的为 7B, 大家可以在自己的环境或者 MaaS 平台部署测试。
最后大家在注意一下,论文中的函数屏蔽方案可能 大多数时候并不使用与我们自己的场景。
我接触的客户多是基于API调用,其函数数量也不会太多, 所以性能而本身更依赖函数 Schema 的定义,以及基础模型本身和的性能。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-21
一文回顾OpenAI系列发布会:从工具到AGI,OpenAI的12天进化论
2024-12-19
强化微调技术详解:开启AI模型定制的新篇章
2024-12-18
OpenAI 年底「百亿补贴」来了,满血 o1 API 开放,成本暴跌,定制升级
2024-12-18
腾讯AI团队:用Ray分布式计算效率提升800%
2024-12-18
OpenAI 新货详解:大量接口更新,还有 Go/Java SDK
2024-12-18
聊聊对强化微调(RFT)的理解及看法
2024-12-18
OpenAI Day9丨o1实时API全面开放,音频价格降低60%
2024-12-18
重磅!OpenAI开放满血o1模型API,成本暴降60%
2024-09-18
2024-07-11
2024-07-11
2024-07-09
2024-06-11
2024-10-20
2024-07-23
2024-07-20
2024-07-26
2024-07-12