GPT Researcher:破解復(fù)雜研究的AI利器 原創(chuàng)
在現(xiàn)代研究環(huán)境中,處理如詳盡研究工作或?qū)W術(shù)論文撰寫等復(fù)雜任務(wù)對(duì)當(dāng)前的大型語(yǔ)言模型(如ChatGPT)來(lái)說(shuō)是一個(gè)挑戰(zhàn)。這些任務(wù)通常需要長(zhǎng)時(shí)間的手動(dòng)干預(yù)和多步驟操作,現(xiàn)有的AI工具往往無(wú)法在沒(méi)有人類幫助的情況下完成這些復(fù)雜任務(wù)。
GPT Researcher 受到 Plan-and-Solve 方法的啟發(fā),提供了解決這一問(wèn)題的方法。通過(guò)將復(fù)雜任務(wù)拆解為更小的子任務(wù)并并行執(zhí)行,GPT Researcher 提高了研究的效率和準(zhǔn)確性。它利用 大模型從多個(gè)在線資源中抓取和綜合信息,生成詳細(xì)研究的報(bào)告。其靈活的配置支持不同的大型語(yǔ)言模型和檢索器,使其能夠適應(yīng)各種研究需求。
本文展示了如何通過(guò)一條提示詞,讓GPT Researcher 生成對(duì)應(yīng)的研究報(bào)告。這展示了GPT Researcher 在自動(dòng)化研究領(lǐng)域的巨大潛力,為未來(lái)的研究工作提供了新的思路和方法。
復(fù)雜任務(wù)處理:從頭CoT到Plan-And-Solve
在現(xiàn)代研究環(huán)境中,復(fù)雜任務(wù)如進(jìn)行詳盡的研究工作或撰寫學(xué)術(shù)論文,是目前的大型語(yǔ)言模型(包括AI聊天助理如ChatGPT)難以一次性完成的。這些任務(wù)通常需要長(zhǎng)時(shí)間的手動(dòng)干預(yù)和多步驟的操作,而現(xiàn)有的AI工具往往無(wú)法在沒(méi)有人類幫助的情況下完整地執(zhí)行這些復(fù)雜任務(wù)。然后,手動(dòng)執(zhí)行研究任務(wù)既費(fèi)時(shí)又費(fèi)力,往往需要數(shù)周才能找到合適的資源和信息。雖然,當(dāng)前的大型語(yǔ)言模型已經(jīng)非常強(qiáng)大了,但它們主要訓(xùn)練于過(guò)去的數(shù)據(jù),存在著信息過(guò)時(shí)和幻覺(jué)風(fēng)險(xiǎn)。此外,現(xiàn)有的啟用網(wǎng)絡(luò)搜索的解決方案通常只能訪問(wèn)有限的資源,導(dǎo)致結(jié)論可能膚淺或有偏見(jiàn)。
為了應(yīng)對(duì)這些挑戰(zhàn),研究人員提出了鏈?zhǔn)剿季S(Chain of Thought, CoT)的思路。鏈?zhǔn)剿季S(Chain of Thought, CoT)是一種推理方法,旨在通過(guò)生成一系列中間步驟來(lái)逐步解決復(fù)雜問(wèn)題,從而提高大型語(yǔ)言模型(LLMs)的解答能力。CoT 的核心理念是讓模型在回答復(fù)雜問(wèn)題時(shí),逐步生成中間推理步驟,每一步都為最終答案提供部分解答。這種方法通過(guò)分解問(wèn)題,使模型能夠更清晰地理解并解決復(fù)雜的任務(wù)。
例如,假設(shè)我們要解決一個(gè)數(shù)學(xué)問(wèn)題:“一個(gè)人走了3公里,又走了2公里,總共走了多少公里?”。通過(guò)CoT的方法,我們可以這樣進(jìn)行:
- 理解問(wèn)題:知道問(wèn)題是關(guān)于總共走了多少公里。
- 分解步驟:把走的每段路程列出來(lái)。
- 逐步計(jì)算:先計(jì)算第一段3公里,再計(jì)算第二段2公里,然后把兩段路程加起來(lái)。
- 得到答案:3公里 + 2公里 = 5公里。
通過(guò)這種逐步分解的方法,模型能夠更準(zhǔn)確地解決復(fù)雜的問(wèn)題。這種拆解步驟的方式,傳統(tǒng)的CoT是通過(guò)示例的方式教給模型學(xué)習(xí)的。還是上面的例子,傳統(tǒng)CoT的做法是提供示例如下。
問(wèn)題:一個(gè)人走了3公里,又走了2公里,總共走了多少公里?
步驟:
他先走了3公里。
然后又走了2公里。
把兩段距離加起來(lái)。
答案:3公里 + 2公里 = 5公里。
通過(guò)問(wèn)題,步驟,答案的方式教給大模型如何處理復(fù)雜問(wèn)題,也就是告訴大模型如何按照步驟進(jìn)行拆解和執(zhí)行復(fù)雜問(wèn)題。隨著基座模型的參數(shù)量增加以及訓(xùn)練數(shù)據(jù)集的激增,模型的能力越來(lái)越強(qiáng),此時(shí)就出現(xiàn)了Zero-shot-CoT(Zero-shot Chain of Thought)。它是CoT 的一種變體,旨在無(wú)需任何示例的情況下,通過(guò)逐步推理提高LLMs的復(fù)雜問(wèn)題解答能力。傳統(tǒng)的CoT 方法通常需要為每個(gè)任務(wù)提供一些示例,以幫助模型逐步解決問(wèn)題。而Zero-shot-CoT 則通過(guò)輸入簡(jiǎn)單的提示詞:“讓我們一步一步地思考”,引導(dǎo)模型生成多步驟的推理路徑,無(wú)需任何示例。
還是上面的例子,對(duì)于Zero-shot-CoT而言只需要輸入如下信息,然后得到結(jié)果:
初始提示:“一個(gè)人走了3公里,又走了2公里,總共走了多少公里?讓我們一步一步地思考?!?/p>
推理步驟:
首先,這個(gè)人走了3公里。
接著,他又走了2公里。
把這兩段距離加起來(lái)。
答案提?。阂虼?,答案(阿拉伯?dāng)?shù)字)是5。
通過(guò)Zero-shot-CoT,模型能夠在沒(méi)有示例的情況下,通過(guò)“讓我們一步一步地思考”的提示,自行推理并解決問(wèn)題。
盡管Zero-shot-CoT取得了成功,但它仍然存在三個(gè)主要缺陷,
- 計(jì)算錯(cuò)誤:模型在推理過(guò)程中可能會(huì)產(chǎn)生計(jì)算錯(cuò)誤。
- 缺失步驟錯(cuò)誤:模型可能會(huì)遺漏一些必要的中間步驟。
- 語(yǔ)義誤解錯(cuò)誤:模型可能會(huì)誤解問(wèn)題的語(yǔ)義,導(dǎo)致不準(zhǔn)確的答案。
為了解決Zero-shot-CoT的方法所存在的問(wèn)題,研究人員又提出了Plan-and-Solve(PS)方法。PS提示由兩個(gè)部分組成:
- 計(jì)劃:首先制定計(jì)劃,將整個(gè)任務(wù)劃分為更小的子任務(wù)。
- 執(zhí)行:然后根據(jù)計(jì)劃執(zhí)行這些子任務(wù)。通過(guò)這種方法,PS提示能夠使LLMs明確地設(shè)計(jì)解決問(wèn)題的計(jì)劃,并在預(yù)測(cè)最終答案之前生成中間推理過(guò)程。
了解GPT Researcher:從架構(gòu)到流程
前面我們介紹了通過(guò)CoT的思路解決了負(fù)責(zé)任務(wù)的執(zhí)行問(wèn)題,同時(shí)也提出了由于CoT存在的問(wèn)題,因此研究任務(wù)提出了Plan-and-Solve(PS)的方案。接下來(lái),我們會(huì)基于Plan-and-Solve的思路來(lái)看看最佳實(shí)踐:GPT Researcher,它是一種自主代理,能夠生成詳細(xì)、真實(shí)和公正的研究報(bào)告,并提供專注于相關(guān)資源、大綱和課程的定制選項(xiàng)。受到最近的 Plan-and-Solve 和 RAG 論文的啟發(fā),GPT Researcher 解決了速度、確定性和可靠性問(wèn)題,通過(guò)并行代理工作(而不是同步操作)提供更穩(wěn)定的性能和更高的速度。
當(dāng)前的LLMs(大語(yǔ)言模型)面臨一些顯著的問(wèn)題。首先,由于它們的訓(xùn)練數(shù)據(jù)基于過(guò)去和過(guò)時(shí)的信息,導(dǎo)致模型在生成內(nèi)容時(shí)常常出現(xiàn)幻覺(jué),這使得它們難以勝任實(shí)時(shí)研究任務(wù)。此外,許多LLMs的輸出僅限于短令牌,這對(duì)于生成長(zhǎng)篇、詳細(xì)的研究報(bào)告來(lái)說(shuō)是不夠的。支持網(wǎng)絡(luò)搜索的解決方案(例如 ChatGPT + Web 插件)也存在局限性,因?yàn)樗鼈儍H能訪問(wèn)有限的資源和內(nèi)容,這可能導(dǎo)致結(jié)論膚淺或有偏見(jiàn)。依賴少數(shù)精選資源進(jìn)行研究可能會(huì)在確定研究問(wèn)題或任務(wù)的正確結(jié)論時(shí)產(chǎn)生偏差。
為了解決這些問(wèn)題,GPT Researcher 采用了Plan-and-Solve的方法,通過(guò)先制定計(jì)劃將復(fù)雜任務(wù)分解為更小的子任務(wù),然后并行執(zhí)行這些子任務(wù),從而提高了研究的效率和準(zhǔn)確性。通過(guò)并行處理,GPT Researcher 能夠同時(shí)訪問(wèn)和整合大量的網(wǎng)絡(luò)資源,生成客觀和詳盡的研究報(bào)告。這不僅解決了當(dāng)前LLMs在信息時(shí)效性、輸出長(zhǎng)度和資源有限性方面的不足,還減少了人為干預(yù)的需求,大大提升了研究任務(wù)的穩(wěn)定性和速度。GPT Researcher 的這種創(chuàng)新方法展示了其在在線研究領(lǐng)域的巨大潛力,為未來(lái)的自動(dòng)化研究提供了新的思路和方法。GPT Researcher 的核心特點(diǎn)包括:
- 計(jì)劃與執(zhí)行模型:采用PS提示方法,將復(fù)雜任務(wù)劃分為子任務(wù),并逐步執(zhí)行。
- 并行處理:利用Python的asyncio庫(kù),實(shí)現(xiàn)并行處理,顯著縮短研究時(shí)間。
- 多源信息聚合:從多個(gè)在線資源中抓取信息,并對(duì)其進(jìn)行總結(jié)和過(guò)濾,生成客觀和事實(shí)性的研究報(bào)告。
- 高效報(bào)告生成:使用GPT-4模型生成詳細(xì)的研究報(bào)告,提供結(jié)構(gòu)良好、信息豐富的內(nèi)容。
在了解了GPT Researcher核心特點(diǎn)之后,我們來(lái)通過(guò)下圖了解一下它的架構(gòu)。
- Task:整個(gè)研究任務(wù)是由一個(gè)特定的研究查詢或任務(wù)驅(qū)動(dòng)的。這一步驟確定了需要解決的問(wèn)題,并為后續(xù)的任務(wù)制定了明確的目標(biāo)。
- Planner:“計(jì)劃者”代理的主要任務(wù)是生成研究問(wèn)題。根據(jù)研究查詢,計(jì)劃者會(huì)制定一系列具體的研究問(wèn)題,這些問(wèn)題共同構(gòu)成對(duì)任務(wù)的全面理解。計(jì)劃者確保研究問(wèn)題覆蓋了任務(wù)的各個(gè)方面,從而為后續(xù)的信息搜集和分析打下基礎(chǔ)。
- Researcher:“執(zhí)行者”代理負(fù)責(zé)根據(jù)計(jì)劃者生成的每個(gè)研究問(wèn)題尋找最相關(guān)的信息。這個(gè)步驟中,執(zhí)行者代理會(huì)觸發(fā)爬蟲(chóng)代理,在網(wǎng)絡(luò)上抓取與每個(gè)研究問(wèn)題相關(guān)的資源。執(zhí)行者代理利用注入gpt3.5-turbo和gpt-4-turbo的大模型來(lái)處理和分析這些信息
- Query:在執(zhí)行代理搜集信息的過(guò)程中,系統(tǒng)會(huì)不斷發(fā)出查詢請(qǐng)求。這些查詢是基于研究問(wèn)題設(shè)計(jì)的,目的是在網(wǎng)絡(luò)上找到最相關(guān)和最新的信息資源。每個(gè)查詢都是一個(gè)精確的問(wèn)題,確保獲取的信息是高質(zhì)量且相關(guān)的。
Publisher:此時(shí),“計(jì)劃者”會(huì)過(guò)濾并匯總所有相關(guān)信息,創(chuàng)建最終的研究報(bào)告。這個(gè)步驟包括對(duì)所有抓取到的資源進(jìn)行總結(jié),并跟蹤其來(lái)源,確保信息的可靠性和可追溯性。最終的研究報(bào)告由”發(fā)布者“進(jìn)行發(fā)布,它整合了所有的總結(jié)信息,提供一個(gè)全面、詳盡且公正的研究結(jié)果。
GPT Researcher 架構(gòu)
通過(guò)對(duì)GPT Researcher 的架構(gòu)分析,我們將GPT Researcher 的工作流程整理如下:
- 生成研究問(wèn)題提綱:形成對(duì)任何給定任務(wù)的客觀意見(jiàn)。
- 觸發(fā)爬蟲(chóng)代理:對(duì)于每個(gè)研究問(wèn)題,從網(wǎng)上資源中抓取相關(guān)信息。
- 總結(jié)和過(guò)濾:對(duì)抓取的資源進(jìn)行總結(jié)和過(guò)濾,僅保留相關(guān)信息。
- 生成研究報(bào)告:聚合所有總結(jié)的資源,使用GPT-4生成最終的研究報(bào)告。
初探GPT Researcher:代碼結(jié)構(gòu)與基本配置
前面介紹了GPT Researcher 的架構(gòu)和工作流程,我們來(lái)看看它是如何使用的。我們可以通過(guò)GitHub 地址(https://github.com/assafelovic/gpt-researcher)訪問(wèn)GPT Researcher,如下圖所示從去年底到現(xiàn)在這個(gè)項(xiàng)目已經(jīng)有10K+star 了。
接著,我們會(huì)安裝GPT Researcher,確保系統(tǒng)中安裝 Python 3.11 或更高版本。請(qǐng)參考[這里](https://www.python.org/downloads/)獲取詳細(xì)的安裝指南。
通過(guò)如下命令,下載項(xiàng)目并導(dǎo)航到其目錄:
git clone https://github.com/assafelovic/gpt-researcher.git
cd gpt-researcher
下載GPT Researcher的源碼之后,可以通過(guò)下圖來(lái)看看它的內(nèi)部結(jié)構(gòu)。
- Backend 文件夾中的代碼文件用來(lái)處理GPT Researcher的后臺(tái)網(wǎng)絡(luò)請(qǐng)求,這里利用FastAPI 框架創(chuàng)建應(yīng)用程序,它具有處理靜態(tài)文件、模板渲染和 WebSocket 連接的功能。
- Docs文件夾用來(lái)存放使用手冊(cè)以及GPT Researcher最新的Blog 文章。
- Examples文件夾提供了簡(jiǎn)單的GPT Researcher例子。
- Frontend 文件夾包含 GPT Researcher前端界面的信息, 包括html、css、js 等文件。
- Gpt_researcher 文件夾存放核心代碼,包括參數(shù)配置、上下文管理、大模型管理、代理、函數(shù)、提示詞管理、記憶管理、網(wǎng)絡(luò)爬蟲(chóng)工具以及搜索引擎工具等。
- Mulit_agents 用來(lái)支持多代理模式。
- Outputs 用來(lái)保存輸出的研究文檔,目前GPT Researcher支持研究結(jié)果以word、MD等多種文檔的方式下載。
- Main.py 是 GPT Researcher Web 應(yīng)用的入口文件,我們通過(guò)它啟動(dòng)整個(gè)應(yīng)用。
- Requirements.txt 用來(lái)存放依賴的組件庫(kù),然后需要結(jié)合PIP 命令對(duì)其中包含的組件進(jìn)行安裝,從而保證GPT Researcher的運(yùn)行。
由于GPT Researcher 需要借助大模型以及網(wǎng)絡(luò)搜索技術(shù)完成研究工作,所以需要獲取兩者的訪問(wèn)權(quán)限。因此我們需要對(duì)大模型和搜索引擎的API密鑰進(jìn)行設(shè)置,可以使用兩種方法設(shè)置API密鑰:直接導(dǎo)出或?qū)⑵浯鎯?chǔ)在 .env 文件中。這里的API 密鑰是用來(lái)訪問(wèn)大模型(OpenAI)和搜索引擎(Tavily Search API)的,需要通過(guò)API密鑰的方式獲取二者的訪問(wèn)權(quán)限。
可以通過(guò)如下命令完成:
export OPENAI_API_KEY={Your OpenAI API Key here}
export TAVILY_API_KEY={Your Tavily API Key here}
同時(shí),還可以通過(guò)配置文件完成密鑰的配置,在gpt-researcher目錄中找到.env 文件,打開(kāi)該文件進(jìn)行API 密鑰的設(shè)置。
并輸入以下密鑰:
OPENAI_API_KEY={Your OpenAI API Key here}
TAVILY_API_KEY={Your Tavily API Key here}
執(zhí)行 GPT Researcher:研究報(bào)告與成果解析
在完成了下載和配置工作之后,我們需要運(yùn)行GPT Researcher 看看它能否幫助我們解決復(fù)雜的研究工作。
在執(zhí)行之前需要通過(guò)如下命令安裝依賴項(xiàng),也就是依賴的組件庫(kù)。
pip install -r requirements.txt
接著,通過(guò)命令行使用 FastAPI 運(yùn)行代理,啟動(dòng) GPT Researcher 的Web 應(yīng)用。
uvicorn main:app --reload
此時(shí),控制臺(tái)會(huì)輸出如下內(nèi)容:
NFO: Will watch for changes in these directories: ['/Users/cuihao/Doc/39 GPT/zhibo code/gpt-researcher']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [15959] using WatchFiles
INFO: Started server process [15961]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: 127.0.0.1:51267 "GET / HTTP/1.1" 200 OK
INFO: 127.0.0.1:51279 "GET /static/gptr-logo.png HTTP/1.1" 200 OK
INFO: 127.0.0.1:51267 "GET /site/styles.css HTTP/1.1" 200 OK
INFO: 127.0.0.1:51279 "GET /site/scripts.js HTTP/1.1" 200 OK
INFO: 127.0.0.1:51279 "GET /static/favicon.ico HTTP/1.1" 200 OK
說(shuō)明GPT Researcher 的Web 應(yīng)用已經(jīng)啟動(dòng),并且告訴使用者可以通過(guò)http://127.0.0.1:8000的地址訪問(wèn)GPT Researcher。
啟動(dòng)之后會(huì)看到如下圖的界面,即GPT Researcher 的宣傳語(yǔ)。
接著會(huì)看到GPT Researcher 的主界面,如下圖所示:
在 “What would you like me to research next? ”下方的文本框,可以輸入你要研究的內(nèi)容,也就是提示詞信息。
在”What type of report would you like me to generate?”下方會(huì)提供一個(gè)下拉框,可以選擇研究報(bào)告的類型,目前提供三類:
- Summary Short and fast (~2 min):摘要類型,特點(diǎn)是內(nèi)容較少但是生成速度較快。
- Detailed In depth and longer (~5 min):詳細(xì)類型,更加有深度,內(nèi)容比較多,生成速度會(huì)慢一點(diǎn)。
- Resource Report:原始報(bào)告,將提供所有網(wǎng)絡(luò)搜索的內(nèi)容以供參考。
在”Agent Output”的部分會(huì)看到研究的計(jì)劃和任務(wù)的執(zhí)行情況?!癛esearch Report” 中會(huì)生成最終的生成報(bào)告。
介紹完GPT Researcher的整體布局之后,我們來(lái)實(shí)測(cè)一下它的研究能力,如下圖所示,輸入“ai agent 在企業(yè)中的應(yīng)用”作為我們的研究主題,并且選擇Summary類型作為報(bào)告生成方式。
點(diǎn)擊“Research”按鈕之后開(kāi)始執(zhí)行研究任務(wù),同時(shí)Agent Output輸出如下圖所示內(nèi)容。
Thinking about research questions for the task...
GPT Researcher在生成研究問(wèn)題,以便為特定任務(wù)形成客觀和全面的研究框架。
Starting the research task for 'ai agent 在企業(yè)中的應(yīng)用'...
GPT Researcher開(kāi)始執(zhí)行具體的研究任務(wù),基于用戶提供的主題 "ai agent 在企業(yè)中的應(yīng)用"。
Business Analyst Agent
GPT Researcher采用了一個(gè)特定的“商業(yè)分析代理”來(lái)處理研究任務(wù)。
I will conduct my research based on the following queries: ['ai agent 在企業(yè)中的應(yīng)用 2024', 'ai agent 在企業(yè)中的應(yīng)用 中國(guó) 2024', 'ai agent 在企業(yè)中的應(yīng)用 案例分析 2024', 'ai agent 在企業(yè)中的應(yīng)用']...
GPT Researcher列出了將要使用的具體查詢。這些查詢反映了研究任務(wù)的多維度,包括時(shí)間、地點(diǎn)和具體應(yīng)用案例。
Running research for 'ai agent 在企業(yè)中的應(yīng)用 2024'...
顯示GPT Researcher實(shí)際開(kāi)始對(duì)指定查詢執(zhí)行研究任務(wù)。
執(zhí)行過(guò)程中如果切換到控制臺(tái),從命令行的輸出來(lái)看,發(fā)現(xiàn)如下內(nèi)容。由于內(nèi)容較多,我們截取其中一部分給大家解釋。
??Starting the research task for 'ai agent 在企業(yè)中的應(yīng)用'...
??https://api.chatanywhere.tech/v1??
?? Business Analyst Agent
??https://api.chatanywhere.tech/v1??
??I will conduct my research based on the following queries: ['ai agent 在企業(yè)中的應(yīng)用 2024', 'ai agent 在企業(yè)中的應(yīng)用 中國(guó) 2024', 'ai agent 在企業(yè)中的應(yīng)用 案例分析 2024', 'ai agent 在企業(yè)中的應(yīng)用']...
??Running research for 'ai agent 在企業(yè)中的應(yīng)用 2024'...
? Added source url to research: https://zhuanlan.zhihu.com/p/675595267
? Added source url to research: https://www.technologyreview.com/2024/05/14/1092407/googles-astra-is-its-first-ai-for-everything-agent/
? Added source url to research: https://zhuanlan.zhihu.com/p/676245844
? Added source url to research: https://www.infoq.cn/article/bqmoGzkvE4GwWsvruqHp
? Added source url to research: https://www.thepaper.cn/newsDetail_forward_27225624
?? Researching for relevant information...
??Getting relevant content based on query: ai agent 在企業(yè)中的應(yīng)用 2024...
?? Source: https://www.thepaper.cn/newsDetail_forward_27225624
Title:
Content: 登錄
《2024年AI Agent行業(yè)報(bào)告》——大模型時(shí)代的“APP”,探索新一代人機(jī)交互及協(xié)作范式
原創(chuàng) 劉瑤 甲子光年
60頁(yè)報(bào)告,和100+場(chǎng)景梳理,可能依然趕不上飛速發(fā)展的AI Agent!
隨著大型模型在各行各業(yè)的廣泛應(yīng)用,基于大型模型的人工智能體(AI Agent)迎來(lái)了快速發(fā)展的階段。研究AI Agent是人類不斷接近人工通用智能(AGI)的探索之一。知名AI Agent項(xiàng)目AutoGPT已經(jīng)在GitHub的星星數(shù)已經(jīng)達(dá)到 140,000 顆,進(jìn)一步反映了用戶對(duì)于AI Agents 項(xiàng)目的廣泛興趣和支持。
隨著AI Agent變得越來(lái)越易用和高效,"Agent+"的產(chǎn)品越來(lái)越多,未來(lái)AI Agent有望成為AI應(yīng)用層的基本架構(gòu),涵蓋toC和toB產(chǎn)品等不同領(lǐng)域。
因此甲子光年推出《2024年AI Agent行業(yè)報(bào)告》,探討AI Agent在概念變化,學(xué)術(shù)及商業(yè)界的嘗試與探索,對(duì)各行業(yè)、各場(chǎng)景對(duì)于AIGC技術(shù)的需求進(jìn)行調(diào)研及梳理,展示AI Agent領(lǐng)域近期的突破及商業(yè)實(shí)踐范式,對(duì)未來(lái)行業(yè)的趨勢(shì)進(jìn)行研判。
原標(biāo)題:《《2024年AI Agent行業(yè)報(bào)告》——大模型時(shí)代的“APP”,探索新一代人機(jī)交互及協(xié)作范式|甲子光年智庫(kù)》
<省略部分內(nèi)容……>
這里的輸出結(jié)果更加詳細(xì),方便我們了解GPT Researcher的工作流程,大致包括如下5個(gè)步驟:
啟動(dòng)研究任務(wù):
開(kāi)始研究主題為“ai agent 在企業(yè)中的應(yīng)用”的任務(wù)。
選擇和執(zhí)行商業(yè)分析代理:
選擇了“Business Analyst Agent”作為執(zhí)行任務(wù)的代理。
生成查詢:
生成了一系列研究查詢,此時(shí)會(huì)調(diào)用搜索引擎,查詢內(nèi)容包括:
- 'ai agent 在企業(yè)中的應(yīng)用 2024'
- 'ai agent 在企業(yè)中的應(yīng)用 中國(guó) 2024'
- 'ai agent 在企業(yè)中的應(yīng)用 案例分析 2024'
- 'ai agent 在企業(yè)中的應(yīng)用'
執(zhí)行具體查詢:
對(duì)每個(gè)查詢分別進(jìn)行研究,并添加相關(guān)的資源URL,例如:
https://zhuanlan.zhihu.com/p/675595267 等。
獲取相關(guān)內(nèi)容:
從添加的資源URL中獲取相關(guān)內(nèi)容,并展示部分內(nèi)容摘要。例如:
《2024年AI Agent行業(yè)報(bào)告》:探討AI Agent在各行各業(yè)的應(yīng)用、概念變化、學(xué)術(shù)及商業(yè)界的嘗試與探索。
上面這些研究、搜索、匯總工作都是由GPT Researcher 自動(dòng)完成不需要人工干預(yù),大約2分鐘之后整個(gè)過(guò)程執(zhí)行完畢。此時(shí),我們可以通過(guò)選擇下載報(bào)告文件類型的方式選擇要下載的文件格式。這里我選擇了Word 和MD的文件格式進(jìn)行下載,如下圖所示,與此同時(shí)在源代碼目錄下outputs 目錄中也會(huì)生成對(duì)應(yīng)的文件。
我們打開(kāi)Word 文件,查看其內(nèi)容如下圖所示。左邊顯示了研究報(bào)告的目錄結(jié)構(gòu),包括:基本概念,應(yīng)用場(chǎng)景,技術(shù)架構(gòu),優(yōu)勢(shì)和挑戰(zhàn)等,看上去還比較全面。
在研究報(bào)告的最后,還提供了參考文獻(xiàn)的鏈接,如下圖所示,這些文獻(xiàn)都是來(lái)自于互聯(lián)網(wǎng)搜索的結(jié)果。
集成GPT Researcher:從應(yīng)用到擴(kuò)展
通過(guò)執(zhí)行GPT Researcher讓其為我們研究“ai agent 在企業(yè)中的應(yīng)用”,這個(gè)操作過(guò)程是通過(guò)GPT Researcher提供的Web 應(yīng)用界面完成的。如果我們需要將GPT Researcher的能力集成到自己的項(xiàng)目中,我們就需要將 GPTResearcher 引入到現(xiàn)有的 Python 項(xiàng)目中。
大致步驟如下,首先需要導(dǎo)入相關(guān)模塊并定義全局常量,如研究查詢和報(bào)告類型。然后,通過(guò)定義異步函數(shù)來(lái)初始化GPT Researcher 實(shí)例并執(zhí)行研究任務(wù)。最后,運(yùn)行主函數(shù)以生成和打印研究報(bào)告。
我們將上述擴(kuò)展過(guò)程整理成如下代碼:
from gpt_researcher import GPTResearcher
import asyncio
QUERY = "<填寫需要研究的內(nèi)容>"
REPORT_TYPE = "research_report"
async def fetch_report(query, report_type):
researcher = GPTResearcher(query=query, report_type=report_type, config_path=None)
await researcher.conduct_research()
report = await researcher.write_report()
return report
async def generate_research_report():
report = await fetch_report(QUERY, REPORT_TYPE)
print(report)
if __name__ == "__main__":
asyncio.run(generate_research_report())
代碼內(nèi)容主要使用GPT Researcher調(diào)用研究任務(wù)的計(jì)劃、執(zhí)行、搜索、總結(jié)的能力,詳細(xì)代碼解釋如下:
(1) 導(dǎo)入模塊
from gpt_researcher import GPTResearcher
import asyncio
導(dǎo)入了自定義模塊 gpt_researcher 中的 GPTResearcher 類,用于后續(xù)研究報(bào)告的生成。同時(shí)導(dǎo)入了 asyncio 模塊,用于支持異步編程。
(2) 定義全局常量
QUERY = "<填寫需要研究的內(nèi)容>"
REPORT_TYPE = "research_report"
定義了兩個(gè)全局常量:QUERY 保存查詢問(wèn)題,REPORT_TYPE 保存報(bào)告類型。
(3) 異步函數(shù) fetch_report
async def fetch_report(query, report_type):
researcher = GPTResearcher(query=query, report_type=report_type, config_path=None)
await researcher.conduct_research()
report = await researcher.write_report()
return report
定義了一個(gè)名為 fetch_report 的異步函數(shù),用于根據(jù)給定的查詢和報(bào)告類型獲取研究報(bào)告。
- 創(chuàng)建 GPTResearcher 實(shí)例,傳入查詢和報(bào)告類型。
- 調(diào)用 conduct_research 方法執(zhí)行研究。
- 調(diào)用 write_report 方法生成報(bào)告并返回。
(4) 異步函數(shù) generate_research_report
async def generate_research_report():
report = await fetch_report(QUERY, REPORT_TYPE)
print(report)
定義了一個(gè)名為 generate_research_report 的異步函數(shù),用于執(zhí)行生成研究報(bào)告的主要邏輯。調(diào)用 fetch_report 函數(shù)獲取研究報(bào)告。打印生成的報(bào)告。
(5) 主程序入口
if __name__ == "__main__":
asyncio.run(generate_research_report())
在腳本作為主程序運(yùn)行時(shí),調(diào)用 asyncio.run 方法執(zhí)行 generate_research_report 函數(shù),啟動(dòng)異步任務(wù)并生成報(bào)告。
整體而言這段代碼,使用異步編程技術(shù),通過(guò) GPTResearcher 類生成關(guān)于指定查詢的研究報(bào)告,并在主程序中執(zhí)行生成并打印結(jié)果。
定制GPT Researcher:從配置到應(yīng)用
我們不僅可以將GPT Researcher集成應(yīng)用中,還可以對(duì)大模型,搜索引擎等信息進(jìn)行定制。在源代碼目錄下面的gpt_researcher/config目錄下面,存在配置文件 config.py,文件中描述了所有可以配置的環(huán)境變量?;谶@些環(huán)境變量,你可以根據(jù)具體需求靈活定制 GPT Researcher。包括選擇不同的搜索引擎、嵌入提供商和大語(yǔ)言模型提供商,以確保獲得最佳的研究結(jié)果。而這些配置參數(shù)設(shè)置在.env 文件中保存。說(shuō)白了,就是config.py 文件中定義配置的信息,具體的配置在.env 中描述。
config.py 文件中的配置類定義如下:
def __init__(self, config_file: str = None):
"""Initialize the config class."""
self.config_file = os.path.expanduser(config_file) if config_file else os.getenv('CONFIG_FILE')
self.retriever = os.getenv('RETRIEVER', "tavily")
self.embedding_provider = os.getenv('EMBEDDING_PROVIDER', 'openai')
self.llm_provider = os.getenv('LLM_PROVIDER', "openai")
self.fast_llm_model = os.getenv('FAST_LLM_MODEL', "gpt-3.5-turbo-16k")
self.smart_llm_model = os.getenv('SMART_LLM_MODEL', "gpt-4o")
self.fast_token_limit = int(os.getenv('FAST_TOKEN_LIMIT', 2000))
self.smart_token_limit = int(os.getenv('SMART_TOKEN_LIMIT', 4000))
self.browse_chunk_max_length = int(os.getenv('BROWSE_CHUNK_MAX_LENGTH', 8192))
self.summary_token_limit = int(os.getenv('SUMMARY_TOKEN_LIMIT', 700))
self.temperature = float(os.getenv('TEMPERATURE', 0.55))
self.user_agent = os.getenv('USER_AGENT', "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0")
self.max_search_results_per_query = int(os.getenv('MAX_SEARCH_RESULTS_PER_QUERY', 5))
self.memory_backend = os.getenv('MEMORY_BACKEND', "local")
self.total_words = int(os.getenv('TOTAL_WORDS', 800))
self.report_format = os.getenv('REPORT_FORMAT', "APA")
self.max_iterations = int(os.getenv('MAX_ITERATIONS', 3))
self.agent_role = os.getenv('AGENT_ROLE', None)
self.scraper = os.getenv("SCRAPER", "bs")
self.max_subtopics = os.getenv("MAX_SUBTOPICS", 3)
self.load_config_file()
def load_config_file(self) -> None:
"""Load the config file."""
if self.config_file is None:
return None
with open(self.config_file, "r") as f:
config = json.load(f)
for key, value in config.items():
setattr(self, key.lower(), value)
由于配置參數(shù)內(nèi)容比較多,這里我們挑選幾個(gè)經(jīng)常用的配置給大家介紹。這些配置參數(shù)可以在 .env 文件中設(shè)置,并在 Config 類初始化時(shí)加載。以下是主要配置選項(xiàng)的介紹:
RETRIEVER:用于檢索資源的網(wǎng)絡(luò)搜索引擎。默認(rèn)值為 tavily,可選項(xiàng)包括 duckduckgo、bing、google、serper、searx。通過(guò)設(shè)置 RETRIEVER 環(huán)境變量,可以選擇不同的搜索引擎。例如,在.env 中使用 Bing 搜索引擎:
RETRIEVER=bing
EMBEDDING_PROVIDER:嵌入模型的提供商。默認(rèn)值為 openai,可選項(xiàng)包括 ollama、huggingface、azureopenai、custom??梢酝ㄟ^(guò)設(shè)置 EMBEDDING_PROVIDER 環(huán)境變量來(lái)選擇不同的提供商:
EMBEDDING_PROVIDER=huggingface
LLM_PROVIDER:大語(yǔ)言模型(LLM)的提供商。默認(rèn)值為 openai,可選項(xiàng)包括 google、ollama、groq 等??梢酝ㄟ^(guò)設(shè)置 LLM_PROVIDER 環(huán)境變量選擇不同的 LLM 提供商:
LLM_PROVIDER= openai
FAST_LLM_MODEL:用于快速 LLM 操作(如摘要)的模型名稱。默認(rèn)值為 gpt-3.5-turbo-16k??梢酝ㄟ^(guò)設(shè)置 FAST_LLM_MODEL 環(huán)境變量調(diào)整此模型:
FAST_LLM_MODEL=gpt-3.5-turbo-16k
SMART_LLM_MODEL:用于復(fù)雜操作(如生成研究報(bào)告和推理)的模型名稱。默認(rèn)值為 gpt-4o??梢酝ㄟ^(guò)設(shè)置 SMART_LLM_MODEL 環(huán)境變量來(lái)選擇合適的模型:
SMART_LLM_MODEL=gpt-4o
總結(jié)
GPT Researcher 在自動(dòng)化研究領(lǐng)域中展示了顯著的進(jìn)步,解決了傳統(tǒng)大型語(yǔ)言模型的局限性。通過(guò)采用 Plan-and-Solve 方法,GPT Researcher 能夠高效處理以前需要大量人力的復(fù)雜任務(wù)。它能夠拆解任務(wù)、進(jìn)行并行處理,并從多個(gè)來(lái)源生成詳細(xì)的報(bào)告,確保高準(zhǔn)確性和客觀性。此外,其靈活的配置使用戶可以根據(jù)具體的研究需求對(duì)其進(jìn)行定制,增強(qiáng)了其在各種領(lǐng)域的實(shí)用性。隨著AI技術(shù)的不斷發(fā)展,像GPT Researcher這樣的工具將在簡(jiǎn)化研究過(guò)程方面發(fā)揮關(guān)鍵作用,使高質(zhì)量的信息變得更加易于獲取,并減少完成綜合研究所需的時(shí)間和精力。
參考
??https://ar5iv.labs.arxiv.org/html/2305.04091??
作者介紹
崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開(kāi)發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。
