You are currently viewing LLM代理实战:使用LangGraph和CrewAI自动化复杂任务

LLM代理实战:使用LangGraph和CrewAI自动化复杂任务

您是否曾感觉您的AI工具过于被动,仅仅等待指令?想象一下,如果它们能主动分解并解决复杂问题,甚至通过LLM代理实现协同工作,那将是怎样的场景!这正是LLM代理所带来的变革,它们正在重塑我们实现AI自动化的方式,并以全新的视角帮助我们构建AI构想。本文将深入探讨LLM代理的定义、工作原理,以及如何利用卓越的开源框架来构建您自己的智能代理。

LLM代理的现状

LLM代理是当前AI领域最令人兴奋的发展之一。它们已经开始帮助自动化实际任务,但仍在不断发展中。那么我们今天处于什么阶段呢?

从聊天机器人到自主代理

像GPT-4、Claude、Gemini和LLaMA这样的大型语言模型(LLM)已经从简单的聊天机器人演变为出乎意料强大的推理引擎。它们已经从回答琐碎问题和生成文章发展到执行复杂推理、遵循多步指令以及与网络搜索和代码解释器等工具交互。

但问题在于:这些模型是反应式的。它们等待输入并给出输出。它们不会在任务之间保留记忆、提前计划或自主追求目标。这就是LLM代理发挥作用的地方——它们通过增加结构、记忆和自主性来弥补这一差距。

代理今天能做什么?

目前,LLM代理已被用于:

  • 总结电子邮件或文档
  • 规划日常日程
  • 运行DevOps脚本
  • 搜索API或工具以获取答案
  • 在小型“团队”中协作完成复杂任务

但它们还不完美。代理仍然可能:

  • 陷入循环
  • 误解目标
  • 需要详细的提示和防护措施

这是因为这项技术仍处于早期阶段。框架正在快速改进,但可靠性和记忆仍然是正在进行的工作。所以在您进行实验时请记住这一点。

为什么现在是学习的最佳时机

事实是:我们还处于早期。但并非太早

现在是开始尝试代理的绝佳时机:

  • 工具已经足够成熟,可以构建实际项目
  • 社区正在迅速壮大
  • 您不需要成为AI专家,只需熟悉Python即可

LLM代理是什么,为什么它们很重要?

在我们深入探索代理的激动人心的世界之前,让我们快速聊聊一些基础知识。

LLM是什么?

LLM,即大型语言模型,本质上是一种AI,它从大量的互联网文本中学习——想想书籍、文章、代码等等。您可以把它想象成一个超级智能的自动补全引擎。但它做的远不止完成您的句子。它还可以:

  • 回答棘手的问题
  • 总结长篇文章或文档
  • 编写代码、电子邮件或创意故事
  • 即时翻译语言
  • 甚至解决逻辑难题并进行引人入胜的对话

您很可能听说过ChatGPT,它由OpenAI的GPT模型提供支持。您可能会遇到的其他流行LLM包括Claude(来自Anthropic)、LLaMA(Meta出品)、Mistral和Gemini(来自Google)。

这些模型通过简单地根据上下文预测句子中的下一个单词来工作。虽然这听起来很简单,但当在数十亿个单词上进行训练时,LLM能够展现出令人惊讶的智能行为,理解您的指令,遵循循序渐进的推理,并在您能想象到的几乎任何主题上产生连贯的响应。

那么,LLM代理是什么?

虽然LLM非常强大,但它们通常只反应——它们只在您提问时才响应。而LLM代理则主动

LLM代理可以:

  • 将大型、复杂的任务分解成更小、易于管理的步骤
  • 做出明智的决策并找出下一步该做什么
  • 使用“工具”如网络搜索、计算器,甚至其他应用程序
  • 努力实现目标,即使需要多步或多次尝试
  • 与其他代理协作以实现共同目标

简而言之,LLM代理可以思考、规划、行动和适应。

将LLM代理想象成您高效的新助理:您给它一个目标,它会自行找出如何实现它。

为什么这很重要?

