成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于LangGraph多智能體技術(shù),搭建AI寫(xiě)作自動(dòng)化系統(tǒng)

發(fā)布于 2024-7-10 09:04
瀏覽
0收藏

1 LangGraph概述

LangGraph是LangChain的增強(qiáng)版,專(zhuān)注于構(gòu)建智能體及多智能體流程。其核心優(yōu)勢(shì)在于新增的循環(huán)流程構(gòu)建功能以及內(nèi)嵌的記憶機(jī)制,這些特性對(duì)于智能體的構(gòu)建極為重要。

LangGraph為開(kāi)發(fā)者提供了高度的控制能力,這在自定義智能體和流程的開(kāi)發(fā)中極為關(guān)鍵。市面上絕大多數(shù)的智能體都是針對(duì)特定應(yīng)用場(chǎng)景進(jìn)行了定制。

LangGraph不僅賦予了開(kāi)發(fā)者靈活定制智能體的能力,還提供了直觀(guān)且易于操作的開(kāi)發(fā)體驗(yàn)。

2 構(gòu)建終極自主研究智能體

借助LangGraph的強(qiáng)大功能,我們能夠通過(guò)集結(jié)具備專(zhuān)業(yè)技能的多個(gè)智能體,顯著提高研究工作的深度與品質(zhì)。每個(gè)智能體專(zhuān)注于其獨(dú)特技能,這不僅能夠優(yōu)化任務(wù)分工,增強(qiáng)定制性,還為項(xiàng)目的擴(kuò)展與規(guī)模化發(fā)展奠定了基礎(chǔ)。

本示例展示了一個(gè)AI智能體團(tuán)隊(duì)如何通力合作,對(duì)特定主題進(jìn)行全面研究,涵蓋從策劃到發(fā)布的全過(guò)程。在此過(guò)程中,會(huì)特別應(yīng)用前沿的自主研究智能體——GPT Researcher。

2.1 研究智能體團(tuán)隊(duì)

研究團(tuán)隊(duì)由七個(gè)大型語(yǔ)言模型智能體組成:

  • 主編智能體 —— 負(fù)責(zé)監(jiān)督研究過(guò)程并管理整個(gè)團(tuán)隊(duì)。這是使用LangGraph協(xié)調(diào)其他智能體的“主”智能體,充當(dāng)LangGraph的主要接口。
  • GPT研究智能體 —— 一個(gè)專(zhuān)門(mén)進(jìn)行特定主題深入研究的自主智能體。
  • 編輯智能體 —— 負(fù)責(zé)規(guī)劃研究大綱和結(jié)構(gòu)。
  • 審稿智能體 —— 根據(jù)一套標(biāo)準(zhǔn)驗(yàn)證研究結(jié)果的正確性。
  • 修訂智能體 —— 根據(jù)審稿智能體的反饋修訂研究結(jié)果。
  • 寫(xiě)作智能體 —— 負(fù)責(zé)匯編并撰寫(xiě)最終報(bào)告。
  • 出版智能體 —— 負(fù)責(zé)將最終報(bào)告以多種格式發(fā)布。

2.2 架構(gòu)

如下圖,自動(dòng)化過(guò)程基于以下階段:規(guī)劃研究、數(shù)據(jù)收集與分析、審查與修訂、編寫(xiě)報(bào)告,最后是出版:

基于LangGraph多智能體技術(shù),搭建AI寫(xiě)作自動(dòng)化系統(tǒng)-AI.x社區(qū)

