学习使用LangGraph x GPT-Researcher构建一个多智能体架构的AI自主研究助理

原文:学习使用LangGraph x GPT-Researcher构建一个多智能体架构的AI自主研究助理 - 百度智能云千帆社区

本文为大家剖析一个通过多智能体协作来完成的AI研究助理 ,可以用来帮助进行各种综合的在线研究任务并输出报告。该应用基于LangGraph 以及开源的GPT-Researcher项目而构建,我们将为大家介绍与剖析这个应用,你可以在此基础上做简单改造(如修改分析数据源、提示词等),以适应自身需要。

业务场景

通常,如果需要从头开始一个主题(比如"生成式人工智能中的伦理偏见与公平性")的深入研究,我们最期望的是能够快速的获取多个来源的值得信赖的信息,这可能需要在多个网站之间不断点击与浏览,通过一系列检索、聚合、细化、整理等工作来完成任务。当然,现在你可以借助大模型,但是简单的模型输出或者RAG(检索增强生成)会面临这样的问题:

  • 大模型训练的信息过时,容易产生幻觉
  • 受限于上下文限制,不太适合输出长篇研究报告
  • 网络搜索获得的参考资源不足,导致不全面与偏见
  • RAG系统更适合回答问题而不是编写长篇报告

所以期望有一个设计合理的AI智能体,能够自主的完成这样的研究任务:

  • 对输入的研究主题进行细分,生成研究提纲与子课题
  • 对子课题来获取相关的参考信息(本地或网络)
  • 对获取的信息整理、汇总、分析,得出研究结论或报告
  • 对报告进行自我反省与审核,并提出问题与指出不足
  • 根据审核结果修订研究报告,并能获得人类反馈
  • 结合研究的中间成果,输出最终的全面研究报告

架构设计

随着AI Agent理论与框架的演进,**多智能体系统(Multi-Agent System)**以其更灵活的架构,以及更接近人类社会组织与分工形式的设计而获得广泛关注。

多智能体系统相对单智能体展现出了一些独有的特点与优势:

  • 通过多个相互独立但协作的智能体来完成复杂任务,每个智能体拥有不同的视角或能力,可以更全面地理解和处理复杂问题
  • 任务可以被分解并分配给不同的智能体,并行处理后再综合结果。能够加速任务完成,并提高系统的整体效率和准确性
  • 可以根据任务需求动态地调整各智能体的角色与职责,更好地适应变化的环境,通过调整智能体之间的互动模式,应对不同的挑战

多智能体更适用于 **需要多角度、多角色参与,需要分工协作、任务分解的场景与复杂任务。**这个项目中设计的多智能体研究助理架构如下:

图中展示出涉及的角色(智能体)包括:

  • Researcher:研究员。针对研究主题采集网络资源,做自主研究
  • Editor:编辑。负责初期规划研究大纲和整体结构
  • Reviewer:审阅。根据设定的标准对研究结果进行检查验证
  • Revisor:修订。根据审阅结果对研究结果进行修订
  • Writer:撰写。根据研究输出撰写最终报告内容
  • Publisher:发布。负责用不同的格式发布最终研究报告

除了智能体以外,也支持人类(Human)角色参与到流程,并在适当的时机给出反馈。这在多智能体系统中也很常见,通常用于审核或给出额外任务指令。

这里的基本工作流程为:

  1. 根据给定的研究主题,参考互联网资源进行初步研究
  1. 根据初步研究结果制定报告提纲(子课题)
  1. 对每个子课题做深入研究、审阅与修改,直到满意为止
  1. 汇总子课题的研究结果撰写最终报告,并输出多格式文档er q

基于LangGraph的实现

LangGraph是大模型应用开发框架LangChain的扩展包。LangGraph通过把一个Single-Agent或Multi-Agent系统的工作流用Graph(图结构)来设计与表示,从而能够支持最复杂的任务节点与关系,以支持 构建更强大、能支持循环流的Agent应用。

如果对LangGraph不熟悉,请参考以下两篇:

彻底搞懂LangGraph:构建强大的Multi-Agent多智能体应用的LangChain新利器

彻底搞懂LangGraph:构建一个可自我纠正的增强知识库RAG应用

【Graph设计】

这里对上面的AI研究助理设计Graph图如下:

【State设计】

LangGraph中需要定义的State对象是用来保存在各个节点之间传递的必需信息,这样每个节点可以访问这个统一的数据对象实现数据共享。这个项目中的State的结构设计如下:

State中的信息分成研究任务相关(比如任务内容、子课题、参考数据、人类反馈等)与输出报告相关(标题、简介、内容等)两个部分。

【基于LangGraph的主流程】

现在,假设已经准备好所有的Agent及其行为(比如研究、审核等),就可以根据上面的Graph图开发Workflow。步骤是:

  • 创建多个agent
  • 创建主workflow
  • 增加workflow中的节点(agent及其动作)
  • 增加workflow中的边(节点之间的关系)

注意到这里有个条件边(conditional_edge),用来根据人类的不同反馈决定下一步的动作(继续还是重新做初步研究)。

【并行子流程:子课题研究】

在规划完任务研究提纲后,需要对提纲中的每个子课题进行深入研究。这可以通过并行的方式启动多个子研究任务来完成,以提升速度与效率 。为了能够实现并行,需要设计并开发一个独立的子Workflow,且其运行时不会相互影响,也不会影响到主流程。这个子Workflow创建如下:

需要注意的是为了让每个子任务运行时具有独立的状态,必须设计一个用于子Workflow的State(即代码中的DraftState)对象,用来保存子任务运行过程中的子课题、草稿内容、审查结果、修订说明等。

【Agent设计】

在这个多智能体系统中,AI的职责被设计与分工到不同的Agent,因此单个Agent的功能其实是比较简单的,而且这里除了browser与researcher这两个Agent(这两个借助了现成的GPT-Researcher库),不需要借助外部的Tools,只需要借助大模型提示来完成即可。以上面的planner这个agent的实现为例,其动作提示词如下(翻译成中文):

而对于"人类"这个特殊的角色,无需借助大模型,简单的获得人类反馈信息即可,并保存到State对象即可:

Plain Text

收起

复制代码

async def review_plan(self, research_state: dict):

layout = research_state.get("sections")

user_feedback = None

user_feedback = input(f"Any feedback on this plan? {layout}? If not, please reply with 'no'.\n>> ")

if user_feedback and "no" in user_feedback.lower():

user_feedback = None

return {"human_feedback": user_feedback}

其他的Agent可以参考项目的详细代码,这里不再做一一介绍。

最后,在完成Agent与Workflow的创建后,就可以运行已经创建好的Workflow,输入任务信息即可启动一个自主运行的AI研究助理,等待最终输出即可(中间需要给出人类的确认反馈)。

Plain Text

收起

复制代码

...

#创建主workflow

research_team = init_research_team()

chain = research_team.compile()

result = await chain.ainvoke({"task": "研究任务"})

以上介绍了一个基于LangGraph与GPT-Researcher项目构建的多智能体AI研究助理,用来根据输入的任务自主的借助互联网进行规划、研究、反思、修订并最终输出研究报告。这个项目很好地演示了多智能体系统的应用场景,以及LangGraph与GPT-Researcher项目的应用。有兴趣的朋友可以参考源项目做进一步探索:

https://github.com/assafelovic/gpt-researcher/tree/master/multi_agents

相关推荐
我是瓦力15 分钟前
PointNet++改进策略 :模块改进 | EdgeConv | DGCNN, 动态图卷积在3d任务上应用
人工智能·深度学习·计算机视觉·3d
咔咔学姐kk29 分钟前
2024最新版,人大赵鑫老师《大语言模型》新书pdf分享
数据库·人工智能·语言模型·自然语言处理·pdf·知识图谱·产品经理
z千鑫37 分钟前
【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!
人工智能·gpt·agent·ai编程·工作流·ai助手·ai工具
AIBox36539 分钟前
GPT撰写开题报告教程——课题确定及文献调研
人工智能·chatgpt
AIBigModel42 分钟前
关于GPT5训练失败的思考
人工智能·知识图谱
绎岚科技1 小时前
深度学习自编码器 - 随机编码器和解码器篇
人工智能·深度学习·算法·机器学习
吃什么芹菜卷1 小时前
2024.9最新:CUDA安装,pytorch库安装
人工智能·pytorch·笔记·python·深度学习
ymchuangke1 小时前
评价类——熵权法(Entropy Weight Method, EWM),完全客观评价
人工智能·python·算法·机器学习·数学建模
嵌入式杂谈1 小时前
人工智能在C/C++中的应用:图像处理与机器学习
c语言·c++·人工智能
十启树2 小时前
用Qt 对接‌百度语音识别接口
人工智能·qt·百度·语音识别