这种从仅仅响应到积极追求目标的转变开启了大量激动人心的可能性:

  • 自动化枯燥的IT或DevOps任务
  • 从原始数据生成详细报告
  • 协助您进行多步研究项目
  • 每天阅读您的电子邮件并突出显示关键信息
  • 运行您的内部工具以采取实际行动

与旧的、基于规则的机器人不同,LLM代理能够推理、反思并从其尝试中学习。这使得它们更适合处理那些混乱、需要灵活性并依赖于理解上下文的实际任务。

开源代理框架的兴起

不久前,如果您想构建一个能够自主行动的AI系统,这意味着要编写大量的自定义代码,费力地管理内存,并尝试将数十个组件拼凑起来。这是一项复杂、微妙且高度专业化的工作。

但您猜怎么着?情况不再是这样了。

2024年,一股出色的开源框架浪潮席卷而来。这些工具极大地简化了构建强大LLM代理的过程,而您无需每次都重新发明轮子。

流行的开源代理框架

框架描述维护者
LangGraph基于图的代理状态和内存框架LangChain
CrewAI“基于角色的多代理协作引擎”社区 (CrewAI)
AutoGen可定制的多代理聊天编排Microsoft
AgentVerse用于代理模拟和测试的模块化框架开源项目

这些工具能做什么?

这些框架为您提供了现成的构建块来处理创建代理的棘手部分:

  • 规划——让代理决定下一步行动
  • 工具使用——轻松将代理连接到文件系统、网络浏览器、API或数据库等
  • 记忆——存储和检索过去的信息或中间结果以获取长期上下文
  • 多代理协作——设置代理团队以共同实现目标

为什么要使用框架而不是从头开始构建?

虽然您可以从头开始构建自定义代理,但使用框架将为您节省大量时间和精力。开源代理库包含:

  • 内置对LLM编排的支持
  • 经过验证的任务规划、跟踪进度和获取反馈的模式
  • 轻松集成流行的模型,如OpenAI,甚至您本地运行的模型
  • 从单个有用的代理发展到整个代理团队的灵活性

基本上,这些框架让您可以专注于代理应该做什么,而不是陷入如何构建所有内部工作机制的泥潭。此外,选择开源意味着您可以从社区贡献中受益,了解其工作方式的透明度,以及根据您的具体需求进行调整的自由,而不会被锁定在单一供应商。

代理设计的核心概念

要真正理解LLM代理如何运作,将它们视为不断循环观察、推理和行动的目标驱动系统会有所帮助。这种持续的循环使它们能够处理超越简单问答的任务,进入真正的自动化、工具使用和即时适应。

代理循环

大多数LLM代理都基于一种名为代理循环的思维模型运行,这是一个重复的逐步循环,直到任务完成。它通常是这样工作的:

  • 感知: 代理首先注意到其环境中的某些事物或接收到新信息。这可能是您的提示、一条数据或系统当前的状态。
  • 规划: 根据其感知到的信息和总体目标,代理决定下一步该做什么。它可能会将任务分解成更小的子目标,或者找出最适合该任务的工具。
  • 行动: 代理随后采取行动。这可能意味着运行一个函数、调用一个API、搜索网页、与数据库交互,甚至向另一个代理寻求帮助。
  • 反思: 行动之后,代理会审视结果:它成功了吗?结果有用吗?它是否应该尝试不同的方法?基于此,它会更新其计划并继续前进,直到任务完成。

这个循环使得代理如此动态。它允许它们处理不断变化的任务,从部分结果中学习,并纠正其路线——这些品质对于构建真正有用的AI助手至关重要。

代理的关键组件

为了有效地完成工作,代理围绕着几个关键部分构建:

  • 工具是代理与真实(或数字)世界交互的方式。这些可以是任何东西,从搜索引擎、代码执行环境、文件阅读器或API客户端,到简单的计算器或命令行脚本。
  • 记忆让代理记住它们在不同步骤中已经完成或看到过什么。这可能包括您之前说过的话、临时结果或关键决策。一些框架提供短期记忆(仅针对一个会话),而另一些则支持可以跨多个会话或目标的长期记忆。
  • 环境指代理运行的外部数据或系统上下文——想想API、文档、数据库、文件或传感器输入。代理拥有的信息和对其环境的访问权限越多,它就能采取越有意义的行动。
  • 目标是代理的最终目标:它试图实现什么。目标应该具体明确——例如,“生成每日日程”、“总结此文档”或“从电子邮件中提取任务”。

