LLM架构实战:用 LangChain 和 LangGraph 打造多智能体研究助手(含代码)

大语言模型(LLM)的应用越来越广泛,从智能客服到内容创作,从数据分析到研究辅助,LLM 正逐渐改变着人们获取信息和解决问题的方式。今天,我们就来深入探讨大语言模型的架构,尤其是单智能体和多智能体架构,并手把手教大家用 LangChain 和 LangGraph 搭建一个多智能体研究助手。

一、大语言模型智能体的组成部分

回顾一下,大语言模型智能体主要由几大关键部分构成。首先是大语言模型本身,赋予它特定的任务和角色后,它便能在解决问题的过程中进行推理。就好比给一个智慧大脑设定了思考方向,让它能有针对性地 “思考”。

其次是记忆组件,它能在多次交互和会话中捕捉并存储上下文信息和反馈。短期记忆就像即时通讯记录,保存着最近的对话内容,指导智能体下一步行动;长期记忆则如同知识宝库,随着时间积累知识,让智能体更具个性化,表现也更出色。

LLM架构实战:用 LangChain 和 LangGraph 打造多智能体研究助手(含代码)_第1张图片

工具组件也不可或缺,它使智能体能够调用外部服务,比如 API 接口、网页搜索功能、邮件系统,以及其他计算资源,来执行各种动作、完成任务。比如智能体可以通过调用天气 API,为用户查询天气信息。另外,检索功能可以获取各类数据,无论是最新的市场趋势、公司政策更新,还是产品库存情况,确保智能体使用的信息准确无误,它有时也可归为工具的一部分。

二、单智能体与多智能体 LLM 架构大揭秘

在搭建 LLM 架构时,我们面临两种主要模式的选择:单智能体设计和多智能体设计。这两种模式各有千秋,适用于不同的场景。

(一)单智能体 LLM 架构

单智能体 LLM 架构中,一个大语言模型就是整个系统的 “大脑”。它在需要时调用各种工具(如 API、数据库、外部服务),并将处理结果整合为最终输出。打个比方,单智能体就像一个全能的独行侠,独自完成所有任务。

这种架构的优点很明显。首先,它复杂度低,易于维护。因为架构简单,没有复杂的工作流程和协调层,开发、部署和管理的成本都比较低。其次,不存在智能体之间的协调问题,只有一个大语言模型在工作,无需构建和调试多个智能体之间的通信协议。最后,计算成本可能更低,运行一个强大的模型,在工作量可预测且在单个智能体能力范围内时,总体成本有时比运行多个小模型更低。

但单智能体架构也有其局限性。遇到复杂或动态的任务时,它可能就力不从心了。当工作流程分支众多,或者需要根据情况灵活决策时,单个大语言模型可能难以给出理想的结果。而且,对于需要多种专业知识协作,或者子任务之间需要紧密交接的任务,单智能体往往难以胜任。另外,如果集成的工具过多,智能体可能会选错 API,或者调用格式错误,导致出错或浪费资源。

(二)多智能体 LLM 架构

多智能体 LLM 架构则由多个智能体组成,每个智能体都由大语言模型驱动,并有自己的记忆和工具,系统中还可能存在所有智能体都能访问的共享内存。这些智能体相互协作,处理单个大语言模型难以单独应对的复杂任务。这就好比组建了一支专业团队,每个成员各司其职,共同完成复杂项目。

多智能体架构的优势在于能更好地处理复杂和动态的任务。通过给不同的子任务分配专门的智能体,系统可以更高效地解决复杂问题。而且,多个智能体可以并行处理任务,减少响应时间,提高系统整体的吞吐量。此外,这种架构可以使用更小的、针对特定任务定制的模型,优化资源利用。

不过,多智能体架构也带来了新的挑战。系统复杂度增加,协调多个智能体给系统的设计和运行增添了许多复杂性。需要建立强大的交互管理机制,有效的通信协议至关重要,它能确保智能体之间和谐工作,准确共享信息。随着智能体数量的增加,对计算资源的需求也会上升,这可能会影响系统的可扩展性和总体成本。

三、多智能体系统中的实用模式

设计多智能体系统时,有多种架构模式可供选择,每种模式都适用于不同的需求。

(一)接力模式

接力模式在多个智能体通过相互传递任务进行协作的应用场景中非常有效。在客户支持、任务管理和工作流程自动化等场景中,不同的步骤或职责可以由专门的智能体处理。想象一下客户支持场景,最初的智能体负责处理一般咨询,遇到复杂问题时,就将其转交给专业智能体,就像接力比赛一样,每个智能体在自己的 “赛道” 上发挥作用,确保工作流程顺利推进。

(二)协同过滤模式

协同过滤模式在多个智能体协作给用户提供推荐的应用中表现出色。每个智能体凭借自己的专业领域知识,为推荐过程做出独特贡献。以股票市场推荐系统为例,行业专家智能体分析特定行业趋势,技术分析智能体研究价格模式和市场指标,基本面分析智能体评估财务报表和公司状况。这些智能体协同工作,就能为用户提供全面、综合的股票推荐。像 MACRec 框架,就是通过专门的智能体协同工作来增强推荐系统的效果。

