吴恩达最近在他的公开课上说:我认为AI Agent工作流将在今年推动人工智能的巨大进步,甚至可能超过下一代基础模型。这是一个重要的趋势,我敦促所有从事人工智能工作的人关注它。加上上个月在他红杉AI峰会上分享的,实现Agent工作流的4种范式,可以看出吴恩达一直比较关注Agent的发展。
解释一下这4种范式
Reflection:反思,LLM审视自己的工作,找出改进的方法。
Tool Use:使用工具,LLM被赋予了一些工具,如网络搜索、代码执行或任何其他功能,以帮助它收集信息、采取行动或处理数据。
Planning:计划,LLM提出并执行一个多步骤计划来实现一个目标(例如,写一篇文章的提纲,然后进行在线研究,然后写一份草稿,等等)。
Multi-agent collaboration:多Agent协作,多个AI Agent协同工作,分解任务,讨论和辩论想法,提出比单个智能体更好的解决方案。
目的
本文我们拆解一下Github上的一个项目GPT-researcher(https://github.com/assafelovic/gpt-researcher),项目通过多个Agent的协作,基于用户输入的主题,上网搜索资料、分析和写作,最终输出几页PDF或者Markdown格式的研究报告。这个项目也是受到斯坦福大学的STORM研究论文的启发,感兴趣的可以参考https://arxiv.org/abs/2402.14207。
整体的执行流程涉及到了上面吴恩达说的4种范式,多Agent协作、Plan-and-Execute、使用工具(上网搜索资料)、反思。
多个Agent的协作是基于LangGraph实现的,LangGraph是LangChain的扩展包,这个后面再说,我也想吐吐槽LangGraph。
多Agent协作架构
项目有一个核心的模块gpt-researcher,实现的功能,根据用户给出的主题,让LLM选择一个合适的Agent。按主题生成计划,再根据计划生成多个Query的子查询。根据每个子查询,上网搜索资料并整理汇总,给出资料来源。最后根据所有子查询的输出,汇总并格式化成报告。这个是作者早期实现的功能,后面有机会再详细讲解,本文主要是介绍基于LangGraph的多Agent协作。
主要包括7个Agent,模拟一个研究团队协作:
Chief Editor :主编,监督研究过程并管理团队。这是使用LangGraph协调其他Agent的“主”Agent。
Researcher:研究人员,使用核心的模块gpt-researcher,对给定的主题进行深入研究。
Editor:编辑,负责规划研究大纲和结构。
Reviewer :评审员,根据一系列标准验证研究结果的正确性。
Revisor:校订员,根据评审员的反馈对研究结果进行校订。
Publisher :出版人,负责以PDF、WORD、MD各种格式发布最终报告。
流程图
主要流程:
用户给定任务Task,包括主题Query,最大分段数Max-sections,其他要求Guidelines等。
Chief Editor这个主Agent会接收Task,初始化流程执行器(Executor,LangGraph的流程),把任务给到Browser。
上图的Browser也是Researcher这个Agent,Researcher根据给定的研究任务浏览互联网进行初步研究。
Editor编辑,这个是个复杂Agent,根据初步研究规划报告大纲和结构,执行Plan-and-Execute。Editor编辑包含了一个LangGraph子流程。
对于每个大纲主题(并行),这是体现LangGraph优势的地方,能执行循环迭代的流程,Reviewer评审员和Revisor校订员:
Researcher研究人员负责调用gpt-researcher,对子主题进行深入研究并撰写草稿。 Reviewer评审员根据一系列标准验,就是上面用户给定的Task里的其他要求Guidelines,证草案的正确性并提供反馈。 Revisor校订员根据审查员的反馈,对草案进行校订,然后再给回Reviewer评审员,直到其满意为止,就是Reviewer评审员不再给出修改意见。
Publisher出版人将最终报告发布为多种格式,如PDF、Docx、Markdown等。
#pythonprompt = [{"role": "system","content": "You are an expert writer. Your goal is to revise drafts based on reviewer notes."}, {"role": "user","content": f"""Draft:\n{draft_report}" + "Reviewer's notes:\n{review}\n\nYou have been tasked by your reviewer with revising the following draft, which was written by a non-expert.If you decide to follow the reviewer's notes, please write a new draft and make sure to address all of the points they raised.Please keep all other aspects of the draft the same.You MUST return nothing but a JSON in the following format:{sample_revision_notes}"""}]"role": "system",
"content": "你是个专业作家。你的目标是根据审阅者笔记修改草稿。""role": "user",
"content": "你的审稿人委托你修改以下由非专家撰写的草案。
如果你决定遵循审稿人的笔记,请写一份新的草稿,并确保解决他们提出的所有问题。
请保持草案的所有其他方面不变。
你只能返回以下格式的JSON:"
Tavily:一家AI时代崛起的初创公司,提供Search和News相关的API接口,能实时返回对LLM比较友好的格式。我自己开发的时候用的也是它,整体效果还是非常不错,免费的调用次数只有1000次,跑这个项目一次就消耗6次了。 SerpApi:老牌的搜索API集成服务,连百度的API接口都有,就是收费有点贵。 DuckDuckGo:一个强调隐私的搜索引擎,不跟踪用户的搜索历史或浏览习惯。 BingSearch:微软公司推出的搜索引擎,可以在Azure云服务上开通使用,但返回结果还是比较传统的格式。 SearxNG:开源,可以自己部署,我试过后觉得效果比较一般,放弃了。但开源免费的诱惑力还是相当大的。
