2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

基于LangGraph多智能体技术,搭建AI写作自动化系统

发布日期:2024-07-09 18:01:46 浏览次数: 5414
作者:AI科技论谈

微信搜一搜,关注“AI科技论谈”

使用LangGraph实现多智能体系统。

1 LangGraph概述

LangGraph是LangChain的增强版,专注于构建智能体及多智能体流程。其核心优势在于新增的循环流程构建功能以及内嵌的记忆机制,这些特性对于智能体的构建极为重要。

LangGraph为开发者提供了高度的控制能力,这在自定义智能体和流程的开发中极为关键。市面上绝大多数的智能体都是针对特定应用场景进行了定制。

LangGraph不仅赋予了开发者灵活定制智能体的能力,还提供了直观且易于操作的开发体验。

2 构建终极自主研究智能体

借助LangGraph的强大功能,我们能够通过集结具备专业技能的多个智能体,显著提高研究工作的深度与品质。每个智能体专注于其独特技能,这不仅能够优化任务分工,增强定制性,还为项目的扩展与规模化发展奠定了基础。

本示例展示了一个AI智能体团队如何通力合作,对特定主题进行全面研究,涵盖从策划到发布的全过程。在此过程中,会特别应用前沿的自主研究智能体——GPT Researcher。

2.1 研究智能体团队

研究团队由七个大型语言模型智能体组成:

  • 主编智能体 —— 负责监督研究过程并管理整个团队。这是使用LangGraph协调其他智能体的“主”智能体,充当LangGraph的主要接口。

  • GPT研究智能体 —— 一个专门进行特定主题深入研究的自主智能体。

  • 编辑智能体 —— 负责规划研究大纲和结构。

  • 审稿智能体 —— 根据一套标准验证研究结果的正确性。

  • 修订智能体 —— 根据审稿智能体的反馈修订研究结果。

  • 写作智能体 —— 负责汇编并撰写最终报告。

  • 出版智能体 —— 负责将最终报告以多种格式发布。

2.2 架构

如下图,自动化过程基于以下阶段:规划研究、数据收集与分析、审查与修订、编写报告,最后是出版:

更具体的流程如下:

  • 浏览器(gpt-researcher)——基于给定的研究任务,浏览互联网进行初步研究。这一步对于LLMs来说非常重要,以便根据最新和相关信息规划研究过程,而不是仅依赖于针对给定任务或主题的预训练数据。

  • 编辑——根据初步研究规划报告大纲和结构。编辑还负责触发基于计划大纲的并行研究任务。

  • 对于每个大纲主题(并行):

  • 研究员(gpt-researcher)——对子主题进行深入研究并撰写草稿。这个智能体利用GPT Researcher Python包,以优化、深入且符合事实的研究报告。

  • 审稿人——根据一套指导方针验证草稿的正确性,并向修订者提供反馈(如果有的话)。

  • 修订者——根据审稿人的反馈修订草稿,直到满意为止。

  • 作者——汇编并撰写最终报告,包括引言、结论和参考文献部分。

  • 出版商——将最终报告以多种格式(如PDF、Docx、Markdown等)发布。

我们不会深入所有代码,因为代码量很大,但会重点关注所发现的有价值或有趣部分进行分享。

2.3 定义图状态

在LangGraph中,状态管理采用一种结构化的方式,允许开发者定义一个GraphState对象,它能够包含整个应用程序的状态信息。这样,图中的每个节点都具备了修改状态的能力,可以根据交互过程中的上下文变化,实现动态的响应机制。

在每项技术设计的初期,需要确立整个应用程序的数据结构。针对本例,创建一个名为ResearchState的数据模型,将作为我们研究应用程序的核心数据架构。如下所示:

class ResearchState(TypedDict):
    task: dict
    initial_research: str
    sections: List[str]
    research_data: List[dict]
    # 报告布局
    title: str
    headers: dict
    date: str
    table_of_contents: str
    introduction: str
    conclusion: str
    sources: List[str]
    report: str

如上所见,状态被分为两个主要区域:研究任务和报告布局内容。当数据通过图中的智能体流通时,每个智能体将根据现有状态生成新数据,并更新它以便在图中的其他智能体进一步处理。

然后,使用以下方式初始化图:

from langgraph.graph import StateGraph
workflow = StateGraph(ResearchState)

2.4 使用LangGraph初始化图

如上所述,多智能体开发的一个伟大之处在于构建每个智能体具有专门化和限定范围的技能。以使用GPT Researcher Python包的Researcher智能体为例:

from gpt_researcher import GPTResearcher

