【最佳实践】Anthropic:Agentic系统实践案例

133 阅读6分钟

上一篇文章—《【最佳实践】Anthropic:如何构建有效的 Agent,详述了Agentic系统中Workflow和Agent的基本模式和常见场景,本篇继续分享附录中的内容——Agentic系统实践案例与通过提示词工程使用工具

TL;DR

适用于 Agentic 系统的场景特点

  • 既包含对话又包含任务执行
  • 具有明确的正确标准
  • 支持反馈迭代
  • 具有人工监督

Agentic系统实践应用:

  • **客户支持场景:**结合对话式界面与外部工具,适用于需要获取信息、处理操作和反馈的任务,能通过明确的成功标准衡量效果。
  • **编码Agent:**软件开发中使用Agent进行代码自动化验证和问题解决,通过测试结果迭代优化,确保输出质量,并依赖人工检查确保解决方案符合系统需求。

提示词工程与工具使用:

  • 工具是Agent的重要组成部分,使其能与外部服务API互动
  • **优化工具格式:**使格式符合模型处理习惯,避免多余的格式复杂性。
  • **经验建议:**提供足够的tokens让模型思考,优化工具定义(示例用法、边界情况等),并测试模型与工具交互的表现。
  • **减少错误的工具设计:**通过优化参数和工具定义,避免模型使用中的常见错误。

原文翻译

附录 1:实践中的 Agent

我们与客户的合作揭示了 AI Agent 的两个特别有前景的应用,它们证明了上述讨论模式的实际价值。 这两个应用程序都说明了对于既需要对话又需要执行、具有明确的正确标准、支持反馈迭代以及结合有意义的人工监督的任务,如何最大地发挥 Agent 的价值。

A. 客户支持场景

客户支持场景将聊天机器人界面与通过工具集成的增强功能相结合。 这个场景很适合更开放的 Agent,因为:

  • 客户支持场景很自然地遵循了对话流程,同时需要访问外部信息和操作
  • 可以通过集成工具来提取客户数据、订单历史记录和知识库文章
  • 可以以编程方式处理诸如发放退款或更新工单之类的操作;以及
  • 可以通过用户定义的解决方案清楚地衡量成功

一些公司通过基于使用情况的定价模式(仅对成功的解决方案收费)证明了这种方法的可行性,从而显示了他们对其 Agent 有效性的信心。

B. 编码 Agent

软件开发领域显示了 LLM 功能的显著潜力,其能力从代码补全发展到自主问题解决。 Agent 特别有效,因为:

  • 可以通过自动化测试验证代码解决方案;
  • Agent 可以使用测试结果作为反馈来迭代解决方案;
  • 问题空间是明确定义的和结构化的;并且
  • 可以客观地衡量输出质量。

在我们自己的实现中,Agent 现在可以在 SWE-bench Verified 基准测试中仅基于拉取请求描述来解决实际的 GitHub 问题。 然而,虽然自动化测试有助于验证功能,但人工检查对于确保解决方案符合更广泛的系统需求仍然至关重要。

附录 2:通过提示词工程使用工具

无论您构建哪个 agentic 系统,工具都可能是 Agent 的重要组成部分。工具(Tools)使 Claude 能够通过在我们的 API 中指定其确切的结构和定义来与外部服务和 API 交互。当 Claude 响应时,如果它规划使用工具,它将在 API 响应中包含一个 工具使用块tool use block)。工具定义和说明应该与您的整体提示词一样受关注。 在这个简短的附录中,我们将介绍如何通过提示词工程使用工具

通常有几种方法可以指定相同的操作。 例如,您可以通过编写 diff 或重写整个文件来指定文件编辑。 对于结构化输出,您可以在 Markdown 中或 JSON 中返回代码。 在软件工程中,这些差异都是表面的,并且可以从一种格式无损地转换为另一种格式。 然而,对于 LLM 来说,某些格式比其他格式难得多。 编写 diff 需要知道在编写新代码之前,代码块标题中有多少行正在更改。 在 JSON 中编写代码(与 Markdown 相比)需要额外转义换行符和引号

我们关于决定工具格式的建议如下:

  • 在模型开始执行之前,给模型足够的 tokens 来“思考”
  • 使格式接近于模型在互联网文本中自然看到的内容
  • 确保没有格式的“额外开销”,例如必须准确计算数千行代码,或字符串转义它编写的任何代码

一条经验法则是考虑在人机交互(HCI)上花费了多少精力,并计划投入同样的精力来创建一个好的 agent-计算机交互(ACI)。 以下是一些关于如何做到这一点的想法:

  • 站在模型的角度思考。 基于描述和参数,使用此工具是否显而易见,或者您还需要仔细的思考? 如果是这样,那么对于模型来说可能也是如此。 良好的工具定义通常包括示例用法、边界情况、输入格式要求以及与其他工具的明确边界。
  • 您如何更改参数名称或描述以使事情更明显? 将此视为为团队中的初级开发人员编写一个很好的文档。 当使用许多类似的工具时,这一点尤为重要。
  • 测试模型如何使用您的工具:在我们的 workbench 中运行许多示例输入,以查看模型会犯哪些错误并进行迭代。
  • 让你的工具避免出错Poka-yoke your tools)。 更改工具参数,使其更难犯错。

在为 SWE-bench 构建我们的 Agent 时,我们实际上花费了更多的时间来优化我们的工具,而不是整体的提示词。 例如,我们发现,在 Agent 删除根目录后,模型在使用相对文件路径的工具时会犯错误。 为了解决这个问题,我们将工具更改为始终需要绝对文件路径——我们发现模型完美地使用了这种方法。


感谢阅读到这里,如果这篇文章对你有所帮助,欢迎关注【算法工程笔记】公众号!