偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何構(gòu)建終極的AI自動(dòng)化系統(tǒng):多代理協(xié)作指南

發(fā)布于 2024-5-16 14:24
瀏覽
0收藏

自GPT Researcher首次發(fā)布以來(lái),僅僅一年時(shí)間,構(gòu)建、測(cè)試和部署AI代理的方法已經(jīng)取得了顯著進(jìn)步。從最初的zero-shot或few-shot prompting,迅速發(fā)展到代理的function calling、RAG,再到現(xiàn)在的Agent工作流(也稱(chēng)為flow engineering)。

吳恩達(dá) 最近指出:“我認(rèn)為AI代理工作流今年將推動(dòng)巨大的AI進(jìn)步,甚至可能超過(guò)下一代基礎(chǔ)模型。這是一個(gè)重要的趨勢(shì),我鼓勵(lì)所有從事AI工作的人士關(guān)注?!?/p>

在本文中,你將了解到為什么多Agent工作流是目前的最佳實(shí)踐,以及如何使用LangGraph構(gòu)建一個(gè)最佳的自主研究多Agent助手。

想要跳過(guò)教程,可以直接查看GPT Researcher與LangGraph的最終代碼實(shí)現(xiàn)https://github.com/assafelovic/gpt-researcher/tree/master/multi_agents。

LangGraph簡(jiǎn)介

LangGraph是LangChain的擴(kuò)展,旨在創(chuàng)建Agent和多Agent流程。它增加了創(chuàng)建循環(huán)流程的能力,并內(nèi)置了短期記憶——這兩個(gè)特性對(duì)于創(chuàng)建Agent至關(guān)重要。

LangGraph為開(kāi)發(fā)人員提供了高度的可控性,對(duì)于創(chuàng)建定制代理和流程非常重要。幾乎所有生產(chǎn)中的代理都針對(duì)它們?cè)噲D解決的特定用例進(jìn)行了定制。LangGraph為您提供了創(chuàng)建任意定制代理的靈活性,同時(shí)提供了一個(gè)直觀的開(kāi)發(fā)人員體驗(yàn)。

讓我們開(kāi)始構(gòu)建吧!

構(gòu)建終極的自主研究代理

通過(guò)利用LangGraph,研究過(guò)程可以通過(guò)利用具有專(zhuān)業(yè)技能的多個(gè)Agent,在深度和質(zhì)量上得到顯著提升。每個(gè)代理都專(zhuān)注于特定的技能,這樣可以實(shí)現(xiàn)更好的關(guān)注點(diǎn)分離、可定制性,并隨著項(xiàng)目的增長(zhǎng)而進(jìn)一步發(fā)展。

受到最近STORM論文的啟發(fā),這個(gè)例子展示了一個(gè)AI代理團(tuán)隊(duì)如何協(xié)作開(kāi)展給定主題的研究,從規(guī)劃到出版。這個(gè)例子還將利用領(lǐng)先的自主研究代理GPT Researcher。

研究代理團(tuán)隊(duì)

研究團(tuán)隊(duì)由七位LLM Agent組成:

  • 主編— 負(fù)責(zé)監(jiān)督整個(gè)研究過(guò)程和管理團(tuán)隊(duì)。這是“主”代理,使用LangGraph協(xié)調(diào)其他代理。該代理作為主要的LangGraph接口。
  • GPT Researcher— 一個(gè)專(zhuān)門(mén)的自主代理,負(fù)責(zé)對(duì)給定主題進(jìn)行深入研究。
  • 編輯— 負(fù)責(zé)規(guī)劃研究大綱和結(jié)構(gòu)。
  • 審稿人— 根據(jù)一組標(biāo)準(zhǔn)驗(yàn)證研究結(jié)果的正確性。
  • 校對(duì)者— 根據(jù)審稿人的反饋校對(duì)研究結(jié)果。
  • 作家— 負(fù)責(zé)編寫(xiě)最終報(bào)告。
  • 出版商— 負(fù)責(zé)將最終報(bào)告發(fā)布到多種格式,如PDF、Docx、Markdown等。

架構(gòu)設(shè)計(jì)

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

如何構(gòu)建終極的AI自動(dòng)化系統(tǒng):多代理協(xié)作指南-AI.x社區(qū)

研究過(guò)程的自動(dòng)化階段圖

更具體地說(shuō),流程包括以下步驟:

  • 檢索數(shù)據(jù)(gpt-researcher)— 根據(jù)給定的研究任務(wù),在互聯(lián)網(wǎng)上進(jìn)行初步研究。這一步對(duì)于LLM來(lái)說(shuō)至關(guān)重要,因?yàn)樗梢曰谧钚潞拖嚓P(guān)信息來(lái)規(guī)劃研究過(guò)程,而不是僅依賴(lài)于預(yù)訓(xùn)練數(shù)據(jù)。
  • 編輯— 根據(jù)初步研究結(jié)果規(guī)劃報(bào)告的大綱和結(jié)構(gòu)。編輯還負(fù)責(zé)啟動(dòng)基于計(jì)劃大綱的并行研究任務(wù)。