多代理协作

对于更高级的系统,您甚至可以拥有多个代理协同工作以实现共同目标。每个代理都可以被赋予一个特定的角色,突出其专业性——就像一个团队中的人一样。

例如:

  • 一个研究员代理可能负责收集信息。
  • 一个编码员代理可以编写Python脚本或自动化例程。
  • 一个审查员代理可以检查结果并确保一切都符合标准。

这些代理可以相互交流,共享信息,甚至就决策进行辩论或投票。这种团队合作允许AI系统处理更大、更复杂的任务,同时保持组织性和模块化。

项目:从电子邮件自动化您的日常日程

我们正在自动化什么

想想您典型的早晨例程:

  • 您打开收件箱。
  • 您快速浏览一堆电子邮件。
  • 您尝试发现会议、任务和重要的提醒。
  • 然后,您手动编写待办事项列表或将事项添加到日历中。

让我们使用LLM代理来使这个过程变得轻松。我们的代理将:

  • 阅读您的电子邮件列表
  • 提取时间敏感的项目,如会议或截止日期
  • 将所有内容总结成一个整洁、干净的每日日程

第1步:安装所需的工具

要开始,您需要三个主要工具:Python、VSCode和OpenAI API密钥。

1. 安装Python 3.9或更高版本

从官方网站获取最新版本的Python 3.9+:https://www.python.org/downloads/

安装完成后,在您的终端中运行python --version进行双重检查。

此命令只是要求您的系统报告当前安装的Python版本。您需要看到Python 3.9.x或更高版本以确保与我们项目的兼容性。

2. 安装VSCode(可选但推荐)

VSCode是一个出色的、用户友好的代码编辑器,与Python完美配合。您可以在这里下载它:https://code.visualstudio.com/

3. 获取您的OpenAI API密钥

如果你的openAI没有办法开通plus,请前往联系页面联系我们帮助开通。

前往:https://platform.openai.com

登录或创建一个新账户。导航到您的API密钥页面。点击“创建新秘密密钥”,并确保将其安全地复制到某个地方以备后用。

4. 安装Python库

打开您的终端或命令提示符并安装这些基本包:

此命令使用pip(Python的包管理器)下载并安装我们代理所需的三个关键库:

  • langgraph:我们将用于构建代理工作流的核心框架。
  • langchain:一个用于处理大型语言模型的基础库,LangGraph建立在此之上。
  • openai:连接到OpenAI强大AI模型的官方Python库。

如果您想尝试多代理设置(我们将在第5步中介绍),请同时安装CrewAI:

此命令安装CrewAI,一个专门的框架,可以轻松协调多个AI代理作为一个团队协同工作。

5. 设置您的OpenAI API密钥

您需要确保您的Python代码能够找到并使用您的OpenAI API密钥。这通常通过将其设置为环境变量来完成。

在macOS/Linux上,在您的终端中运行此命令(将“your-api-key”替换为您的实际密钥):

此命令设置一个名为OPENAI_API_KEY的环境变量。环境变量是一种安全的方式,允许应用程序(例如您的Python脚本)访问敏感信息,而无需将其直接硬编码到代码中。

在Windows上(使用命令提示符),执行此操作:

这是Windows等效命令,用于设置OPENAI_API_KEY环境变量。

现在,您的Python代码将准备好与OpenAI模型进行通信!

第2步:定义任务

我们在此部分开头简要讨论了这一点。但重申一下,这就是我们希望代理执行的操作:

  • 扫描会议、事件和重要任务。
  • 快速将其记录在笔记本或应用程序中。
  • 为您的一天制定一个粗略的心理计划。

这个例程需要时间和精力。所以让一个代理为我们做这件事会非常有帮助。

第3步:使用LangGraph构建工作流

LangGraph是什么?

LangGraph是一个很酷的框架,它通过“基于图”的工作流来帮助您构建代理,有点像绘制流程图。它由LangChain提供支持,让您可以更好地控制代理流程中每个步骤的精确展开方式。

