0%

如何构建一个Agent

原文:https://blog.langchain.com/how-to-build-an-agent/

本文介绍了当我们有了想法之后,如何通过一系列的步骤来逐步实现一个agent 的过程

其中主要侧重思路和过程,不涉及具体的技术实现细节

下面内容为对原文的理解翻译学习,大家可以优先考虑阅读原文

Step 1: 举例说明agent的工作任务

首先挑选一些可以交给聪明实习生的工作,如果他都无法在足够的时间和资源的情况下完成,那么这个任务可能不适合agent

可以以想出5-10个具体的任务例子来开始,这样可以确保

  1. 验证你的想法的合理性,不会太琐碎或者模糊
  2. 可以为后续的效果衡量提供基准

例子:构建一个邮件agent

我们可以定义如下的任务:

  1. 优先处理来自关键利益相关者的紧急电子邮件
  2. 根据日程情况安排会议
  3. 忽略垃圾邮件或者不需要回复的电子邮件
  4. 根据公司文件回答产品问题

需要注意如下问题:

  • 如果不能提供具体的例子,说明你的任务范围太宽泛了
  • 如果传统软件效果更好时,不要考虑使用agent

Step2: 设计操作流程

编写详细的标准操作流程(SOP),其中包含有关人类如何执行任务或流程的分步说明

用于确认选择的问题范围是否清晰合理,同时确认agent 可能需要处理的关键步骤、决策和工作

例子:构建一个邮件agent

分步过程可能如下:

  1. 分析电子邮件内容和发件人等信息对回复优先级进行分类
  2. 检查当前日程,安排会议
  3. 根据电子邮件、发件人和日程安排背景起草回复
  4. 经过快速人工审核和批准后发送电子邮件

Step3: 只使用提示词来构建MVP版本

在此步骤中,专注于最关键的LLM 推理任务(如分类、决策等),并创建一个能有效处理这些任务的提示词

  1. 手动输入LLM 所需要的数据(暂时不要自动化)
  2. 根据最初列出的示例进行测试,以验证常用用力的性能
  3. 专注于理解LLM的推理过程

例子:构建一个邮件agent

这里我们可以首先处理基础步骤:按照紧急程度和意图对电子邮件进行分类

当我们编写好提示词后,可以手动输入如下内容:

1
2
3
邮件内容:我们下周可以开会讨论一下LangChain的产品路线图吗?
发件人:杰夫.贝佐斯
标题:亚马逊首席执行官

大模型输出结果:

1
2
意图:会议请求
紧急程度:高

当LLM 在测试用例中始终可以正确执行后,我们就可以确信核心逻辑是合理的

Step4: 连接&编排

这时候我们需要将提示词与真实数据和用户输入进行连接

首先,确定所需的上下文或数据(如电子邮件内容、日程等),并计划如何以编程的方式访问它(如通过API 等)

之后,编写编排逻辑,将正确的数据连接到你的提示词中。在简单的场景下可以直接传递输入,但是对于复杂的工作流,则需要agent逻辑来决定使用哪个数据源进行查询,什么时候调用,如何组合他们的输出等

例子:构建一个邮件agent

对于电子邮件agent,此步骤可能涉及于邮件api 及日程api 的集成,我们可以构建如下编排逻辑

  1. 通过一封新邮件来触发agent 执行
  2. agent 通过CRM 等api 获取发件人信息
  3. 将全部内容传递给大模型,确定紧急程序以及是否需要响应
  4. 如果会议合适,它会检查日程并提议时间
  5. agent 起草回复
  6. 经过人工审核后,它会发送电子邮件

Step5: 测试&迭代

使用步骤1中定义的示例,手动测试MVP 版本,验证结果是否合理且准确

手动测试稳定后,即可扩展至自动化测试,增加更多示例,以确保一致性并捕捉极端情况

  1. 通过agent 以自动化编程方式运行所有示例(原始示例+新示例)
  2. 定义自动化成功指标,明确agent 的预期行为
  3. 通过人工审核来发现可能遗漏的问题

例子:构建一个邮件agent

对于电子邮件agent, 我们希望在几个关键点定义测试成功:

  1. 预期和安全:回复应专业、尊重,且不含幻觉或不适当的内容
  2. 意图和优先级检查:根据发件人和内容对电子邮件进行正确分类和优先排序
  3. 工具使用效率:agent 仅执行必要的工具(如不需要安排日程,则避免检查日历)
  4. 草稿质量:建议的回复内容,应清晰、于输入内容相关且准确

Step6: 步骤,扩展和优化

一旦MVP 运行稳定,就可以开始扩展其范围,如添加新功能、更广泛的用例,甚至添加多agent 工作流。对于每个新功能或集成,请重复步骤5中的测试过程,确保不会破坏现有功能

监控用户实际使用agent 的方式,发现准确性问题或延迟问题等

例子:构建一个邮件agent

部署了电子邮件agent 后,我们可以通过监控流量和常见问题发现未覆盖的用例