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

Agent实战教程:LangGraph关于智能体的架构模式与核心概念

智能体架构

许多大型语言模型(LLM)应用在调用 LLM 之前或之后,都会遵循特定的控制流程。例如,检索增强生成(RAG)会检索与用户问题相关的文档,并将这些文档传递给 LLM,以便模型根据提供的文档上下文生成响应。

然而,有时我们不仅仅是硬编码一个固定的控制流程,而是希望 LLM 系统能够自主选择控制流程,以解决更复杂的问题。这便是“智能体”的定义之一:智能体是利用 LLM 来决定应用程序控制流程的系统。 LLM 可以通过多种方式控制应用程序的流程:

  • LLM 可以在两条潜在路径之间进行路由。
  • LLM 可以决定调用哪些工具。
  • LLM可以判断生成的答案是否足够,或者是否需要进一步工作。

因此,有许多不同类型的智能体架构,它们赋予 LLM 不同程度的控制能力。

智能体类型

路由器(Router)

路由器允许 LLM 从一组给定的选项中选择单个步骤。这种智能体架构的控制级别相对有限,因为LLM 通常专注于做出一个单一决策,并从有限的预定义选项中选择一个特定输出。路由器通常采用以下几种概念来实现这一功能:

结构化输出(Structured Output)

通过为 LLM 提供特定的格式或模式,要求其在响应中遵循,从而实现结构化输出。这类似于工具调用,但更具通用性。工具调用通常涉及选择和使用预定义函数,而结构化输出可用于任何类型的格式化响应。实现结构化输出的常见方法包括:

  1. 提示工程(Prompt Engineering): 通过系统提示(system prompt)指令 LLM 以特定格式响应。
  2. 输出解析器(Output Parsers): 使用后处理技术从 LLM 响应中提取结构化数据。
  3. 工具调用(Tool Calling): 利用某些 LLM 内置的工具调用能力来生成结构化输出。

结构化输出对于路由至关重要,因为它们确保 LLM 的决策可以被系统可靠地解释和执行。

工具调用智能体(Tool-calling Agent)

路由器允许 LLM 做出单一决策,而更复杂的智能体架构则通过两种关键方式扩展了 LLM 的控制能力:

  1. 多步骤决策(Multi-step decision making): LLM 可以连续做出系列决策,而不仅仅是一个。
  2. 工具访问(Tool access): LLM 可以选择并使用各种工具来完成任务。

ReAct 是一种流行的通用智能体架构,它结合了这些扩展,并整合了三个核心概念:

  1. 工具调用(Tool calling): 允许 LLM 根据需要选择和使用各种工具。
  2. 记忆(Memory): 使智能体能够保留并利用前一步骤的信息。
  3. **规划(Planning):**赋予 LLM 制定并遵循多步骤计划以实现目标的能力。

这种架构允许更复杂和灵活的智能体行为,超越了简单的路由,实现了多步骤的动态问题解决。与最初的 ReAct 论文不同,如今的智能体依赖于 LLM 的工具调用能力,并基于一系列消息进行操作。

在 LangGraph 中,你可以使用预构建的智能体来快速启动工具调用智能体。

工具调用(Tool Calling)

当您希望智能体与外部系统(例如 API)交互时,工具非常有用。外部系统通常需要特定的输入模式或载荷,而非自然语言。当我们将 API 绑定为工具时,模型就能了解所需的输入模式。模型会根据用户的自然语言输入选择调用工具,并返回符合工具所需模式的输出。

许多 LLM 提供商都支持工具调用。在 LangChain 中,工具调用接口很简单:您可以直接将任何 Python 函数 传递给 ChatModel.bind_tools(function)

工具

记忆(Memory)

记忆对于智能体至关重要,它使智能体能够在解决问题的多个步骤中保留和利用信息。记忆的作用范围不同:

  1. 短期记忆(Short-term memory): 允许智能体访问在序列早期步骤中获取的信息。
  2. 长期记忆(Long-term memory): 使智能体能够回忆起之前交互的信息,例如对话中的历史消息。

LangGraph 提供了对记忆实现方式的完全控制:

  • State 用户定义的模式,指定要保留的记忆的确切结构。
  • Checkpointer 一种机制,用于在会话中每一步存储状态,跨越不同的交互。
  • Store 一种机制,用于在不同会话中存储用户特定或应用程序级别的数据。