此图中的每个“节点”代表一个决策点或一个函数,它:

  • 接收一些输入(其当前“状态”)。
  • 执行一些推理或采取行动(通常涉及LLM及其工具)。
  • 返回更新的输出(一个新“状态”)。

您绘制这些节点之间的连接,然后LangGraph会像一个智能的自动化状态机一样执行它。

为什么要使用LangGraph?

  • 您可以控制精确的执行顺序。
  • 它非常适合构建具有多步甚至分支到不同路径的工作流。
  • 它与基于云的模型(如OpenAI)和您本地运行的模型都配合得很好。

好的——现在让我们编写代码。

1. 模拟电子邮件输入

在实际应用程序中,您的代理可能会连接到Gmail或Outlook以获取您的实际电子邮件。但是,对于此示例,我们将硬编码一些示例消息以保持简单:

这个多行Python字符串emails充当我们真实电子邮件内容的替代品。我们提供了一个简单的、结构化的电子邮件主题列表,以演示代理将如何处理文本。

2. 定义代理逻辑

现在,我们将告诉OpenAI的GPT模型如何处理此电子邮件文本并将其转换为摘要。

以下是正在发生的事情:

  • 导入:我们引入了必要的组件:
    • ChatOpenAI用于连接LLM,
    • StateGraphEND来自langgraph.graph,用于构建我们的代理工作流,
    • TypedDictAnnotatedList来自typing,用于类型检查和结构,
    • operator(尽管在此代码片段中未使用,但它可以帮助进行比较或逻辑)。
  • AgentState:这个TypedDict定义了我们的代理将处理的数据的形状。它包括:
    • emails:原始输入消息。
    • result:最终输出(每日摘要)。
  • llm = ChatOpenAI(…):初始化语言模型。我们使用GPT-4o,temperature=0以确保一致、可预测的输出,非常适合结构化摘要任务。
  • calendar_summary_agent(state: AgentState):此函数是我们代理的“大脑”。它:
    • 接收当前状态,其中包括电子邮件列表。
    • 从该状态中提取电子邮件。
    • 构建一个提示,告诉模型使用项目符号生成简洁的每日日程摘要,优先处理时间敏感的项目。
    • 使用llm.invoke(prompt).content将此提示发送到模型,该方法将LLM的响应作为纯文本返回。
    • 返回一个新的AgentState字典,其中包含:
      • result:生成的摘要,
      • emails:保留以防下游需要。
3. 构建并运行图

现在,让我们使用LangGraph来规划我们单代理任务的流程,然后运行它。

以下是正在发生的事情:

  • builder = StateGraph(AgentState): 我们正在初始化一个StateGraph对象。通过传递AgentState,我们告诉LangGraph其内部状态的预期数据结构。
  • builder.add_node(“calendar”, calendar_summary_agent): 此行向我们的图中添加了一个名为“calendar”的“节点”。我们将其链接到calendar_summary_agent函数,这意味着当此节点处于活动状态时,该函数将被执行。
  • builder.set_entry_point(“calendar”): 这将“calendar”设置为我们工作流的第一步。当我们启动图时,执行将从这里开始。
  • builder.set_finish_point(“calendar”): 这告诉LangGraph,一旦“calendar”节点完成其工作,整个图过程就完成了。
  • graph = builder.compile(): 此命令获取我们定义的图蓝图并将其“编译”成一个可执行的工作流。
  • result = graph.invoke({“emails”: emails}): 奇迹发生的地方!我们告诉我们的图开始运行。我们给它一个包含我们电子邮件数据的初始状态。然后,图将通过其节点处理此数据,直到它达到一个结束点,并返回最终状态。
  • print(result[“result”]): 最后,我们从结果(我们图的最终状态)中获取摘要的日程安排并将其打印到控制台。

示例输出

太棒了!您刚刚构建了一个AI代理,它可以阅读您的电子邮件并生成您的日常日程。是不是很酷?这是一个简单而强大的示例,展示了LLM代理只需几行代码即可完成的工作。

使用CrewAI进行多代理协作

CrewAI是什么?

