当前位置: 首页 > article >正文

Agent 的7 中设计模式

这里写自定义目录标题

  • 建立有效的Agent
    • 什么是Agent?
    • 何时(以及何时不使用)使用代理
    • 何时以及如何使用框架
    • 构建块、工作流和Agent
      • 构建模块:增强型LLM(The augmented LLM)
      • 工作流程:提示链接(Prompt chaining)
      • 工作流程:并行化(Parallelization)
      • 工作流程:路由(Routing)
      • 工作流程:评估器-优化器(Evaluator-optimizer)
      • 工作流程:Orchestrator-workers
      • 代理商(Agent)

code: https://github.com/daiyizheng/DL/tree/master/08-llms/Agent_

建立有效的Agent

什么是Agent?

“代理” 有多种定义。一些客户将代理定义为完全自主的系统,能够在较长时间内独立运行,使用各种工具完成复杂任务。另一些客户则用该术语来描述遵循预定义工作流程的更具规范性的实现。在 Anthropic,我们将所有这些变体归类为代理系统,但在工作流程和代理之间划出了一个重要的架构区别:

工作流是通过预定义代码路径协调 LLM 和工具的系统。
另一方面,代理是 LLM 动态指导其自身流程和工具使用的系统,可以控制其完成任务的方式。
下面,我们将详细探讨这两种代理系统。在附录1(“代理实践”)中,我们描述了客户发现这类系统在两个领域中具有特殊价值。

何时(以及何时不使用)使用代理

使用 LLM 构建应用程序时,我们建议寻找尽可能简单的解决方案,并且仅在需要时增加复杂性。这可能意味着根本不要构建代理系统。代理系统通常会牺牲延迟和成本来换取更好的任务性能,您应该考虑这种权衡何时合理。

当需要处理更多复杂性时,工作流可以为定义明确的任务提供可预测性和一致性;而当需要大规模灵活性和模型驱动的决策时,代理则是更好的选择。然而,对于许多应用而言,使用检索和上下文示例来优化单个 LLM 调用通常就足够了。

何时以及如何使用框架

有许多框架可以使代理系统更易于实现,包括:

  • LangChain 的LangGraph ;
  • Amazon Bedrock 的AI Agent 框架;
  • Rivet,一个拖放式 GUI LLM 工作流构建器;
  • Vellum,另一个用于构建和测试复杂工作流程的 GUI 工具。

这些框架简化了标准的低级任务,例如调用 LLM、定义和解析工具以及链接调用,从而简化了入门流程。然而,它们通常会创建额外的抽象层,这可能会掩盖底层的提示和响应,使其更难调试。此外,它们还可能让人倾向于增加复杂性,而实际上更简单的设置就足够了。

我们建议开发者从直接使用 LLM API 开始:许多模式只需几行代码即可实现。如果您确实使用框架,请确保您了解底层代码。对底层机制的错误假设是客户常见的错误来源。

请参阅我们的食谱来了解一些示例实现。

构建块、工作流和Agent

在本节中,我们将探讨在生产环境中常见的代理系统模式。我们将从基础构建块——增强型 LLM 开始,逐步增加复杂性,从简单的组合工作流到自主代理。

构建模块:增强型LLM(The augmented LLM)

代理系统的基本构建模块是 LLM,并通过检索、工具和记忆等功能进行增强。我们当前的模型可以主动使用这些功能——生成自己的搜索查询、选择合适的工具并确定要保留的信息。


我们建议重点关注实现的两个关键方面:根据您的具体用例定制这些功能,并确保它们为您的 LLM 提供简单易用且文档齐全的界面。虽然实现这些增强功能的方法有很多,但其中一种方法是通过我们最近发布的模型上下文协议,它允许开发人员通过简单的客户端实现与不断增长的第三方工具生态系统集成。

对于本文的其余部分,我们假设每个 LLM 调用都可以访问这些增强功能。

工作流程:提示链接(Prompt chaining)

提示链将任务分解为一系列步骤,其中每个 LLM 调用都会处理前一个步骤的输出。您可以在任何中间步骤上添加程序化检查(参见下图中的“门”),以确保流程仍在正常进行。