四、助力开发的框架推荐

在构建 LLM 智能体时,有许多框架可以帮助我们更轻松地实现目标。

CrewAI 是一个用于编排角色扮演 AI 智能体的框架,它采用基于角色的智能体设计,支持多智能体协作,拥有灵活的内存系统,还具备内置的错误处理功能。

Langchain 是一个非常受欢迎的框架,它通过可组合性来构建基于 LLM 的应用。其架构模块化且可扩展,为各种 LLM 提供统一接口,还有预构建的智能体工具包,支持 CSV、JSON 和 SQL 智能体,能与 Python 和 Pandas 很好地集成,具备向量存储能力。

Microsoft AutoGen 是构建多智能体对话系统的框架,它采用多智能体架构,智能体可定制,支持代码执行,能灵活地让人类参与其中,具备先进的对话管理功能。

五、实战:用 LangChain 和 LangGraph 打造研究助手

在人工智能领域,自动化研究任务能大大提高效率。接下来,我们就用 LangChain、LangGraph 和 OpenAI 的 GPT 模型,亲手打造一个多智能体研究助手。

(一)准备工作

在开始编写代码前,要确保安装了所需的软件包,这些包可以在 requirements.txt 文件中找到,包括 arxiv、langchain、openai、langgraph、python-dotenv、pydantic、langchain_community、langchain-openai。同时,要在.env 文件中设置好 OpenAI API 密钥,这样我们的程序才能调用 OpenAI 的强大模型。

(二)工作流程概览

这个研究助手遵循三步工作流程:

  1. 分解

    将复杂的研究问题拆解成一个个可处理的子问题。比如研究 “人工智能在医疗领域的应用”,可能会分解出 “人工智能在疾病诊断中的应用”“人工智能在医疗影像分析中的作用” 等子问题。

  2. 搜索

    :针对每个子问题在 arXiv 上进行查询,收集相关的学术论文。arXiv 是一个收集物理学、数学、计算机科学等领域论文的平台,能为我们提供丰富的研究资料。

  3. 合成

    将搜索到的结果整合起来,形成一份连贯的报告。

(三)代码解析

  1. 设置环境

    编写代码时,首先要导入必要的模块,并配置日志记录,以便监控工作流程的进展。通过 logging 模块设置日志级别、格式和时间格式,使用 dotenv 模块加载环境变量,为后续工作做好准备。

  2. 定义状态模式

    使用 TypedDict 定义 ResearchState 来管理工作流程的状态,包括主要问题、子问题、搜索结果、推理过程和最终报告。这就像是给研究助手设定了一个 “任务清单” 和 “记录册”,让它清楚自己的工作内容和进展。

  3. 创建节点类
    • 分解节点(DecompositionNode)

      这个节点使用 LLM 将主要研究问题分解为子问题。它通过定义一个提示模板,向 LLM 发送请求,然后将 LLM 的结构化输出转换为 Python 列表形式的子问题。在这个过程中,记录每个步骤的时间和信息,方便后续调试和优化。

    • Arxiv 搜索节点(ArxivSearchNode)

      负责在 arXiv 上搜索每个子问题,并获取相关论文。它根据设定的查询条件和最大结果数进行搜索,将搜索结果整理成包含标题、摘要、作者、发表日期和链接等信息的字典列表,同时记录搜索时间和结果数量。

    • 合成节点(SynthesisNode)

      利用 LLM 将搜索结果和推理过程合成为一份全面的报告。它将搜索结果整理成特定格式的字符串,与推理过程一起作为提示发送给 LLM,最后得到生成的报告内容,并记录合成时间和报告字数。

  4. 构建工作流程

    create_research_workflow 函数使用 LangGraph 来设置整个工作流程。先初始化 LLM 以及各个节点类的实例,然后定义分解、搜索、合成三个函数,分别对应工作流程的三个步骤。在这些函数中,根据前一个状态更新当前状态,并记录推理过程。最后,通过 StateGraph 将这些节点和步骤连接起来,形成完整的工作流程,并编译使其可运行。

(四)成果展示

当我们让研究助手生成一份关于 “大语言模型评估” 的报告时,它给出了一份相当不错的成果。报告涵盖了大语言模型评估的多个方面,包括评估标准、人类评估方法、大语言模型作为评估者的角色、人类与大语言模型评估的优缺点、评估指标、评估方法对性能认知的影响、上下文的作用、伦理问题、现有框架和基准,以及反馈循环的建立。报告内容丰富,逻辑清晰,为我们深入了解大语言模型评估提供了有价值的参考。当然,我们还可以通过优化提示、添加更多工具或调整架构,让研究助手更强大。

code:https://github.com/adimidania/medium-articles/tree/main/Building%20a%20Multi-Agent%20Research%20Assistant%20with%20LangChain%20and%20LangGraph

你可能感兴趣的:(大模型(LLM),Agent,LangChain,LangGraph,LLM,Agent,多智能体)