Chennl's Profile
Agent工具设计提示词

Claude 为 Agent 构建工具的 5 条指导原则

从工具选择、命名空间、上下文返回、Token 效率与描述设计五个方面总结 Agent 工具设计方法。

1. 为 Agent 选择合适的工具

主要解决问题:减少 Agent 对上下文信息的处理。

直接将传统的、面向人类的软件 API 简单封装成工具,会导致 Agent 效率极其低下甚至完全失效。

  • 给智能体一个“搜索引擎”,而不是一个“未经索引的硬盘”

直接搜索返回相关内容,而不是罗列返回全部内容,占用大量的上下文,让 Agent 去翻找。减少对上下文信息的处理,提高 Agent 的工作效率。

  • 优先实现“高价值、高聚合”的工具

工具应对应一个完整的任务单元,而非一个基础操作。减少 Agent 需要规划和协调的步骤。

  • 每个工具必须有清晰、独特的目标

工具的功能边界应该清晰,避免重叠。减少 Agent 在选择工具时的困惑。

2. 使用命名空间为工具划分界限

主要解决问题:当 Agent 面对大量功能相似或用途模糊的工具时,很难去选择使用哪个工具。

通过使用命名空间,不仅减少了加载到 Agent 上下文中的工具和工具描述的数量,还将 Agent 的计算负担从其上下文中转移回了工具调用本身。降低了 Agent 犯错的整体风险。

命名空间的核心思想是给工具名称加上统一的前缀或后缀,将它们进行逻辑分组,就像给文件分文件夹一样。

两种主要的命名空间方案举例:

前缀命名(Prefixing){服务名}_{功能}

  • 例如:asana_search, jira_search

  • 优点:将同一服务的工具紧密分组在一起,AI 更容易理解“对于 Jira,我有这一系列操作”。

后缀命名(Suffixing){功能}_{资源名}

  • 例如:search_ticketscreate_project

  • 优点:将相同操作的功能分组在一起,AI 更容易比较“所有搜索功能”或“所有创建功能”。

命名空间方案的具体效果因大语言模型而异,需要根据对工具使用的评估结果来选择命名方案。

3. 工具为 Agent 返回有意义的上下文

主要解决问题:减少 Agent 信息处理时的幻觉,提高任务行动的精准度。

为方便 Agent 的理解及后续行动,工具应该返回高价值信息。优先考虑上下文的相关性而非灵活性,并避免使用低级别的技术标识符(例如:uuid256px_image_url

核心原则:为 AI 返回信息,而非为机器返回信息。把 Agent 当作人类,而非计算机,因此返回的应该是经过加工、对人类和 AI 都语义清晰、可直接使用的信息。

nameimage_url file_type 这样的字段

Agent 可能会需要灵活地与自然语言和技术标识符两种输出进行交互。可以在工具中暴露一个简单的 response_format 枚举参数来同时实现这两种方式,让 Agent 可以控制工具返回“简洁”(concise)还是“详细”(detailed)的响应

工具响应结构(如 XML、JSON 或 Markdown)也会对评估性能产生影响。响应情况跟大模型训练有关,因此根据评估情况来选择最佳响应结构。

4. 优化工具响应以提高 token 效率

主要解决问题:由于 Agent 上下文数量有限,若工具返回占用大量上下文的内容,会出现 Agent“失忆”,导致任务失败的情况。

因此避免一次性返回海量数据,工具响应建议实现分页、范围选择、过滤和/或截断的某种组合,并设置合理的默认参数值。如 Claude Code,会默认将工具响应限制在 25,000 个 token 以内。

在截断响应后,必须附加上下文和明确的引导指令,告诉智能体接下来可以怎么做。比如:

  • 直接鼓励智能体采取更节省 token 的策略

  • 工具调用出错后,可以通过提示词工程来优化错误响应,使其能清晰地传达具体且可行的改进建议,而不是返回晦涩的错误代码或追溯信息。

5. 通过提示词工程优化工具描述

主要解决问题:Agent 因工具描述不清而无法有效调用工具。

需要通过提示词工程(的思维模型)来优化工具描述和规格。

优化工具描述的本质是:为 Agent 编写一份清晰、无歧义、包含所有必要背景知识的“新手入职指南”。

  • 名称具体:名称能准确概括功能。

  • 描述详尽:描述了功能、场景和输出。

  • 参数自解释:参数名清晰(带 _id, _name 等后缀),并且描述了格式和示例。

  • 背景知识显性化:包含了所有必要的术语定义、特殊规则和资源关系说明。

  • 数据模型严格:使用类型和枚举来引导智能体输入正确的值。

注意:不要一次写完就完事。将工具描述的修改作为实验的一部分,放入你的评估流程中。一个微小的描述改进(比如将参数 user 改为 user_id)可能会带来工具调用成功率的巨大提升。

我的思考总结

过去的计算机系统像是机器,现在的 AI 系统更像是人类。

看似好像更简单了,因为它能听懂我们说话。但其实更复杂了,因为人类就是一个复杂的系统,你根本不知道它脑子里到底在想什么,不知道下一步它会怎么做,所以要根据这个“人”的特性进行量身定制。

我们正在从“编程机器”转向“引导智能”:

  • 计算机系统是确定性系统:有确定的输入和输出。通过编程指令让机器去严格执行,核心是逻辑和控制流。

  • Agent 系统是不确定性系统:同样的输入会得到完全不一样的输出。我们对待 Agent 需要像对待人类一样,对于每个工具的返回响应,都应遵循大语言模型的底层原理,构造清晰易懂的自然语言去引导它完成任务。核心是语境、激励和约束。

所以我们需要转变以往的工程思维,去好好对待这个能跟我们用自然语言沟通的家伙,让它乖乖听话,听起来还是挺有意思的一件事!

文章目录6 个章节