自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

1 LangGraph概述

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

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

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

2 構建終極自主研究智能體

借助LangGraph的強大功能,我們能夠通過集結具備專業(yè)技能的多個智能體,顯著提高研究工作的深度與品質。每個智能體專注于其獨特技能,這不僅能夠優(yōu)化任務分工,增強定制性,還為項目的擴展與規(guī)?;l(fā)展奠定了基礎。

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

2.1 研究智能體團隊

研究團隊由七個大型語言模型智能體組成:

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

2.2 架構

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

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

更具體的流程如下:

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

我們不會深入所有代碼,因為代碼量很大,但會重點關注所發(fā)現(xiàn)的有價值或有趣部分進行分享。

2.3 定義圖狀態(tài)

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

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

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

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

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

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

2.4 使用LangGraph初始化圖

如上所述,多智能體開發(fā)的一個偉大之處在于構建每個智能體具有專門化和限定范圍的技能。以使用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

如上所見,已經創(chuàng)建了Research智能體的一個實例?,F(xiàn)在假設我們已經為團隊中的每個智能體都做了同樣的事情。在創(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)
    
    # 定義一個Langchain StateGraph與ResearchState

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

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

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

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

這個智能助手的一個亮點是其支持對每個研究任務進行并行處理,且每項任務都遵循一套預設的規(guī)范進行審查與修訂。

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

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

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

如DraftState中所見,我們主要關心討論的主題,以及審稿人和修訂筆記,因為它們相互溝通以完成子主題研究報告。為了創(chuàng)建循環(huán)條件,我們將利用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"})

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

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字段定義了要研究的子標題數(shù)量。數(shù)量較少將生成較短的報告。

運行助手會生成最終研究報告,格式包括Markdown、PDF和Docx等。

本文轉載自 ??AI科技論談??,作者: AI科技論談

收藏
回復
舉報
回復
相關推薦