class ResearchAgent:
    def __init__(self):
        pass

    async def research(self, query: str):
        # 初始化研究员
        researcher = GPTResearcher(parent_query=parent_query, query=query, report_type=research_report, config_path=None)
        # 对给定查询进行研究
        await researcher.conduct_research()
        # 编写报告
        report = await researcher.write_report()

        return report

如上所见,已经创建了Research智能体的一个实例。现在假设我们已经为团队中的每个智能体都做了同样的事情。在创建了所有智能体之后,将使用LangGraph初始化图:

def init_research_team(self):
    # 初始化智能体
    editor_agent = EditorAgent(self.task)
    research_agent = ResearchAgent()
    writer_agent = WriterAgent()
    publisher_agent = PublisherAgent(self.output_dir)
    
    # 定义一个Langchain StateGraph与ResearchState

    workflow = StateGraph(ResearchState)
    
    # 为每个智能体添加节点
    workflow.add_node("browser", research_agent.run_initial_research)
    workflow.add_node("planner", editor_agent.plan_research)
    workflow.add_node("researcher", editor_agent.run_parallel_research)
    workflow.add_node("writer", writer_agent.run)
    workflow.add_node("publisher", publisher_agent.run)
    
    workflow.add_edge('browser''planner')
    workflow.add_edge('planner''researcher')
    workflow.add_edge('researcher''writer')
    workflow.add_edge('writer''publisher')
    
    # 设置起始和结束节点
    workflow.set_entry_point("browser")
    workflow.add_edge('publisher', END)
    
    return workflow

如上所见,创建LangGraph图非常简单,主要由三个主要功能组成:add_node、add_edge和set_entry_point。通过这些主要功能,你可以首先向图中添加节点,连接边,并最终设置起始点。

重点检查:如果你一直按照代码和架构进行,会注意到在上面的初始化中缺少了Reviewer和Reviser智能体。让我们深入探讨!

2.5 图内嵌套图以实现状态化的并行处理

这个智能助手的一个亮点是其支持对每个研究任务进行并行处理,且每项任务都遵循一套预设的规范进行审查与修订。

在流程设计中,有效利用并行工作是提升效率的秘诀。然而,若所有智能体都向同一状态报告,如何协调它们的并行工作以避免竞争条件和数据不一致的问题呢?解决方案是构建一个子图,由主LangGraph实例触发,并为每次并行运行维护独立的状态,从而巧妙地解决了这一难题。

正如之前所做的,让我们定义LangGraph状态及其智能体。由于这个子图基本上是审查和修订研究草稿,我们将用草稿信息定义状态:

class DraftState(TypedDict):
    task: dict
    topic: str
    draft: dict
    review: str
    revision_notes: str

如DraftState中所见,我们主要关心讨论的主题,以及审稿人和修订笔记,因为它们相互沟通以完成子主题研究报告。为了创建循环条件,我们将利用LangGraph的最后一个重要部分,即条件边:

async def run_parallel_research(self, research_state: dict):
    workflow = StateGraph(DraftState)
    
    workflow.add_node("researcher", research_agent.run_depth_research)
    workflow.add_node("reviewer", reviewer_agent.run)
    workflow.add_node("reviser", reviser_agent.run)
    
    # 设置边 researcher->reviewer->reviser->reviewer...
    workflow.set_entry_point("researcher")
    workflow.add_edge('researcher''reviewer')
    workflow.add_edge('reviser''reviewer')
    workflow.add_conditional_edges('reviewer',
                                   (lambda draft: "accept" if draft['review'is None else "revise"),
                                   {"accept": END, "revise""reviser"})

通过定义条件边,如果审稿人有审稿笔记,图将指向修订者,或者循环将以最终草稿结束。如果你回到已经构建的主图,会看到这个并行工作是在由ChiefEditor智能体调用的名为“researcher”的节点下进行的。

2.6 运行研究助手

为了便于定制,助手使用给定的task.json文件运行:

{
  "query""Is AI in a hype cycle?",
  "max_sections"3,
  "publish_formats": {
    "markdown"true,
    "pdf"true,
    "docx"true
  },
  "follow_guidelines"false,
  "model""gpt-4-turbo",
  "guidelines": [
    "The report MUST be written in APA format",
    "Each sub section MUST include supporting sources using hyperlinks. If none exist, erase the sub section or rewrite it to be a part of the previous section",
    "The report MUST be written in spanish"
  ]
}

任务对象相当直观,但请注意,如果follow_guidelines为false,则会导致图忽略修订步骤和定义的准则。此外,max_sections字段定义了要研究的子标题数量。数量较少将生成较短的报告。

运行助手会生成最终研究报告,格式包括Markdown、PDF和Docx等。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