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