更具體的流程如下:

  • 瀏覽器(gpt-researcher)——基于給定的研究任務(wù),瀏覽互聯(lián)網(wǎng)進(jìn)行初步研究。這一步對(duì)于LLMs來(lái)說(shuō)非常重要,以便根據(jù)最新和相關(guān)信息規(guī)劃研究過(guò)程,而不是僅依賴(lài)于針對(duì)給定任務(wù)或主題的預(yù)訓(xùn)練數(shù)據(jù)。
  • 編輯——根據(jù)初步研究規(guī)劃報(bào)告大綱和結(jié)構(gòu)。編輯還負(fù)責(zé)觸發(fā)基于計(jì)劃大綱的并行研究任務(wù)。
  • 對(duì)于每個(gè)大綱主題(并行):
  • 研究員(gpt-researcher)——對(duì)子主題進(jìn)行深入研究并撰寫(xiě)草稿。這個(gè)智能體利用GPT Researcher Python包,以?xún)?yōu)化、深入且符合事實(shí)的研究報(bào)告。
  • 審稿人——根據(jù)一套指導(dǎo)方針驗(yàn)證草稿的正確性,并向修訂者提供反饋(如果有的話(huà))。
  • 修訂者——根據(jù)審稿人的反饋修訂草稿,直到滿(mǎn)意為止。
  • 作者——匯編并撰寫(xiě)最終報(bào)告,包括引言、結(jié)論和參考文獻(xiàn)部分。
  • 出版商——將最終報(bào)告以多種格式(如PDF、Docx、Markdown等)發(fā)布。

我們不會(huì)深入所有代碼,因?yàn)榇a量很大,但會(huì)重點(diǎn)關(guān)注所發(fā)現(xiàn)的有價(jià)值或有趣部分進(jìn)行分享。

2.3 定義圖狀態(tài)

在LangGraph中,狀態(tài)管理采用一種結(jié)構(gòu)化的方式,允許開(kāi)發(fā)者定義一個(gè)GraphState對(duì)象,它能夠包含整個(gè)應(yīng)用程序的狀態(tài)信息。這樣,圖中的每個(gè)節(jié)點(diǎn)都具備了修改狀態(tài)的能力,可以根據(jù)交互過(guò)程中的上下文變化,實(shí)現(xiàn)動(dòng)態(tài)的響應(yīng)機(jī)制。

在每項(xiàng)技術(shù)設(shè)計(jì)的初期,需要確立整個(gè)應(yīng)用程序的數(shù)據(jù)結(jié)構(gòu)。針對(duì)本例,創(chuàng)建一個(gè)名為ResearchState的數(shù)據(jù)模型,將作為我們研究應(yīng)用程序的核心數(shù)據(jù)架構(gòu)。如下所示:

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

如上所見(jiàn),狀態(tài)被分為兩個(gè)主要區(qū)域:研究任務(wù)和報(bào)告布局內(nèi)容。當(dāng)數(shù)據(jù)通過(guò)圖中的智能體流通時(shí),每個(gè)智能體將根據(jù)現(xiàn)有狀態(tài)生成新數(shù)據(jù),并更新它以便在圖中的其他智能體進(jìn)一步處理。

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

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

2.4 使用LangGraph初始化圖

如上所述,多智能體開(kāi)發(fā)的一個(gè)偉大之處在于構(gòu)建每個(gè)智能體具有專(zhuān)門(mén)化和限定范圍的技能。以使用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)
        # 對(duì)給定查詢(xún)進(jìn)行研究
        await researcher.conduct_research()
        # 編寫(xiě)報(bào)告
        report = await researcher.write_report()

        return report

如上所見(jiàn),已經(jīng)創(chuàng)建了Research智能體的一個(gè)實(shí)例。現(xiàn)在假設(shè)我們已經(jīng)為團(tuán)隊(duì)中的每個(gè)智能體都做了同樣的事情。在創(chuàng)建了所有智能體之后,將使用LangGraph初始化圖:

def init_research_team(self):
    # 初始化智能體
    editor_agent = EditorAgent(self.task)
    research_agent = ResearchAgent()
    writer_agent = WriterAgent()
    publisher_agent = PublisherAgent(self.output_dir)
    
    # 定義一個(gè)Langchain StateGraph與ResearchState

    workflow = StateGraph(ResearchState)
    
    # 為每個(gè)智能體添加節(jié)點(diǎn)
    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')
    
    # 設(shè)置起始和結(jié)束節(jié)點(diǎn)
    workflow.set_entry_point("browser")
    workflow.add_edge('publisher', END)
    
    return workflow

如上所見(jiàn),創(chuàng)建LangGraph圖非常簡(jiǎn)單,主要由三個(gè)主要功能組成:add_node、add_edge和set_entry_point。通過(guò)這些主要功能,你可以首先向圖中添加節(jié)點(diǎn),連接邊,并最終設(shè)置起始點(diǎn)。