CrewAI是一个令人兴奋的开源框架,它让您能够构建代理团队,这些团队像真实世界的项目团队一样无缝协作!CrewAI设置中的每个代理:

  • 拥有特定的专业角色。
  • 可以与队友交流和共享信息。
  • 协同工作以实现共同目标。

当您的任务对于一个代理来说太大或太复杂时,或者当将其分解为专业部分使其更清晰、更高效时,这种多代理方法会非常有用。

电子邮件摘要任务的示例角色

让我们设想一下由一个小型代理团队处理的电子邮件摘要任务:

代理名称角色职责
Extractor电子邮件扫描器“从电子邮件中查找会议、提醒和任务”
Prioritizer日程优化器按紧急程度和时间对项目进行排序
Formatter输出生成器“编写一份干净、精美的每日议程”

CrewAI示例代码

以下是正在发生的事情:

  • 导入: 我们引入了CrewAI中的关键类:Agent、Crew、Task和Process。我们还导入了ChatOpenAI用于我们的语言模型和os用于处理环境变量。
  • 代理定义(extractor, prioritizer, formatter):
    • 每个变量都创建一个Agent实例。代理由其角色(它做什么)、它试图实现的特定目标和背景(一种个性或专业知识,有助于LLM更好地理解其目的)定义。
    • verbose=True对于调试非常有用,因为它会使代理在工作时打印出它们的“想法”。
    • allow_delegation=False表示这些代理不会将其分配的任务委托给其他代理(尽管对于更复杂的委托场景,可以将其设置为True)。
    • llm=llm将每个代理连接到我们的OpenAI语言模型。
  • 模拟电子邮件: 我们在此示例中重用相同的示例电子邮件数据。
  • 任务定义(extract_task, prioritize_task, format_task):
    • 每个Task都定义了代理需要执行的特定工作。
    • description清楚地告诉代理任务涉及什么。
    • agent将此任务分配给我们的一个已定义代理(例如,extract_taskextractor)。
    • context=[...]是CrewAI协作的关键部分。它告诉任务将其前一个任务的输出用作其输入。例如,prioritize_task将其extract_task的输出作为其上下文。
    • expected_output让代理了解其结果应该是什么样子,有助于指导LLM。
  • crew = Crew(…):
    • 这是我们组建团队的地方!我们创建一个Crew实例,为它提供我们的代理和任务列表。
    • process=Process.sequential告诉组按照任务列表中定义的顺序依次执行任务。CrewAI还支持更高级的流程,如层次结构流程。
    • verbose=2将显示组内部工作和通信的非常详细的日志。
  • result = crew.kickoff(): 此命令正式启动整个多代理工作流。代理将开始协作,传递信息,并按顺序完成其分配的任务。
  • print(result): 最后,整个组协作努力的合并输出将打印到您的控制台。

CrewAI巧妙地处理了代理之间的所有通信,找出谁需要在何时处理什么,并将输出从一个代理平滑地传递到下一个——这就像拥有一条迷你AI流水线!

执行期间实际发生了什么?

那么,无论您使用的是LangGraph还是CrewAI,当代理运行时,幕后究竟发生了什么?让我们分解一下执行过程:

  • 系统获得一个输入状态(例如,您的电子邮件)。
  • 第一个代理或图节点读取此输入并使用大型语言模型(LLM)来理解它。
  • 根据其理解,代理决定一个动作,例如提取关键事件或调用特定工具。
  • 如果需要,代理可能会调用工具(如网络搜索或文件阅读器)以获取更多上下文或执行外部操作。
  • 该动作的结果随后传递给团队中的下一个代理(如果是多代理设置)或直接返回给您。

执行会一直进行,直到:

  • 任务完全完成。
  • 所有代理都完成了其分配的角色。
  • 达到停止条件或工作流中的指定“END”点。

将其视为一个超级智能的工作流引擎,其中每个步骤都涉及推理、决策和记住之前的交互。

LLM代理安全吗?关于安全和隐私需要了解什么

尽管LLM代理很酷,但它们提出了一个重要问题:您真的可以信任AI来运行工作流的部分内容或与您的数据交互吗? 这取决于情况。如果您使用的是OpenAI或Anthropic等服务,您的数据在传输过程中是加密的,并且(截至目前)不会用于训练。

