LLM架构实战:用 LangChain 和 LangGraph 打造多智能体研究助手(含代码)
仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
点击“蓝字”关注我们
大语言模型(LLM)的应用越来越广泛,从智能客服到内容创作,从数据分析到研究辅助,LLM正逐渐改变着人们获取信息和解决问题的方式。今天,我们就来深入探讨大语言模型的架构,尤其是单智能体和多智能体架构,并手把手教大家用LangChain和LangGraph搭建一个多智能体研究助手。
回顾一下,大语言模型智能体主要由几大关键部分构成。首先是大语言模型本身,赋予它特定的任务和角色后,它便能在解决问题的过程中进行推理。就好比给一个智慧大脑设定了思考方向,让它能有针对性地“思考”。
其次是记忆组件,它能在多次交互和会话中捕捉并存储上下文信息和反馈。短期记忆就像即时通讯记录,保存着最近的对话内容,指导智能体下一步行动;长期记忆则如同知识宝库,随着时间积累知识,让智能体更具个性化,表现也更出色。
工具组件也不可或缺,它使智能体能够调用外部服务,比如API接口、网页搜索功能、邮件系统,以及其他计算资源,来执行各种动作、完成任务。比如智能体可以通过调用天气API,为用户查询天气信息。另外,检索功能可以获取各类数据,无论是最新的市场趋势、公司政策更新,还是产品库存情况,确保智能体使用的信息准确无误,它有时也可归为工具的一部分。
在搭建LLM架构时,我们面临两种主要模式的选择:单智能体设计和多智能体设计。这两种模式各有千秋,适用于不同的场景。
单智能体LLM架构中,一个大语言模型就是整个系统的“大脑”。它在需要时调用各种工具(如API、数据库、外部服务),并将处理结果整合为最终输出。打个比方,单智能体就像一个全能的独行侠,独自完成所有任务。
这种架构的优点很明显。首先,它复杂度低,易于维护。因为架构简单,没有复杂的工作流程和协调层,开发、部署和管理的成本都比较低。其次,不存在智能体之间的协调问题,只有一个大语言模型在工作,无需构建和调试多个智能体之间的通信协议。最后,计算成本可能更低,运行一个强大的模型,在工作量可预测且在单个智能体能力范围内时,总体成本有时比运行多个小模型更低。
但单智能体架构也有其局限性。遇到复杂或动态的任务时,它可能就力不从心了。当工作流程分支众多,或者需要根据情况灵活决策时,单个大语言模型可能难以给出理想的结果。而且,对于需要多种专业知识协作,或者子任务之间需要紧密交接的任务,单智能体往往难以胜任。另外,如果集成的工具过多,智能体可能会选错API,或者调用格式错误,导致出错或浪费资源。
(二)多智能体LLM架构
多智能体LLM架构则由多个智能体组成,每个智能体都由大语言模型驱动,并有自己的记忆和工具,系统中还可能存在所有智能体都能访问的共享内存。这些智能体相互协作,处理单个大语言模型难以单独应对的复杂任务。这就好比组建了一支专业团队,每个成员各司其职,共同完成复杂项目。
多智能体架构的优势在于能更好地处理复杂和动态的任务。通过给不同的子任务分配专门的智能体,系统可以更高效地解决复杂问题。而且,多个智能体可以并行处理任务,减少响应时间,提高系统整体的吞吐量。此外,这种架构可以使用更小的、针对特定任务定制的模型,优化资源利用。
不过,多智能体架构也带来了新的挑战。系统复杂度增加,协调多个智能体给系统的设计和运行增添了许多复杂性。需要建立强大的交互管理机制,有效的通信协议至关重要,它能确保智能体之间和谐工作,准确共享信息。随着智能体数量的增加,对计算资源的需求也会上升,这可能会影响系统的可扩展性和总体成本。
设计多智能体系统时,有多种架构模式可供选择,每种模式都适用于不同的需求。
接力模式在多个智能体通过相互传递任务进行协作的应用场景中非常有效。在客户支持、任务管理和工作流程自动化等场景中,不同的步骤或职责可以由专门的智能体处理。想象一下客户支持场景,最初的智能体负责处理一般咨询,遇到复杂问题时,就将其转交给专业智能体,就像接力比赛一样,每个智能体在自己的“赛道”上发挥作用,确保工作流程顺利推进。
协同过滤模式在多个智能体协作给用户提供推荐的应用中表现出色。每个智能体凭借自己的专业领域知识,为推荐过程做出独特贡献。以股票市场推荐系统为例,行业专家智能体分析特定行业趋势,技术分析智能体研究价格模式和市场指标,基本面分析智能体评估财务报表和公司状况。这些智能体协同工作,就能为用户提供全面、综合的股票推荐。像MACRec框架,就是通过专门的智能体协同工作来增强推荐系统的效果。
四、助力开发的框架推荐
在构建LLM智能体时,有许多框架可以帮助我们更轻松地实现目标。
CrewAI是一个用于编排角色扮演AI智能体的框架,它采用基于角色的智能体设计,支持多智能体协作,拥有灵活的内存系统,还具备内置的错误处理功能。
Langchain是一个非常受欢迎的框架,它通过可组合性来构建基于LLM的应用。其架构模块化且可扩展,为各种LLM提供统一接口,还有预构建的智能体工具包,支持CSV、JSON和SQL智能体,能与Python和Pandas很好地集成,具备向量存储能力。
MicrosoftAutoGen是构建多智能体对话系统的框架,它采用多智能体架构,智能体可定制,支持代码执行,能灵活地让人类参与其中,具备先进的对话管理功能。
在人工智能领域,自动化研究任务能大大提高效率。接下来,我们就用LangChain、LangGraph和OpenAI的GPT模型,亲手打造一个多智能体研究助手。
这个研究助手遵循三步工作流程:
将复杂的研究问题拆解成一个个可处理的子问题。比如研究“人工智能在医疗领域的应用”,可能会分解出“人工智能在疾病诊断中的应用”“人工智能在医疗影像分析中的作用”等子问题。
针对每个子问题在arXiv上进行查询,收集相关的学术论文。arXiv是一个收集物理学、数学、计算机科学等领域论文的平台,能为我们提供丰富的研究资料。
将搜索到的结果整合起来,形成一份连贯的报告。
编写代码时,首先要导入必要的模块,并配置日志记录,以便监控工作流程的进展。通过logging模块设置日志级别、格式和时间格式,使用dotenv模块加载环境变量,为后续工作做好准备。
使用TypedDict定义ResearchState来管理工作流程的状态,包括主要问题、子问题、搜索结果、推理过程和最终报告。这就像是给研究助手设定了一个“任务清单”和“记录册”,让它清楚自己的工作内容和进展。
这个节点使用LLM将主要研究问题分解为子问题。它通过定义一个提示模板,向LLM发送请求,然后将LLM的结构化输出转换为Python列表形式的子问题。在这个过程中,记录每个步骤的时间和信息,方便后续调试和优化。
负责在arXiv上搜索每个子问题,并获取相关论文。它根据设定的查询条件和最大结果数进行搜索,将搜索结果整理成包含标题、摘要、作者、发表日期和链接等信息的字典列表,同时记录搜索时间和结果数量。
利用LLM将搜索结果和推理过程合成为一份全面的报告。它将搜索结果整理成特定格式的字符串,与推理过程一起作为提示发送给LLM,最后得到生成的报告内容,并记录合成时间和报告字数。
create_research_workflow函数使用LangGraph来设置整个工作流程。先初始化LLM以及各个节点类的实例,然后定义分解、搜索、合成三个函数,分别对应工作流程的三个步骤。在这些函数中,根据前一个状态更新当前状态,并记录推理过程。最后,通过StateGraph将这些节点和步骤连接起来,形成完整的工作流程,并编译使其可运行。
当我们让研究助手生成一份关于“大语言模型评估”的报告时,它给出了一份相当不错的成果。报告涵盖了大语言模型评估的多个方面,包括评估标准、人类评估方法、大语言模型作为评估者的角色、人类与大语言模型评估的优缺点、评估指标、评估方法对性能认知的影响、上下文的作用、伦理问题、现有框架和基准,以及反馈循环的建立。报告内容丰富,逻辑清晰,为我们深入了解大语言模型评估提供了有价值的参考。当然,我们还可以通过优化提示、添加更多工具或调整架构,让研究助手更强大。