何时使用此工作流程:此工作流程非常适合任务可以轻松清晰地分解为固定子任务的情况。其主要目标是通过简化每次 LLM 调用,以降低延迟并提高准确率。

提示链有用的示例:

  • 生成营销文案,然后将其翻译成不同的语言。
  • 撰写文档大纲,检查大纲是否符合某些标准,然后根据大纲撰写文档。

工作流程:并行化(Parallelization)

LLM 有时可以同时处理一项任务,并以编程方式聚合其输出。这种工作流程(并行化)体现在两个关键变化中:

  • 分段:将任务分解为并行运行的独立子任务。
  • 投票:多次运行相同的任务以获得不同的输出。

    何时使用此工作流程:当拆分后的子任务可以并行化以提高速度,或者需要多个视角或尝试以获得更高置信度的结果时,并行化非常有效。对于涉及多个考量的复杂任务,当每个考量都由单独的 LLM 调用处理时,LLM 通常表现更好,从而能够专注于每个特定方面。

并行化有用的示例:

  • 切片:
    实现防护机制,其中一个模型实例处理用户查询,而另一个模型实例则筛选不适当的内容或请求。这通常比使用同一个 LLM 调用同时处理防护机制和核心响应效果更好。
    自动评估 LLM 性能,其中每次 LLM 调用都会评估模型在给定提示上性能的不同方面。
  • 投票:
    审查一段代码是否存在漏洞,如果发现问题,几个不同的提示会审查并标记代码。
    评估给定的内容是否不适当,使用多个提示评估不同的方面或要求不同的投票阈值来平衡误报和误报。

工作流程:路由(Routing)

路由会对输入进行分类,并将其定向到专门的后续任务。此工作流程允许分离关注点,并构建更专业的提示。如果没有此工作流程,针对一种输入进行优化可能会损害其他输入的性能。

何时使用此工作流程:路由非常适合复杂任务,其中存在不同的类别,最好分别处理,并且可以通过 LLM 或更传统的分类模型/算法准确处理分类。

路由有用的示例:

  • 将不同类型的客户服务查询(一般问题、退款请求、技术支持)引导到不同的下游流程、提示和工具中。
  • 将简单/常见问题路由到较小的模型(如 Claude 3.5 Haiku),将困难/不寻常的问题路由到功能更强大的模型(如 Claude 3.5 Sonnet),以优化成本和速度。

工作流程:评估器-优化器(Evaluator-optimizer)

在评估器-优化器工作流中,一个 LLM 调用生成响应,而另一个调用在循环中提供评估和反馈。

何时使用此工作流程:当我们拥有清晰的评估标准,并且迭代改进能够提供可衡量的价值时,此工作流程尤其有效。良好契合的两个标志是:首先,当人类清晰地表达反馈时,LLM 的答案可以得到显著的改进;其次,LLM 能够提供这样的反馈。这类似于人类作家在撰写一篇精良文档时可能经历的迭代写作过程。

评估器-优化器有用的示例:

  • 文学翻译中存在一些细微差别,翻译人员(LLM)最初可能无法捕捉到,但评估人员(LLM)可以提供有用的批评。
  • 复杂的搜索任务需要多轮搜索和分析才能收集全面的信息,评估人员将决定是否需要进一步搜索。

工作流程:Orchestrator-workers

在协调器-工作者工作流中,中央 LLM 动态分解任务,将其委托给工作者 LLM,并综合其结果。

何时使用此工作流程:此工作流程非常适合无法预测所需子任务的复杂任务(例如,在编码过程中,需要更改的文件数量以及每个文件的更改性质可能取决于任务本身)。虽然它在拓扑结构上与并行化类似,但其与并行化的关键区别在于灵活性——子任务并非预先定义,而是由编排器根据具体输入确定。

Orchestrator-workers 有用的示例:

  • 每次对多个文件进行复杂更改的编码产品。
  • 搜索任务涉及从多个来源收集和分析信息以获取可能相关的信息。

代理商(Agent)

