函数调用能力的关键地位
在当前大语言模型(LLM)的应用生态中,函数调用能力(Function Calling)已经成为一项不可或缺的核心能力。它使 LLM 能够通过调用外部 API 获取实时信息、操作第三方服务,从而将模型的语言理解能力转化为实际的行动能力。从电子设计自动化到金融报告生成,从旅行规划到智能家居控制,函数调用正在将 LLM 的应用版图快速扩展到各个领域。
然而,如何让 LLM 更准确地理解和使用函数接口,一直是困扰研究者和工程师的关键问题。传统的提示工程往往依赖简单的自然语言描述,这容易导致模型产生幻觉或错误地调用不存在的函数。MediaTek Research 的研究团队最近在这一领域取得了重要突破,他们从提示格式优化、数据集成策略到多语言支持等多个维度,系统性地提升了 LLM 的函数调用能力。本文将详细解析他们的研究发现,为从事 LLM 应用开发的工程师提供切实可行的优化方案。
提示工程最新:重新思考函数描述的呈现方式
在这项研究中,研究者首先挑战了传统的函数描述方式。他们提出了两种不同的策略来在提示中展示函数描述:
专门角色策略: 为函数描述创建一个独立的角色(如"tools"),以 JSON 格式呈现函数信息。
系统角色集成策略: 将函数描述直接嵌入到系统角色的提示中,与使用说明一起呈现。
这两种策略的实验结果令人深思。研究发现,当函数描述通过专门角色呈现时,模型在相关性检测(Relevance Detection)方面表现更好。这意味着模型能更准确地判断是否需要调用函数,从而减少不必要的函数调用。研究发现,使用专门角色策略时,相关性检测准确率达到 49.58%,而系统角色集成策略则为 39.58%。
研究者认为,这种差异源于模型能更清晰地识别出有函数可用和无函数可用的场景之间的区别。当函数描述被放在专门的角色中时,有函数和无函数的提示模板差异更明显,这帮助模型建立了更强的区分能力。这种结构化的输入方式有助于模型注意力机制聚焦于工具定义区域,而非将其淹没在通用的系统指令中。
Prompt 格式示例
毫无疑问,精确推理时,Prompt 格式显著影响推理的精准度。研究中探索了三种主要的提示格式:
- 无函数场景:
<|im_start|>system
You are a helpful assistant.
<|im_end|>
<|im_start|>user
Where is Boston?
<|im_end|>
<|im_start|>assistant
- 专门角色提供函数:
<|im_start|tools
[{"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {"type": "object", "properties": {"location":
{"type": "string", "description": "The city and state"}},
"required": ["location"]}}]
im_end
im_start
You a helpful assistant.
im_end
im_start
What the weather Boston?
im_end
im_startassistant


