Hugging Face CodeAgents + Structure:通过结构化生成提升代理可靠性
Hugging Face 引入了一种方法,通过将基于代码的动作的表现力与结构化生成的可靠性相结合,提升 AI 代理的可靠性。通过强制 CodeAgents 同时生成内部推理(thoughts)和可执行的 Python 代码,并将其放入结构化的 JSON 块中,代理在多个基准测试中的成功率显著高于传统的工具调用或标准代码生成方法。
代理动作的演进
AI 代理通常通过以下三种主要范式之一执行动作:
- Traditional JSON Agents:这些代理从预定义的工具中选择并生成 JSON 格式的调用。虽然可靠,但缺乏可组合性,且仅限于一套刚性的预定义动作,在需要跨多次调用管理中间状态的任务上表现不佳。
- Code Agents:这些代理直接编写可执行的 Python 代码,允许在循环、函数和条件语句中调用工具。这提供了无限的灵活性和保持状态的能力,但从 markdown 块中解析生成的代码可能会出错。
- Structured CodeAgents:此方法强制生成包含
thoughts字段用于推理、code字段用于执行的 JSON 对象。它将结构化解析的可靠性与 Python 代码的完整表现力相结合。
基准结果与性能提升
在包括 GAIA、MATH、SimpleQA 和 Frames 在内的基准测试中,代码动作结合结构化生成始终提升了有能力模型的性能。平均而言,结构化方法比普通 CodeAgents 提高了 2 到 7 个百分点的表现。
模型族的关键观察包括:
- OpenAI models:在推理密集型任务上表现出最大的提升。
- Claude models:取得了强劲的结果,Claude 3.7 Sonnet 表现尤为出色。
- Qwen models:整体有所提升,但较小的模型开始出现“结构税”。
为什么结构化生成提升成功率
消除解析问题
markdown 基于代码提取的解析错误经常导致代理失败。对 15,724 条代理轨迹的分析显示,2.4% 的轨迹在首次调用时出现了解析错误。这些错误的影响十分严重:
- Traces without parsing errors:成功率 51.3%。
- Traces with parsing errors:成功率 42.3%。
没有解析错误的轨迹成功率比有解析错误的高出 21.3%。此外,解析错误会将解决问题的平均步骤数从 3.18 增加到 4.63。
强制推理过程
通过要求提供 thoughts 字段,代理被迫在执行代码前阐述其推理过程。这促使更系统的规划,并使代理能够在过程早期捕获逻辑错误。
“结构税”与模型能力
结构化生成并非对所有情况都有益。存在一个能力阈值,模型必须具备足够的指令遵循能力和 JSON 预训练,才能处理这种认知负荷。
较小的模型(例如 mistralai/Mistral-7B-Instruct-v0.3)可能会受到“结构税”的影响,即在保持 JSON 语法的同时编写 Python 代码的开销导致代码语法破损(例如字符串格式错误或多余的逗号),从而立即触发 SyntaxError 失败。
实现与使用
对于 smolagents 库的用户,可以在初始化 CodeAgent 时通过设置 use_structured_outputs_internally=True 来启用结构化输出。
推荐使用场景
使用 Structured CodeAgents 的情形:
- 使用有能力的模型(前沿模型或参数量在 32B 以上的模型)。
- 执行需要复杂推理和代码执行的任务。
- 需要可靠解析代理输出的情况。
考虑替代方案的情形:
- 使用在结构化生成上表现不足的较小模型。
- 简单、预定义的工作流已足够。
实现技巧
- Clear Prompting:提示必须明确指定期望的 JSON 结构。
- Model Selection:选择在结构化生成方面表现强大的模型。
- Provider Support:使用原生支持结构化生成的 API 提供商(如 OpenAI 或 Anthropic),以确保最高的可靠性。
SUMMARY: Hugging Face 的研究表明,通过强制 CodeAgents 在结构化 JSON 格式中生成 thoughts 和代码,能够在消除解析错误并强制显式推理的情况下,使有能力的模型的性能平均提升 2 到 7 个百分点。
TITLE: Hugging Face CodeAgents + Structure:通过结构化生成提升代理可靠性