随着 LLM 在关键能力(理解复杂输入、进行推理和规划、可靠地使用工具以及从错误中恢复)方面的日趋成熟,代理正在投入生产。代理可以通过人类用户的命令或与人类用户的互动讨论开始工作。一旦任务明确,代理就会独立规划和操作,并可能返回给人类以获取更多信息或判断。在执行过程中,代理必须从每一步(例如工具调用结果或代码执行)的环境中获取“基本事实”以评估其进度。然后,代理可以在检查点或遇到阻碍时暂停以等待人类的反馈。任务通常在完成后终止,但通常也会包含停止条件(例如最大迭代次数)以保持控制。

代理可以处理复杂的任务,但它们的实现通常很简单。它们通常只是基于环境反馈循环使用工具的LLM。因此,清晰周到地设计工具集及其文档至关重要。我们将在附录2(“快速设计你的工具”)中详细阐述工具开发的最佳实践。


何时使用代理:代理可用于解决开放式问题,这类问题难以甚至无法预测所需的步数,并且无法硬编码固定路径。LLM 可能会运行多轮,您必须对其决策有一定程度的信任。代理的自主性使其成为在可信环境中扩展任务的理想选择。

代理的自主性意味着更高的成本,以及出现复合错误的可能性。我们建议在沙盒环境中进行广泛的测试,并采取适当的防护措施。

代理有用的示例:

以下示例来自我们自己的实现:

  • 一个编码代理,用于解决SWE-bench 任务,该任务涉及根据任务描述对许多文件进行编辑;
    我们的“计算机使用”参考实现,其中 Claude 使用计算机来完成任务。

相关文章:

Agent 的7 中设计模式

这里写自定义目录标题 建立有效的Agent什么是Agent?何时(以及何时不使用)使用代理何时以及如何使用框架构建块、工作流和Agent构建模块:增强型LLM(The augmented LLM)工作流程:提示链接(Prompt chaining)工作流程&…...

OpenGAN:基于开放数据生成的开放集识别

简介 简介:这次学习的OpenGAN主要学习一个思路,跳出传统GAN对于判断真假的识别到判断是已知种类还是未知种类。重点内容不在于代码而是思路,会简要给出一个设计的代码。 论文题目:OpenGAN: Open-Set Recognition via Open Data …...

【node】Express创建服务器

Express是基于Node.js平台,快速、开放、极简的Web开发框架。基于http的express是专门用来创建web服务器的,可以极大的提高开发效率。 Express的创建的服务器 1 web网站服务器 专门对外提供web网页资源的服务器 2 Api接口服务器 专门对外提供Api接口的服…...

使用 OpenCV 实现哈哈镜效果

在计算机视觉和图像处理领域,OpenCV 提供了非常强大的图像几何变换能力,不仅可以用于纠正图像,还能制造各种“有趣”的视觉效果。今天,我们就来实现一个经典的“哈哈镜”效果,让图像像在游乐园里一样被拉伸、压缩、扭曲…...

DeepSeek-R1-0528 模型最新发布:编程推理能力跃升

2025年5月28日,深度求索(DeepSeek)通过Hugging Face平台悄然发布推理模型DeepSeek-R1-0528 Hugging Face Deepseek-R1-0528模型地址。尽管官方称其为"minor update",但社区实测显示,该版本在编程能力、复杂推…...

git仓库服务gogs详解

Gogs(Go Git Service)是一个使用 Go 编写的自助 Git 服务,旨在提供一个轻量级、易部署、高效的 Git 代码托管平台。它类似于 GitHub、GitLab,但更轻量,非常适合私有化部署、小型团队和嵌入式环境。下面是对 Gogs 的详细…...

PaddleNLP 的文本分类项目

以下是一个基于 PaddleNLP 的文本分类项目,按照标准工程结构组织,并包含测试数据集和完整流程。这个示例使用ERNIE模型处理IMDB电影评论情感分析任务。 项目工程结构 ernie_sentiment_analysis/ ├── data/ # 数据集目录 │ ├─…...

git 一台电脑一个git账户,对应多个仓库ssh

生成ssh # 为账户A生成SSH密钥 ssh-keygen -t rsa -b 4096 -C "your_email_for_account_Aexample.com" -f ~/.ssh/id_ed25519 # 为账户B生成SSH密钥 ssh-keygen -t rsa -b 4096 -C "your_email_for_account_Bexample.com" -f ~/.ssh/id_rsa_yswq进入文件…...