對(duì)于大綱中的每個(gè)主題(并行進(jìn)行):

  • 研究員(gpt-researcher)— 對(duì)子主題進(jìn)行深入研究并撰寫(xiě)草稿。這個(gè)代理利用GPT Researcher的Python包,進(jìn)行優(yōu)化、深入和事實(shí)性的研究報(bào)告。
  • 審稿人— 根據(jù)一組指南驗(yàn)證草稿的正確性,并為校對(duì)者提供反饋(如果有的話)。
  • 校對(duì)者— 根據(jù)審稿人的反饋校對(duì)草稿,直至滿意為止。
  • 作家— 負(fù)責(zé)整合并撰寫(xiě)包含引言、結(jié)論和參考文獻(xiàn)部分的最終報(bào)告。
  • 出版商— 將最終報(bào)告發(fā)布到多種格式,如PDF、Docx、Markdown等。

由于代碼量較大,我們不會(huì)深入到所有代碼細(xì)節(jié),但會(huì)重點(diǎn)介紹我發(fā)現(xiàn)有價(jià)值的部分。

定義圖形狀態(tài)

LangGraph的一個(gè)我最喜愛(ài)的特性是state management(狀態(tài)管理)。在LangGraph中,狀態(tài)通過(guò)結(jié)構(gòu)化方法實(shí)現(xiàn),開(kāi)發(fā)人員定義一個(gè)GraphState來(lái)封裝應(yīng)用程序的整個(gè)狀態(tài)。圖中的每個(gè)節(jié)點(diǎn)都可以修改這個(gè)狀態(tài),允許基于交互的不斷發(fā)展的上下文進(jìn)行動(dòng)態(tài)響應(yīng)。

在技術(shù)設(shè)計(jì)的每個(gè)開(kāi)始階段,考慮整個(gè)應(yīng)用程序的數(shù)據(jù)模式是關(guān)鍵。在這種情況下,我們將這樣定義一個(gè)ResearchState:

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

如上所示,狀態(tài)被分為兩個(gè)主要部分:研究任務(wù)和報(bào)告布局內(nèi)容。隨著數(shù)據(jù)在圖代理中流通,每個(gè)代理將基于現(xiàn)有狀態(tài)生成新數(shù)據(jù)并更新它,以便后續(xù)處理圖中的其他代理。

然后,我們可以這樣初始化圖形:

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

使用LangGraph初始化流程

如前所述,多Agent開(kāi)發(fā)的好處之一是可以獨(dú)立構(gòu)建每個(gè)Agent,使其具有專(zhuān)業(yè)和限定的技能。以Researcher代理為例,它使用了GPT Researcher Python包:

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

如上所示,我們創(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.outputdir)

初始化研究團(tuán)隊(duì)

# 定義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", research_agent.run_parallel_research)
    workflow.add_node("writer", writer_agent.run)
    workflow.add_node("publisher", publisher_agent.run)
    
    # 添加邊以連接節(jié)點(diǎn)
    workflow.add_edge('browser', 'planner')
    workflow.add_edge('planner', 'researcher')
    workflow.add_edge('researcher', 'writer')
    workflow.add_edge('writer', 'publisher')
    
    # 設(shè)置起始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)
    workflow.set_entry_point("browser")
    workflow.add_edge('publisher', END)
    
    return workflow

如上所示,創(chuàng)建LangGraph圖非常直接,主要包括三個(gè)函數(shù):add_node、add_edge和set_entry_point。首先,你可以向圖中添加節(jié)點(diǎn),然后連接邊,并最終設(shè)置起始點(diǎn)。

如果你一直關(guān)注代碼和架構(gòu),會(huì)發(fā)現(xiàn)審稿人和校對(duì)者代理在初始化中缺失。接下來(lái),我們將討論這部分內(nèi)容。

圖中圖:支持有狀態(tài)的并行化

這是我使用LangGraph時(shí),最令我激動(dòng)的部分。這個(gè)自主助手的一個(gè)亮點(diǎn)是能夠針對(duì)每個(gè)研究任務(wù)并行運(yùn)行,然后根據(jù)預(yù)定義的指南進(jìn)行審查和修訂。