但某些数据可能仍会暂时记录以防止滥用。这通常适用于测试和个人项目,但如果您正在处理敏感的业务信息、客户数据或任何隐私数据,您需要小心。

使用匿名输入,避免暴露完整数据集,如果完全控制对您很重要,请考虑使用LLaMA、Mistra、Deepseek、Qwen等开源模型在本地运行代理。

您还可以为代理设置明确的边界,以便它们不会越界。可以将其视为新实习生的入职培训:您不会在第一天就给他们访问所有内容的权限。

只向代理提供它们需要的工具和文件,记录它们的行为,并在让它们进行实际更改之前始终审查结果。

随着这项技术的发展,更多安全功能正在出现,例如更好的沙盒、内存限制和基于角色的访问。但目前,明智的做法是将您的代理视为强大的助手,仍然需要一些人工监督。

故障排除与提示

有时,代理可能会有点古怪!以下是一些您可能会遇到的常见问题以及如何解决它们:

问题建议修复
代理似乎永远循环设置最大迭代次数或定义更清晰的停止点。
输出过于冗长或被截断使用更具体的提示(例如,“仅用项目符号回应”)。
输入过长或被截断将大量内容分解成更小的块并单独进行总结。可以看我的这篇文章:1文教会你使用GPT同时分析处理多个文档
代理运行缓慢尝试使用更快的LLM模型,如gpt-3.5,或考虑运行本地模型。

一个方便的提示:您还可以在代理函数内部添加print()语句或日志消息,以查看每个阶段发生的情况并调试状态转换。

探索更多日常自动化

一旦您构建了一个基于代理的任务,您会发现将该模式应用于其他自动化任务变得异常容易。以下是一些激发您创造力的一些很酷的想法:

任务类型自动化示例
DevOps助手“阅读系统日志,检测潜在问题,并提出解决方案。”
财务跟踪器阅读银行对账单或CSV文件并总结您的消费习惯/预算。
会议组织者会议结束后,自动提取行动项目并分配负责人。
收件箱清理器“自动标记、存档和删除不紧急的电子邮件。”
笔记摘要器将您的日常笔记转换为整齐格式的待办事项列表或摘要。
链接检查器从文档中提取URL并自动测试它们是否仍然有效。
简历格式化器根据职位描述评估简历并自动格式化。

这些都可以使用我们讨论过的相同原则和框架来构建,无论是LangGraph还是CrewAI。

代理技术的未来

LLM代理正在以闪电般的速度发展,下一波创新已经到来:

  • 更智能的记忆系统:期望代理拥有更好的长期记忆,使它们能够在长时间内学习并记住过去的对话和行动。
  • 多模态代理:代理将不再仅仅处理文本!它们将能够处理和理解图像、音频和视频,使其更加通用。
  • 高级规划框架:ReAct、Toolformer和AutoGen等技术正在不断提高代理的推理、规划能力,并减少那些烦人的“幻觉”。
  • 边缘部署:想象一下代理完全离线运行在您的本地计算机或设备上,使用像LLaMA、Mistra、Deepseek、Qwen这样的轻量级模型本地部署。

在不久的将来,您将看到代理无缝集成到:

  • 您的DevOps管道
  • 大型企业工作流
  • 日常生产力工具
  • 移动应用程序和智能设备
  • 游戏、模拟和教育平台

最终总结

好的,让我们快速回顾一下您刚刚学到和完成的所有酷炫内容:

  • 您已经对LLM代理是什么以及它们为何如此强大有了扎实的理解。
  • 您已经了解了像LangGraph和CrewAI这样的开源框架如何使构建代理变得更容易。
  • 您已经使用LangGraph构建了一个真正的LLM代理,以自动化一项常见的日常任务:总结您的收件箱!
  • 您已经通过CrewAI探索了多代理协作的世界,了解了AI团队如何协同工作。
  • 您已经学会了如何利用这些原则并将其扩展以自动化无数其他任务。

所以,下次当您发现自己陷入重复性工作时,只需问自己:“嘿,我能为此构建一个代理吗?”答案很可能是肯定的!

相关文章推荐:无NSFW版本AI换脸Facefusion Linux部署