node-DeepResearch开源ai程序用于深入调查查询,继续搜索、阅读网页、推理,直到找到答案

​一、软件介绍 文末提供程序和源码下载 node-DeepResearch开源ai程序用于深入调查查询,继续搜索、阅读网页、推理,直到找到答案。 重要提示 与 OpenAI/Gemini/Perfasciity 的“深度研究”不同,我们只专注于通过迭代过程找到正确的答案 。我…...

Asp.Net Core 托管服务

文章目录 前言一、说明二、使用步骤1.创建托管服务方式一:继承 BackgroundService方式二:直接实现 IHostedService 2.注册托管服务3.处理作用域服务4.使用定时器(System.Threading.Timer)5.结合 Quartz.NET 实现复杂调度 三、. 注…...

Dockerfile 编写经验:优化大小与效率

文章目录 Dockerfile 通用的技巧总结1. 使用多阶段构建2. 最小化层数3. 彻底清理4. 选择合适的基镜像5. 仅安装必要的依赖6. 利用构建缓存 常见陷阱总结 Dockerfile 通用的技巧总结 1. 使用多阶段构建 利用多阶段构建分离构建和运行时环境,仅将必要的产物&#xff…...

JMeter 是什么

JMeter 是一款由 Apache 基金会开发的 开源性能测试工具,主要用于对 Web 应用、API、数据库、消息队列等系统进行 压力测试、负载测试和功能测试。它通过模拟大量用户并发操作,帮助开发者评估系统的性能、稳定性和扩展能力。以下是其核心特性和使用详解&…...

压测服务器和线上环境的区别

在进行服务器压测时,测试环境与线上环境的差异会直接影响测试结果的可靠性。以下是两者的关键区别及注意事项: ​1. 压测服务器的常见类型​ ​本地开发机​:低配虚拟机(如4核8GB),仅用于功能验证&#xf…...

C#、C++、Java、Python 选择哪个好

选择哪种语言取决于具体需求:若关注性能和底层控制选C、若开发企业级应用选Java、若偏好快速开发和丰富生态选Python、若构建Windows生态应用选C#。 以Python为例,它因语法简洁、开发效率高、应用广泛而在AI、数据分析、Web开发等领域大放异彩。根据TIOB…...

OpenGL Chan视频学习-8 How I Deal with Shaders in OpenGL

bilibili视频链接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站: docs.gl 说明: 1.之后就不再整理具体函数了,网站直接翻译会更直观也…...

机器学习课程设计报告 —— 基于口红数据集的情感分析

目录 一、课程设计目的 二、数据预处理及分析 2.1 数据预处理 2.2 数据分析 三、特征选择 3.1 特征选择的重要性 3.2 如何进行特征选择 3.3 特征选择的依据 3.4 数据集的划分 四、模型训练与模型评估 4.1 所有算法模型不调参 4.2 K-近邻分类模型 4.3 GaussianNB模…...

Windows安装Docker部署dify,接入阿里云api-key进行rag测试

一、安装docker 1.1 傻瓜式安装docker Get Docker | Docker Docs Docker原理(图解秒懂史上最全)-CSDN博客 官网选择好windows的安装包下载,傻瓜式安装。如果出现下面的报错,说明主机没有安装WSL 1.2 解决办法 安装 WSL | Mic…...

Dify中 SYSTEM, USER, ASSISTANT 的关系、职责与使用方法

在Dify这类对话式AI应用构建平台中,SYSTEM, USER, ASSISTANT 这三种消息类型共同定义了与大型语言模型(LLM)交互的结构和上下文。它们的关系可以理解为: SYSTEM: 扮演着“导演”或“场景设定者”的角色。USER: 扮演着“提问者”或“任务发起者”的角色。ASSISTANT: 扮演着“…...

斗地主游戏出牌逻辑用Python如何实现

在Python中实现斗地主的出牌逻辑需要结合游戏规则与数据结构设计,以下是核心实现思路和代码示例: 一、基础数据结构设计 1. 扑克牌表示 用类或字典表示每张牌的花色和点数,例如: class Card: def __init__(self, suit, rank): sel…...