这种灵活的方法允许您根据特定的智能体架构需求定制记忆系统。有效的记忆管理增强了智能体保持上下文、从过去经验中学习以及随着时间做出更明智决策的能力。

规划(Planning)

在工具调用智能体中,LLM 会在一个循环中被反复调用。在每一步,智能体都会决定要调用哪些工具以及这些工具的输入应该是什么。然后执行这些工具,并将输出作为观察结果反馈给 LLM。当智能体判断它有足够的信息来解决用户请求,并且无需再调用任何工具时,循环终止。

自定义智能体架构

虽然路由器和工具调用智能体(如 ReAct)很常见,但定制智能体架构通常能针对特定任务带来更好的性能。LangGraph提供了几个强大的功能来构建定制的智能体系统:

人机协作(Human-in-the-loop)

人的参与可以显著提高智能体的可靠性,尤其是在处理敏感任务时。这可能包括:* 批准特定操作。

  • 提供反馈以更新智能体的状态。
  • 在复杂的决策过程中提供指导。

当完全自动化不可行或不可取时,人机协作模式至关重要。

###并行化(Parallelization)

并行处理对于高效的多智能体系统和复杂任务至关重要。LangGraph 通过其 Send API 支持并行化,从而实现:

  • 多个状态的并发处理。
    *Map-Reduce 类似操作的实现。
  • 高效处理独立的子任务。

子图(Subgraphs)

子图对于管理复杂的智能体架构至关重要,特别是在多智能体系统中。它们允许:* 为单个智能体进行独立的状体管理。

  • 智能体团队的层次化组织。
  • 智能体与主系统之间受控的通信。

子图通过状态模式中重叠的键与父图进行通信。这使得灵活的模块化智能体设计成为可能。

反思(Reflection)

反思机制可以通过以下方式显著提高智能体的可靠性:

  1. 评估任务完成度和正确性。2. 提供反馈以进行迭代改进。
  2. 实现自我纠正和学习。

虽然反思通常基于 LLM,但也可以使用确定性方法。例如,在编程任务中,编译错误可以作为反馈。

通过利用这些功能,LangGraph 能够创建复杂的、针对特定任务的智能体架构,这些架构能够处理复杂的工作流程、有效地协作并持续提升

原文文档:https://langchain-ai.github.io/langgraph/concepts/agentic_concepts/

http://www.dtcms.com/a/352096.html

相关文章:

  • MySQL表的管理
  • Matplotlib渲染性能提升10倍:底层原理与实战技巧
  • 具身智能常用【数据集】汇总篇
  • 三菱FX5U PLC访问字变量的某一位
  • 信长之野望 新生 威力加强版 送修改器 免安装中文版
  • 基于 MediaPipe + Three.js 的实时姿态可视化前端
  • clip等llm模型预研
  • vue3和react的异同点
  • nacos基础
  • 培训积分制:量化培训效果
  • Java多态深度解析:从原理到实战应用
  • 50个Qt 库
  • 计算机网络的发展演进历程
  • ubuntu20.04环境配置
  • Android之流式显示内容
  • IjkPlayer 播放 MP4 视频时快进导致进度回退的问题
  • 【LeetCode】动态规划——542.01 矩阵
  • GitHub Copilot Pro + 模型深度解析:Java 开发者场景适配指南
  • CSS 常见选择器
  • 【硬件-笔试面试题-62】硬件/电子工程师,笔试面试题(知识点:BUCK电源电路,输出纹波影响因素)
  • 代码架构升级方案
  • Docker中如何记录非交互式连接ssh用户操作的所有命令记录?
  • 2-5 倍性能提升,30% 成本降低,阿里云 SelectDB 存算分离架构助力波司登集团实现降本增效
  • docker compose小技巧
  • from中烟科技翼支付 面试题1
  • 红黑树下探玄机:C++ mapmultimap 的幕后之旅
  • deer-flow自定义DeepResearch流程实践经历
  • 《信息检索与论文写作》实验报告二 引文索引数据库检索
  • [pilot智驾系统] 纵向规划器(LongitudinalPlanner) | 模型预测控制(MPC)
  • jdk9安装步骤及下载(附小白详细教程)