在優(yōu)化速度的同時(shí),了解如何在流程中利用并行工作至關(guān)重要。但如果所有Agent都報(bào)告相同的狀態(tài),如何觸發(fā)并行代理工作呢?這可能導(dǎo)致競(jìng)態(tài)條件和最終數(shù)據(jù)報(bào)告的不一致性。為解決這個(gè)問(wèn)題,可以創(chuàng)建一個(gè)子圖,該子圖將從主LangGraph實(shí)例觸發(fā),并且這個(gè)子圖將持有每個(gè)并行運(yùn)行的獨(dú)立狀態(tài),從而解決了上述問(wèn)題。

按照之前的步驟,我們定義LangGraph狀態(tài)及其代理。由于這個(gè)子圖主要審查和修訂研究草稿,我們將定義狀態(tài)以草稿信息為主:

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

在DraftState中,我們主要關(guān)注討論的主題,以及審閱者和修訂注釋?zhuā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è)置起始點(diǎn),以及從研究員到審閱者,再到校對(duì)者的邊
    workflow.set_entry_point("researcher")
    workflow.add_edge('researcher', 'reviewer')
    workflow.add_edge('reviser', 'reviewer')
    # 添加條件邊,根據(jù)審閱者的反饋決定是接受還是修訂
    workflow.add_conditional_edges('reviewer',
                                   (lambda draft: "accept" if draft['review'] is None else "revise"),
                                   {"accept": END, "revise": "reviser"})

通過(guò)定義條件邊,圖會(huì)根據(jù)審閱人的反饋決定是進(jìn)入校對(duì)者節(jié)點(diǎn)還是結(jié)束流程?;仡櫸覀儤?gòu)建的主圖,你會(huì)看到這個(gè)并行工作是在名為“researcher”的節(jié)點(diǎn)下進(jìn)行的,該節(jié)點(diǎn)由主編代理觸發(fā)。

運(yùn)行研究助手

在完成代理、狀態(tài)和圖形的構(gòu)建后,是時(shí)候啟動(dòng)我們的研究助手了!為了便于定制,助手根據(jù)給定的任務(wù).json文件運(yùn)行:

{
  "query": "AI 是否處于炒作周期?",
  "max_sections": 3,
  "publish_formats": {
    "markdown": true,
    "pdf": true,
    "docx": true
  },
  "follow_guidelines": false,
  "model": "gpt-4-turbo",
  "guidelines": [
    "報(bào)告必須采用APA格式編寫(xiě)",
    "每個(gè)子部分必須包含使用超鏈接的支持來(lái)源。如果不存在,則刪除子部分或重寫(xiě)為前一部分的內(nèi)容",
    "報(bào)告必須用西班牙語(yǔ)編寫(xiě)"
  ]
}

任務(wù)對(duì)象非常直觀,但請(qǐng)注意,如果follow_guidelines?為false,則會(huì)導(dǎo)致圖形忽略修訂步驟和定義的指南。此外,max_sections字段定義了要研究的子標(biāo)題數(shù)量,這將影響報(bào)告的長(zhǎng)度。

運(yùn)行助手將生成最終的研究報(bào)告,并提供Markdown、PDF和Docx等格式。

想了解更多或運(yùn)行示例,請(qǐng)?jiān)L問(wèn)GPT Researcher x LangGraph的開(kāi)源頁(yè)面。

展望未來(lái)

展望未來(lái),有許多令人興奮的發(fā)展前景。人為干預(yù)對(duì)于優(yōu)化AI體驗(yàn)至關(guān)重要。讓人類(lèi)幫助助手修訂和專(zhuān)注于正確的研究計(jì)劃、主題和大綱,將提升整體的質(zhì)量和體驗(yàn)。此外,確保AI流程中的人為干預(yù)可以確保結(jié)果的正確性、可控性和確定性。值得高興的是,LangGraph已經(jīng)原生支持這些功能,如這里所示。

此外,支持對(duì)Web和本地?cái)?shù)據(jù)的研究將是許多商業(yè)和個(gè)人用例的關(guān)鍵。

最后,可以進(jìn)一步努力提高檢索來(lái)源的質(zhì)量,并確保最終報(bào)告構(gòu)建在最佳的故事線上。

LangGraph和多代理協(xié)作的下一步發(fā)展可能是,助手能夠根據(jù)給定的任務(wù)動(dòng)態(tài)規(guī)劃和生成圖形。這一愿景允許助手為特定任務(wù)選擇一組特定的代理,并根據(jù)圖形的基本原理規(guī)劃其策略,這將開(kāi)啟一個(gè)全新的可能性世界。鑒于AI領(lǐng)域的創(chuàng)新速度,不久的將來(lái)我們可能會(huì)看到GPT Researcher的一個(gè)新顛覆性版本。我們期待著未來(lái)的發(fā)展!

本文轉(zhuǎn)載自 AI小智,作者: AI小智

收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