ST-GCN

1.bash 安装git 在目录下右键使用git bash打开 需要安装wgetbash download_model.sh,下载.sh文件 wget: command not found,Windows系统使用git命令 下载预训练权重_sh文件下载-CSDN博客 bash tools/get_models.sh 生成了三个.pt文件...

【ArcGIS Pro草履虫大师】空间地图系列

地图系列是根据单个布局来构建的页面集合。 正常情况下,一个布局只能导出一个页面,通过地图系列则可以通过不同的视图、动态元素,构建并导出多个页面。 地图系列发展自ArcMap的【数据驱动页面】功能。 ArcGIS Pro中有3个地图系列&#xff…...

1. 数据结构基本概念 (1)

本文部分ppt、视频截图来自:[青岛大学-王卓老师的个人空间-王卓老师个人主页-哔哩哔哩视频] 1. 数据结构基本概念 1.1 研究内容 数据结构是一门研究非数值计算的程序设计中计算机操作队形以及他们之间关系和操作的核心课程,学习的主要内容如下&#x…...

海思3519V200 上基于 Qt 的 OpenCV 和 MySql 配置开发

海思3519V200是一款高性能嵌入式处理器,广泛应用于智能安防、工业控制等领域。本文将详细介绍如何在海思3519V200 平台上基于 Qt 配置 OpenCV 和 MySql,以满足嵌入式开发中的多样需求。 一、开发环境搭建 (一)硬件环境 准备海思3519V200开发板一台,并确保其能够正常启动…...

php 设计模式详解

简介 PHP 设计模式是对软件开发中常见问题的可复用解决方案,通过标准化的结构提升代码的可维护性、扩展性和复用性。 创建型模式(对象创建) 关注对象的创建过程,解决 “如何灵活、安全地生成对象” 的问题。 单例模式&#xf…...

函数抓取图片microsoft excel与wps的区别

microsoft excel 写出index函数 找到图片所在的位置 INDEX(员工数据库!$H:$H,MATCH(Sheet1!$B$3,员工数据库!$A:$A,0))将index函数定义为名称 插入截图 插入-屏幕截图-屏幕剪辑 选中给截图插入定义的公式 WPS 直接写公式抓取...

openpi π₀ 项目部署运行逻辑(三)——策略推理服务器 serve_policy.py

π₀ 主控脚本都在 scripts 中: 其中,serve_policy.py 是 openpi 中的策略推理服务端脚本,作用为:启动一个 WebSocket 服务器,加载预训练策略模型,等待外部请求(如来自 main.py 的控制程序&…...

WEB3—— 简易NFT铸造平台(ERC-721)-入门项目推荐

3. 简易NFT铸造平台(ERC-721) 目标:用户可以免费铸造一个 NFT,展示在前端页面。 内容: 编写 ERC-721 合约,每个地址可铸造一个 NFT。 提供 API: POST /mint:铸造 NFT(调…...

基于vue框架的独居老人上门护理小程序的设计r322q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,护理人员,服务预约,服务评价,服务类别,护理项目,请假记录 开题报告内容 基于Vue框架的独居老人上门护理小程序的设计开题报告 一、研究背景与意义 (一)研究背景 随着社会老龄化的加剧,独居老…...

Android 15 控制亮屏灭屏接口实现

Android 15 控制亮屏灭屏接口实现 在 Android 系统开发中,控制设备的亮屏和灭屏是一个常见需求,尤其是在一些特定场景下,如智能家居控制、定时任务等。本文将详细介绍如何在 Android 15 中实现系统级别的亮屏和灭屏控制。 系统修改方案 为了实现更可靠的亮屏和灭屏控制,…...

【前端】Hexo一键生成目录插件推荐_放入Hexo博客

效果 使用 安装 npm install hexo-auto-toc插件会自动对<article>包含下的所有内容进行解析&#xff0c;自动生成目录。如果你的文章页面结构中内容没被<article>包裹&#xff0c;需要自行添加它&#xff08;即blog文件夹下的index.html&#xff09;查看效果 hex…...