1. 为 Agent 选择合适的工具
主要解决问题:减少 Agent 对上下文信息的处理。
直接将传统的、面向人类的软件 API 简单封装成工具,会导致 Agent 效率极其低下甚至完全失效。
- 给智能体一个“搜索引擎”,而不是一个“未经索引的硬盘”
直接搜索返回相关内容,而不是罗列返回全部内容,占用大量的上下文,让 Agent 去翻找。减少对上下文信息的处理,提高 Agent 的工作效率。
- 优先实现“高价值、高聚合”的工具
工具应对应一个完整的任务单元,而非一个基础操作。减少 Agent 需要规划和协调的步骤。
- 每个工具必须有清晰、独特的目标
工具的功能边界应该清晰,避免重叠。减少 Agent 在选择工具时的困惑。
2. 使用命名空间为工具划分界限
主要解决问题:当 Agent 面对大量功能相似或用途模糊的工具时,很难去选择使用哪个工具。
通过使用命名空间,不仅减少了加载到 Agent 上下文中的工具和工具描述的数量,还将 Agent 的计算负担从其上下文中转移回了工具调用本身。降低了 Agent 犯错的整体风险。
命名空间的核心思想是给工具名称加上统一的前缀或后缀,将它们进行逻辑分组,就像给文件分文件夹一样。
两种主要的命名空间方案举例:
前缀命名(Prefixing):{服务名}_{功能}
-
例如:
asana_search,jira_search -
优点:将同一服务的工具紧密分组在一起,AI 更容易理解“对于 Jira,我有这一系列操作”。
后缀命名(Suffixing):{功能}_{资源名}
-
例如:
search_tickets,create_project -
优点:将相同操作的功能分组在一起,AI 更容易比较“所有搜索功能”或“所有创建功能”。
命名空间方案的具体效果因大语言模型而异,需要根据对工具使用的评估结果来选择命名方案。
3. 工具为 Agent 返回有意义的上下文
主要解决问题:减少 Agent 信息处理时的幻觉,提高任务行动的精准度。
为方便 Agent 的理解及后续行动,工具应该返回高价值信息。优先考虑上下文的相关性而非灵活性,并避免使用低级别的技术标识符(例如:uuid、256px_image_url)
核心原则:为 AI 返回信息,而非为机器返回信息。把 Agent 当作人类,而非计算机,因此返回的应该是经过加工、对人类和 AI 都语义清晰、可直接使用的信息。
像 name、image_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 需要像对待人类一样,对于每个工具的返回响应,都应遵循大语言模型的底层原理,构造清晰易懂的自然语言去引导它完成任务。核心是语境、激励和约束。
所以我们需要转变以往的工程思维,去好好对待这个能跟我们用自然语言沟通的家伙,让它乖乖听话,听起来还是挺有意思的一件事!