重點(diǎn)檢查:如果你一直按照代碼和架構(gòu)進(jìn)行,會(huì)注意到在上面的初始化中缺少了Reviewer和Reviser智能體。讓我們深入探討!

2.5 圖內(nèi)嵌套圖以實(shí)現(xiàn)狀態(tài)化的并行處理

這個(gè)智能助手的一個(gè)亮點(diǎn)是其支持對(duì)每個(gè)研究任務(wù)進(jìn)行并行處理,且每項(xiàng)任務(wù)都遵循一套預(yù)設(shè)的規(guī)范進(jìn)行審查與修訂。

在流程設(shè)計(jì)中,有效利用并行工作是提升效率的秘訣。然而,若所有智能體都向同一狀態(tài)報(bào)告,如何協(xié)調(diào)它們的并行工作以避免競(jìng)爭(zhēng)條件和數(shù)據(jù)不一致的問(wèn)題呢?解決方案是構(gòu)建一個(gè)子圖,由主LangGraph實(shí)例觸發(fā),并為每次并行運(yùn)行維護(hù)獨(dú)立的狀態(tài),從而巧妙地解決了這一難題。

正如之前所做的,讓我們定義LangGraph狀態(tài)及其智能體。由于這個(gè)子圖基本上是審查和修訂研究草稿,我們將用草稿信息定義狀態(tài):

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

如DraftState中所見(jiàn),我們主要關(guān)心討論的主題,以及審稿人和修訂筆記,因?yàn)樗鼈兿嗷贤ㄒ酝瓿勺又黝}研究報(bào)告。為了創(chuàng)建循環(huán)條件,我們將利用LangGraph的最后一個(gè)重要部分,即條件邊:

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)
    
    # 設(shè)置邊 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"})

通過(guò)定義條件邊,如果審稿人有審稿筆記,圖將指向修訂者,或者循環(huán)將以最終草稿結(jié)束。如果你回到已經(jīng)構(gòu)建的主圖,會(huì)看到這個(gè)并行工作是在由ChiefEditor智能體調(diào)用的名為“researcher”的節(jié)點(diǎn)下進(jìn)行的。

2.6 運(yùn)行研究助手

為了便于定制,助手使用給定的task.json文件運(yùn)行:

{
  "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"
  ]
}

任務(wù)對(duì)象相當(dāng)直觀(guān),但請(qǐng)注意,如果follow_guidelines為false,則會(huì)導(dǎo)致圖忽略修訂步驟和定義的準(zhǔn)則。此外,max_sections字段定義了要研究的子標(biāo)題數(shù)量。數(shù)量較少將生成較短的報(bào)告。

運(yùn)行助手會(huì)生成最終研究報(bào)告,格式包括Markdown、PDF和Docx等。

本文轉(zhuǎn)載自 ??AI科技論談??,作者: AI科技論談

收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
主站蜘蛛池模板: 羞羞视频在线观看网站 | 欧美日韩毛片 | 久久久久久蜜桃一区二区 | 一区二区免费 | 欧美视频三区 | 成人无遮挡毛片免费看 | 欧美性另类 | 欧美日韩中文字幕在线 | 91综合网 | 中文字幕视频在线 | 欧美激情视频一区二区三区在线播放 | 国产女人第一次做爰毛片 | 91人人视频在线观看 | 一级做a爰片性色毛片 | 一区二区视频在线观看 | 欧州一区| 一区二区视频在线观看 | 亚洲天堂影院 | 中文字幕日韩欧美一区二区三区 | 成人在线免费观看视频 | 国产精品欧美精品日韩精品 | 免费一级毛片 | 成人一级黄色毛片 | 手机看黄av免费网址 | 第一色在线 | 精品国产欧美 | 国产视频福利在线观看 | 欧美v在线 | 亚洲天堂色| 91精品国产综合久久精品图片 | 精品久久国产 | 国产精品国产精品国产专区不卡 | 日韩精品中文字幕一区二区三区 | 日本成人在线观看网站 | 国产欧美日韩在线观看 | 色综合欧美 | 欧美一级黄色片免费观看 | 亚洲福利| 日韩精品免费视频 | 国产欧美日韩精品一区 | 本地毛片 |