Agent Skills:压缩智能体技能以提升模型效率
基本信息
- 作者: maximedupre
- 评分: 46
- 评论数: 24
- 链接: https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals
- HN 讨论: https://news.ycombinator.com/item?id=46809708
导语
随着大模型应用从单次对话转向复杂任务执行,Agent 的技能体系设计正成为系统稳定性的关键环节。本文聚焦于 Compressed Agents 框架下的技能定义与调用机制,探讨如何通过结构化压缩提升 Agent 的执行效率与鲁棒性。读者将了解到技能模块化的核心逻辑,以及在实际工程中平衡能力与开销的具体实践方法。
评论
中心观点: 文章的核心主张是,在构建高效智能体时,通过压缩模型权重或知识来获得更紧凑的基础模型,优于通过繁琐的技能编排或外部工具调用来增强复杂模型;即“更小、更 dense 的模型大脑”比“松散的技能堆砌”更具潜力。
支撑理由与边界条件:
推理效率与延迟的权衡
- [事实陈述]:大语言模型(LLM)的推理延迟与模型大小和生成长度成正比。Agent 架构往往涉及多次链式调用,会指数级放大延迟。
- [作者观点]:通过剪枝、量化或知识蒸馏得到的“压缩 Agent”,能在保持核心能力的前提下显著降低延迟,提升用户体验。
- [反例/边界条件]:对于极度复杂的任务(如代码库级重构或长文本归纳),过度压缩的小模型会出现严重的“幻觉”或逻辑断层,此时必须依赖大模型的“慢思考”或外部工具(如代码解释器)来补足能力。
知识内化与外挂的可靠性
- [你的推断]:文章可能认为,将领域知识“压缩”进模型参数中,比依赖 RAG(检索增强生成)或 Function Call 更可靠,因为前者减少了上下文窗口管理的复杂性和检索失败的风险。
- [作者观点]:技能本质上是对知识的调用,如果模型本身具备足够的知识密度,就可以省去复杂的技能路由层。
- [反例/边界条件]:在知识更新极快的场景(如新闻推荐、实时股市分析),参数化的知识具有滞后性。此时,“Agent Skills”(如联网搜索能力)不仅必要,而且优于静态的压缩模型。
系统架构的复杂度
- [作者观点]:依赖大量技能编排的 Agent 系统维护成本极高,调试困难。压缩 Agent 追求模型的端到端能力,降低了工程复杂度。
- [反例/边界条件]:端到端模型是“黑盒”,可解释性差。在金融或医疗等强监管领域,必须使用 Agent Skills(如明确的计算步骤或数据库查询记录)来满足审计要求,这是单纯压缩模型无法做到的。
深度评价
1. 内容深度:从“堆砌”回归“本质”
文章触及了当前 AI Agent 发展的一个痛点:工程复杂度的膨胀。目前行业普遍存在“大力出奇迹”的倾向,即通过挂载无数 Tool 和 Prompt 技巧来弥补模型智力不足。
- 论证严谨性:文章若能深入探讨“知识压缩”与“推理能力”的非线性关系,深度将更高。目前的观点略显激进,因为研究表明,模型的推理能力往往与参数量强相关,压缩往往伴随着推理能力的退化。如果文章忽略了这一点,其论证在技术上存在漏洞。
2. 实用价值:资源受限环境的最优解
- 边缘计算场景:对于端侧 AI(手机、PC、IoT),文章的观点极具指导意义。在本地显存受限的情况下,无法运行 70B+ 的模型,更无法支持庞大的 Agent 技能栈。此时,一个经过精调和压缩的 7B 甚至 1B 模型是唯一解。
- 成本控制:对于大规模并发应用,压缩 Agent 能大幅降低 API 调用成本。
3. 创新性:范式转换的挑战
- 新观点:文章挑战了“Agent = LLM + Tools”的主流教条,提出了“Agent = Dense LLM”的极简主义路线。
- 局限性:这并非全新概念。OpenAI o1 模型的“系统思维”其实也是某种程度上的内化,但并未完全抛弃外部工具。文章若能提出具体的“如何压缩而不失智”的方法论(如特定的蒸馏算法),其创新性将更具说服力。
4. 可读性与逻辑
- 标题采用了 Markdown 语法(
.md >),暗示了文件结构或优先级的比较,逻辑清晰,直击开发者痛点。这种表达方式对于技术受众非常友好,能迅速传达“做减法”的核心思想。
5. 行业影响:对“中间层”创业公司的警示
如果该观点成立,目前许多基于“Agent 编排层”或“特定技能 Wrapper”的初创公司价值将大幅缩水。如果模型本身足够聪明(且被压缩到可部署大小),中间层的技能调度器可能被模型原生能力吞噬。
6. 争议点与不同观点
- Scaling Laws vs. Miniature Models:主流观点认为“More is Different”(量变引起质变),压缩模型可能永远无法达到大模型的突发推理能力。
- Tool Use is Intelligence:使用工具是人类智能的体现,AI Agent 的核心价值可能恰恰在于其“知道何时使用计算器”,而不是“心算出结果”。完全内化知识可能导致模型在算术或 factual knowledge 上产生不可修正的幻觉。
7. 实际应用建议
- 混合架构:不要非黑即白。建议采用 “小模型(压缩版)+ 关键技能” 的模式。利用压缩模型处理 80% 的通用逻辑和意图识别,仅在必要时(如需要最新数据或精确计算)调用 Skills。
- 关注蒸馏技术:
代码示例
| |
| |
| |
案例研究
1:Cognition AI (Devin)
1:Cognition AI (Devin)
背景:
Cognition AI 致力于开发自主 AI 软件工程师,目标是让 AI 能够独立完成复杂的编程任务,从需求分析到代码部署全流程自动化。
问题:
传统 AI 编程助手仅能完成代码补全或简单函数生成,缺乏长期规划、多文件编辑和自主调试能力。面对真实世界的复杂工程任务(如修复 Bug、重构代码、集成第三方 API),现有工具往往需要频繁人工干预,效率提升有限。
解决方案:
开发 Devin —— 一个具备完整 Agent Skills 的 AI 软件工程师。Devin 被赋予了在沙箱环境中执行终端命令、浏览器操作、代码编辑器使用等核心技能。它利用长短期记忆机制规划任务,并通过 ReAct (Reasoning + Acting) 框架自主拆解问题。例如,在接收到“构建并部署一个贪吃蛇游戏”的任务时,Devin 会自主制定技术栈(如 React + Node.js),编写代码,遇到报错时自主查阅文档并修复,最后运行测试并部署。
效果:
在 SWE-bench 基准测试中(涉及真实 GitHub 开源 Issue 的修复),Devin 解决了 13.86% 的问题,远超之前最先进模型的 1.96%。在实际演示中,Devin 能够在 Upwork 上承接真实的编程任务,包括调试计算机视觉模型、数据清洗和端到端应用构建,展现了从“辅助工具”向“独立工作者”的转变。
2:Klarna (客服自动化)
2:Klarna (客服自动化)
背景:
Klarna 是一家全球领先的支付金融服务商,拥有庞大的全球用户群,每天需要处理海量的客户服务咨询,包括退货、退款、订单查询等。
问题:
随着业务扩张,人工客服成本高昂且响应时间难以压缩。传统的聊天机器人基于规则或简单的意图识别,只能处理约 20%-30% 的查询,其余复杂的、多轮对话场景仍需转交人工,导致用户体验不一致且运营成本居高不下。
解决方案:
Klarna 与 OpenAI 合作,构建了基于 GPT-4 架构的客服 Agent。该 Agent 不仅仅是问答机器人,它被赋予了访问 Klarna 内部知识库和业务系统的技能。它可以执行具体的操作,例如:直接读取订单状态、处理退款流程、修改账户设置等。通过自然语言理解,Agent 能够准确识别用户意图,并调用相应的后端 API 完成任务,而不是仅仅提供操作指南。
效果:
该 AI 客服 Agent 在上线一个月内处理了 230 万次对话(占总咨询量的 2/3),直接完成了相当于 700 名全职人工客服的工作量。客户查询的解决时间从 11 分钟缩短至 2 分钟,且在客户满意度调查中,AI 的得分与人工客服持平。预计每年将为 Klarna 节省 4000 万美元的运营成本。
3:Rabbit (R1 跨应用操作)
3:Rabbit (R1 跨应用操作)
背景:
Rabbit (Rabbit Inc.) 试图打破现有 App 生态的壁垒,解决用户在不同应用之间切换繁琐、操作步骤重复的问题(例如“帮我订电影票”涉及打开 App、搜索、选座、支付等多个步骤)。
问题:
传统的语音助手(如 Siri 或 Google Assistant)主要依赖 App 开放特定的 API 接口(Intents),如果 App 没有开放接口,助手就无法操作。此外,基于 API 的方式无法覆盖 App 内复杂的 UI 交互逻辑,导致跨应用任务自动化能力极弱。
解决方案:
Rabbit 开发了“Large Action Model”(LAM)并推出了 R1 设备。其核心 Agent Skills 在于能够像人类一样通过观察 UI 界面来操作应用。通过基于计算机视觉的“点击流”学习技术,Agent 不需要依赖 API,而是直接识别屏幕上的按钮、菜单和文本,模拟人的点击、滑动和输入行为。用户只需用自然语言发出指令(如“帮我订一杯拿铁送到家”),Agent 即可自动跳转至咖啡 App,完成选品、下单和支付全流程。
效果:
Rabbit R1 在 CES 展示了无需适配即可操作 Spotify、Uber 和 DoorDash 等 30+ 种主流应用的能力。虽然产品初期面临硬件稳定性挑战,但其“基于 UI 交互的 Agent”范式为解决应用碎片化问题提供了新的方向,证明了 Agent 可以在不依赖官方 API 的情况下,通过模拟人类操作技能来执行复杂的跨应用任务。
最佳实践
最佳实践指南
实践 1:技能原子化与单一职责
说明: 将 Agent 的能力分解为最小可执行单元。每个技能应专注于解决一个特定的、定义明确的任务(例如:仅“读取文件”或仅“搜索代码”),而不是试图在一个技能中完成复杂的流程。这类似于编程中的单一职责原则(SRP),能显著提高技能的复用性和调试效率。
实施步骤:
- 审查现有的 Agent 技能列表,识别出包含多个逻辑步骤的“胖”技能。
- 将这些复杂技能拆解,直到每个技能仅包含一个核心动作或判断。
- 为拆解后的原子技能命名,确保名称准确描述其功能(如
read_file而非manage_data)。
注意事项: 避免过度拆解导致碎片化过重,如果一个操作在逻辑上总是成对出现(如“打开连接并关闭”),可以保持为一个单元。
实践 2:上下文感知与参数化设计
说明: 技能不应依赖全局状态或隐式信息。所有的输入数据(如文件路径、搜索关键词、目标 ID)都应通过显式参数传递。这确保了技能在不同环境、不同对话历史中的可预测性和稳定性。
实施步骤:
- 定义每个技能的输入参数 Schema,明确类型和必填项。
- 在技能执行前,增加参数校验逻辑,确保传入的数据符合预期。
注意事项: 对于敏感参数(如 API Key),应设计通过配置或安全上下文传递,而非作为普通函数参数明文传输。
实践 3:鲁棒的错误处理与反馈机制
说明: Agent 在执行技能时可能会遇到外部服务不可用、数据格式错误或权限不足等问题。最佳实践要求技能必须能捕获异常,并返回结构化的错误信息给 Agent 的推理核心,而不是直接抛出未处理的异常导致流程崩溃。
实施步骤:
- 为每个技能实现 try-catch 块,区分可重试错误(如网络超时)和不可重试错误(如认证失败)。
- 设计标准的错误返回格式,包含错误代码、简短描述和可能的修复建议。
- 在 Agent 的提示词中加入如何处理技能返回错误的指令。
注意事项: 错误信息应尽量具体,避免笼统的“执行失败”消息,以便 LLM 能够准确理解问题并尝试自我修正。
实践 4:工具调用的标准化与元数据
说明: 为了使 Agent 能够有效地选择和调用技能,必须为每个技能提供高质量的描述和元数据。这不仅是代码注释,更是 Agent 决策系统的依据。描述应包含技能的功能、适用场景以及输入输出示例。
实施步骤:
- 为每个技能编写一段“功能描述”,专门用于给 LLM 阅读,而非仅给开发者阅读。
- 定义清晰的输入/输出 Schema(如 JSON Schema)。
- 如果技能涉及成本或耗时,应在元数据中标注,以供 Agent 进行规划时参考。
注意事项: 描述语言应客观且精确,避免营销性语言,确保 LLM 不会误解技能的能力范围(避免幻觉)。
实践 5:严格的沙箱与权限隔离
说明: Agent 技能通常具有操作系统访问权或网络访问权。为了防止失控,必须在执行环境中实施严格的沙箱机制。技能应运行在受限的环境中,仅能访问完成当前任务所需的最小资源集。
实施步骤:
- 使用容器化技术(如 Docker)或受限的运行时环境来托管 Agent 技能。
- 实施基于角色的访问控制(RBAC),动态授予技能所需的临时权限。
- 禁止技能直接访问宿主机的敏感路径或修改系统配置。
注意事项: 定期审计技能的权限请求日志,检查是否存在异常的访问模式或权限提升尝试。
实践 6:可观测性与日志记录
说明: 调试 Agent 的行为比传统软件更困难,因为其决策路径具有非确定性。最佳实践要求每个技能必须记录详细的执行轨迹,包括输入参数、返回结果、执行耗时和中间状态。
实施步骤:
- 集成结构化日志框架(如 Structlog),确保日志包含
tool_name、correlation_id等关键字段。 - 将技能执行结果与 Agent 的思维链(CoT)输出关联,便于回溯分析。
- 建立仪表盘监控技能的成功率、平均耗时和错误类型分布。
注意事项: 在记录输入输出时,注意过滤敏感信息(PII),确保日志数据的安全性。
学习要点
学习要点
- 优先采用简单工作流**:在构建复杂 Agent 系统时,应优先使用简单的架构(如带工具的 Prompt),而非过度设计的循环自主 Agent,因为简单架构通常具有更高的性能且更易于调试。
- 优化上下文与 Prompt**:Agent 的核心能力取决于上下文窗口和 Prompt 质量,因此应优先优化 Prompt 指令和上下文信息,而非盲目增加系统的复杂度。
- 任务分解与子目标**:在需要多步推理时,将复杂任务分解为带有明确短期记忆和子目标的独立步骤,有助于减少错误累积并提高可追溯性。
- 精细化的工具使用**:工具使用是 Agent 的关键技能,必须通过精细的 Prompt 工程为模型提供清晰的 API 文档和示例,以确保其能准确调用外部工具。
- 人机交互与干预机制**:必须为 Agent 系统设计人机交互的审查与干预机制,以便在 Agent 产生幻觉或执行错误操作时能够及时纠正。
常见问题
1: 什么是 Agent Skills,它与传统的 AI 模型能力有什么区别?
1: 什么是 Agent Skills,它与传统的 AI 模型能力有什么区别?
A: Agent Skills(代理技能)是指 AI 代理在执行复杂任务时所具备的特定功能模块或工具调用能力。与传统的 AI 模型能力不同,传统模型主要依赖预训练的知识进行文本生成或问答,而 Agent Skills 强调代理与外部环境的交互能力。这包括调用 API、执行代码、操作软件工具、检索实时信息以及进行多步推理的能力。Agent Skills 使得 AI 不仅仅是被动的响应者,而是能够主动完成工作流的“行动者”。
2: 在“Compressed Agents”的语境下,Agent Skills 是如何被优化或压缩的?
2: 在“Compressed Agents”的语境下,Agent Skills 是如何被优化或压缩的?
A: 在“Compressed Agents”的研究或应用语境中,Agent Skills 的优化通常旨在降低运行成本和提高响应速度。这通常通过以下几种方式实现:
- 模型蒸馏:使用大型高性能模型训练一个小型模型,使其在特定技能上接近大模型的表现,但体积更小、推理更快。
- 技能剪枝:分析代理在执行任务时的技能调用频率,移除冗余或不常用的低效技能路径。
- 提示词压缩:优化定义技能的 Prompt 或 System Prompt,减少 Token 消耗,同时保持指令的清晰度和执行准确率。
- 专业化微调:针对特定的技能集对小型模型进行微调,使其在特定领域(如代码生成、数据分析)表现出色,从而替代通用的、庞大的基础模型。
3: 如何为 AI Agent 定义和设计新的 Skills?
3: 如何为 AI Agent 定义和设计新的 Skills?
A: 定义和设计 Agent Skills 通常遵循以下步骤:
- 明确目标:确定 Agent 需要解决的具体问题(例如:预订机票、分析 CSV 文件、发送邮件)。
- 工具选择:选择能够实现该目标的底层工具或 API(例如:用于查询航班的 API,用于执行代码的 Python 解释器)。
- 接口封装:将工具封装成标准化的函数描述,通常包含函数名、描述参数(Schema)以及预期的返回结果格式。
- 上下文关联:在 System Prompt 中明确告知 Agent 该技能的使用场景、限制条件和调用方式。
- 测试与迭代:在沙盒环境中测试 Agent 对该技能的调用准确率,并根据错误日志调整参数定义或描述语言。
4: Agent Skills 与 RAG(检索增强生成)有什么关系?
4: Agent Skills 与 RAG(检索增强生成)有什么关系?
A: Agent Skills 和 RAG 是互补的技术,常结合使用以增强 Agent 的能力。
- RAG 侧重于“知识内化”,它通过检索外部文档库来为 Agent 提供最新的、特定领域的上下文信息,解决模型知识滞后或幻觉问题。
- Agent Skills 侧重于“行动执行”,它允许 Agent 操作工具。 在实际应用中,一个 Agent 可能会先使用 RAG 技能检索到相关信息(例如查询用户手册),然后使用代码解释器技能(Agent Skill)根据这些信息进行计算或生成报告。RAG 可以被视为一种特殊的、向知识库查询信息的 Skill。
5: 部署具备复杂 Skills 的 Agent 时,主要面临哪些挑战?
5: 部署具备复杂 Skills 的 Agent 时,主要面临哪些挑战?
A: 部署复杂 Agent 主要面临以下挑战:
- 延迟与响应速度:Agent 在执行复杂任务时可能需要多次调用 LLM 进行规划(Chain of Thought)和多次调用外部工具,这会导致总响应时间过长,影响用户体验。
- 错误累积:在多步骤的任务执行中,如果某一步的 Skill 调用失败或返回了错误结果,Agent 可能无法自我纠正,导致最终任务失败。
- Token 成本:复杂的 Skill 定义和多次交互的上下文历史会消耗大量的 Token,增加运营成本。
- 安全性与权限控制:赋予 Agent 调用 API 或执行代码的权限带来了安全风险,需要严格的沙盒机制和权限管理,防止 Agent 执行破坏性操作。
6: 如何评估 Agent Skills 的有效性?
6: 如何评估 Agent Skills 的有效性?
A: 评估 Agent Skills 的有效性通常采用多维度的指标:
- 任务成功率:Agent 是否最终完成了用户的指令,输出了符合预期的结果。
- 工具调用准确率:Agent 是否选择了正确的 Skill(工具),以及传入的参数是否正确。
- 中间步骤效率:Agent 完成任务平均调用了多少次工具,是否存在无效的循环调用或冗余步骤。
- 鲁棒性:当外部工具返回异常或非预期数据时,Agent 是否能优雅地处理错误并进行重试或转换策略。
- 端到端延迟:从用户输入到最终输出的总耗时。
7: 开源社区(如 Hugging Face)在 Agent Skills 发展中扮演什么角色?
7: 开源社区(如 Hugging Face)在 Agent Skills 发展中扮演什么角色?
A: 开源社区极大地推动了 Agent Skills 的标准化和普及。
- 标准制定:社区推动了如 OpenAPI、JSON Schema 等工具描述标准的采用,使得不同框架间的 Skills 可以互通。
- 工具库集成
思考题
## 挑战与思考题
### 挑战 1: [简单]
问题**:
在构建 Agent 时,最基础的技能是调用工具。请设计一个简单的 Agent,使其能够接收用户的自然语言输入(例如“帮我查一下现在的天气”),并自动决定是否需要调用外部 API(如天气 API),还是直接回答。如果调用 API,请将 API 返回的结果自然地反馈给用户。
提示**:
引用
- 原文链接: https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals
- HN 讨论: https://news.ycombinator.com/item?id=46809708
注:文中事实性信息以以上引用为准;观点与推断为 AI Stack 的分析。