Type something to search...
构建动态多代理工作流:利用 LangChain 和 LangGraph 实现人工智能协作

构建动态多代理工作流:利用 LangChain 和 LangGraph 实现人工智能协作

本文利用 LangChain 和 LangGraph 创建一个简单的多智能体系统。智能体协同工作以完成任务。第一个智能体生成一系列随机数字,第二个智能体将这些数字乘以 10。每个智能体使用 OpenAI 的 GPT-4o API 来执行这些任务。

本文遵循基于工作流的架构,智能体根据分配的任务进行交互。在这篇文章中,我们将逐步分析脚本的每个部分以及它如何为整体流程做出贡献。

前提条件

在开始代码之前,请确保您已安装以下内容:

  • Python 3.7+
  • OpenAI API 访问(您需要一个 API 密钥)
  • 已安装 LangChain 和 LangGraph 库。您可以通过 pip 安装它们:
pip install langchain langgraph

设置环境

在脚本中,您必须将您的 OpenAI API 密钥设置为环境变量。这确保了代理可以与 GPT-4 模型进行交互。您可以在终端中设置 API 密钥:

import os
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"

创建 AI 代理

函数 create_agent 负责使用 LangChain 的 ChatPromptTemplate 设置代理。每个代理都通过系统消息进行初始化,该消息指定了它将执行的任务。其工作原理如下:

def create_agent(llm, system_message: str):
    """Create an agent."""
    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "You are a helpful AI assistant, collaborating with other assistants. "
                "Work on the assigned task and provide useful outputs. "
                "Prefix your response with FINAL ANSWER if you have completed your task."
                " Here is the task: {system_message}",
            ),
            MessagesPlaceholder(variable_name="messages"),
        ]
    )
    prompt = prompt.partial(system_message=system_message)
    return prompt | llm

系统消息解释了代理的角色及其应如何行为。例如,一个代理被指示生成随机数字,另一个则被要求对其进行乘法运算。

代理状态

为了跟踪代理之间交换的消息,脚本使用 TypedDict 定义了代理状态的结构。这有助于管理消息并识别哪个代理发送了最后一条消息:

class AgentState(TypedDict):
    messages: Sequence[BaseMessage]
    sender: str

每个代理发送和接收消息,状态跟踪当前负责下一步操作的代理。

定义工作流程

工作流程是使用 LangGraph 的 StateGraph 实现的。在这里,代理作为工作流程中的节点添加,并且它们之间的转换是基于路由逻辑定义的。

路由函数帮助控制代理之间消息的流动:

def router(state):
    messages = state["messages"]
    last_message = messages[-1]
    if "FINAL ANSWER" in last_message.content:
        if state["sender"] == "Agent_1":
            return "Agent_2"
        return END
    return "continue"

工作流程定义了代理之间的交互方式以及控制从一个代理移动到另一个代理的条件。

将代理添加到工作流

代理作为工作流中的节点添加,使用 workflow.add_node。例如,Agent_1 负责生成随机数:

workflow.add_node("Agent_1", agent_1_node)
workflow.add_node("Agent_2", agent_2_node)

根据路由逻辑添加条件边,以便在一个代理与另一个代理之间移动流程。

主要执行

脚本的主要部分负责初始化工作流并根据用户的初始输入执行它。输入消息指示系统生成随机数并将其乘以 10:

if __name__ == "__main__":
    initial_state = {
        "messages": [
            HumanMessage(content="Generate 10 random numbers and multiply each by 10.")
        ],
        "sender": "Agent_1",
    }

    events = graph.stream(initial_state, {"recursion_limit": 150})
    for event in events:
        print(event)
        print("----")

在这里,工作流通过初始消息执行,系统通过每个代理流式传输事件。递归限制确保工作流不会无限运行。

输出

结论

这个 Python 脚本演示了如何使用 LangChain 和 LangGraph 构建一个简单的多代理工作流。该过程涉及定义代理、设置其状态,并在它们之间路由消息以实现特定任务。该架构可以扩展到更复杂的工作流,多个代理可以协作处理各种任务。

感谢您访问这个博客。敬请期待更多内容!

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多