戰(zhàn))
GPT Researcher 本地文檔研究指南基于 DOC_PATH 的 Local 與 Hybrid 檢索模式實(shí)戰(zhàn)【免費(fèi)下載鏈接】gpt-researcherAn autonomous agent that conducts deep research on any data using any LLM providers項(xiàng)目地址: https://gitcode.com/GitHub_Trending/gp/gpt-researcher本篇技術(shù)指南聚焦 gpt-researcher 的「本地文檔研究」能力如何讓自主研究 Agent 以本地文件夾中的 PDF、Word、Excel、Markdown 等文檔為數(shù)據(jù)源執(zhí)行研究任務(wù)并通過report_source在 Local僅本地與 Hybrid本地 Web模式之間切換。讀完本文你將掌握DOC_PATH配置、前端 My Documents 選項(xiàng)、Python 包級調(diào)用方式以及本地文檔在源碼層的加載、向量化與檢索鏈路可直接落地到私有知識庫與聯(lián)網(wǎng)研究相結(jié)合的實(shí)戰(zhàn)場景。一、本地文檔研究概覽gpt-researcher 默認(rèn)以 Web 為研究來源但通過設(shè)置DOC_PATH并切換數(shù)據(jù)源可以讓 Agent 完全基于你的本地文檔執(zhí)行研究任務(wù)。官方文檔local-docs.md明確列出了當(dāng)前支持的文檔格式PDF純文本txtCSVExcelxls / xlsxMarkdownmdPowerPointpptxWorddoc / docx在源碼層這些格式的解析統(tǒng)一由 DocumentLoader 完成。它基于 LangChain 社區(qū)加載器通過擴(kuò)展名分發(fā)到對應(yīng)的解析器文件擴(kuò)展名加載器說明pdfPyMuPDFLoader基于 PyMuPDF 的 PDF 解析txtTextLoader純文本csvUnstructuredCSVLoadermodeelements結(jié)構(gòu)化行級加載xls/xlsxUnstructuredExcelLoadermodeelementsExcel 工作表mdUnstructuredMarkdownLoaderMarkdownpptxUnstructuredPowerPointLoaderPowerPointdoc/docxUnstructuredWordDocumentLoaderWord 文檔html/htmBSHTMLLoader額外支持的網(wǎng)頁文件DocumentLoader.load()會遞歸遍歷DOC_PATH指向的目錄os.walk對每個文件按擴(kuò)展名選擇加載器最后把非空的page_content組裝成{raw_content: ..., url: 文件名}結(jié)構(gòu)的文檔列表document.py#L32-L62。若目錄中沒有任何可解析內(nèi)容會拋出 Failed to load any documents!異常提示。二、快速上手僅本地文檔研究Local 模式原文檔給出兩步操作法下面結(jié)合倉庫現(xiàn)狀給出完整可運(yùn)行版本。Step 1設(shè)置 DOC_PATH 環(huán)境變量DOC_PATH指向存放文檔的文件夾是本地模式的唯一必配項(xiàng)。配置文件與默認(rèn)值定義在config/variables/default.py默認(rèn)值為./my-docsconfig/variables/base.py聲明DOC_PATH: str字段config/config.py#L148-L155_set_doc_path()讀取環(huán)境變量并在validate_doc_path()校驗(yàn)失敗時回退到默認(rèn)值export DOC_PATH./my-docs校驗(yàn)失敗的場景包括路徑不存在等情況此時會在終端打印Warning: Error validating doc_path ... Using default doc_path.并回退到./my-docs。因此建議在運(yùn)行前確認(rèn)目錄真實(shí)存在且包含受支持格式的文件。測試配置 config/variables/test_local.json 中給出的示例值為DOC_PATH: tests/docs可作為參照。Step 2a前端方式localhost:8000如果你運(yùn)行的是內(nèi)置前端應(yīng)用后端默認(rèn)localhost:8000在界面中找到Report Source下拉框選擇My Documents即可。該選項(xiàng)在前端組件 ResearchForm.tsx#L135-L145 中實(shí)現(xiàn)其 HTML 結(jié)構(gòu)為option valuelocalMy Documents/option選中的值會以report_source字段隨研究請求發(fā)送給后端見 app/page.tsx#L486最終傳入GPTResearcher實(shí)例。Step 2bPython 包方式pip / 源碼調(diào)用使用 Python 調(diào)用時實(shí)例化GPTResearcher類并傳入report_sourcelocal。構(gòu)造函數(shù)的完整簽名與參數(shù)說明見 agent.py#L53-L137from gpt_researcher import GPTResearcher from gpt_researcher.utils.enum import ReportSource query 根據(jù)我的產(chǎn)品文檔總結(jié) VLX500 的關(guān)鍵規(guī)格 researcher GPTResearcher( queryquery, report_sourceReportSource.Local.value, # 等價于 local ) await researcher.conduct_research() report await researcher.write_report()report_source的取值由 utils/enum.py#L30-L51 的ReportSource枚舉統(tǒng)一定義web、local、azure、langchain_documents、langchain_vectorstore、static、hybrid。若實(shí)例化時未傳report_source則會回退到配置中的report_sourceagent.py#L143。倉庫測試 tests/vector-store.py#L209 中即有report_sourcelocal的調(diào)用示例可參考其組合vector_store的寫法。三、本地模式的源碼執(zhí)行鏈路了解界面與參數(shù)后再看本地模式在后端如何被真正執(zhí)行。研究流程由 ResearchConductor.conduct_research() 編排其中report_source ReportSource.Local.value的分支實(shí)現(xiàn)為researcher.py#L164-L171elif self.researcher.report_source ReportSource.Local.value: self.logger.info(Using local search) document_data await DocumentLoader(self.researcher.cfg.doc_path).load() self.logger.info(fLoaded {len(document_data)} documents) if self.researcher.vector_store: self.researcher.vector_store.load(document_data) research_data await self._get_context_by_web_search( self.researcher.query, document_data, self.researcher.query_domains )整個鏈路可以拆解為三個階段加載DocumentLoader(cfg.doc_path).load()遞歸讀取目錄并解析全部文檔。可選向量化若傳入了vector_store文檔會被包裝為 LangChain Document再按chunk_size1000、chunk_overlap200切塊后寫入向量庫見 vector_store/vector_store.py#L17-L57供后續(xù)相似度檢索復(fù)用。上下文構(gòu)建_get_context_by_web_search()先基于原始問題規(guī)劃子查詢plan_research再對每個子查詢調(diào)用_process_sub_query—— 此時傳入的scraped_data即本地文檔內(nèi)容Agent 不再執(zhí)行聯(lián)網(wǎng)搜索而是直接在這批文檔上做相關(guān)性檢索與壓縮researcher.py#L596-L602。值得注意的是在 Local 模式下Agent 規(guī)劃子查詢階段仍然可能調(diào)用檢索器進(jìn)行初步搜索以輔助規(guī)劃plan_research使用self.researcher.retrievers[0]但最終研究上下文完全來自本地文檔。若配置了curate_sources收集到的上下文還會經(jīng)過 source curator 去重整理researcher.py#L211-L227。四、Local WebHybrid 混合研究模式在僅本地文檔之外gpt-researcher 還支持將本地文檔與 Web 研究結(jié)合形成 Hybrid 混合模式即report_sourcehybrid。它同樣從DOC_PATH加載本地文檔但會同時執(zhí)行本地文檔檢索與 Web 搜索最后把兩路上下文合并交給 LLM 生成報告。對應(yīng)源碼分支見 researcher.py#L172-L186elif self.researcher.report_source ReportSource.Hybrid.value: if self.researcher.document_urls: document_data await OnlineDocumentLoader(self.researcher.document_urls).load() else: document_data await DocumentLoader(self.researcher.cfg.doc_path).load() if self.researcher.vector_store: self.researcher.vector_store.load(document_data) # 本地文檔通道與 Web 通道相互獨(dú)立并發(fā)執(zhí)行 # visited_urls 仍在兩路之間做去重。 docs_context, web_context await asyncio.gather( self._get_context_by_web_search(self.researcher.query, document_data, self.researcher.query_domains), self._get_context_by_web_search(self.researcher.query, [], self.researcher.query_domains), ) research_data self.researcher.prompt_family.join_local_web_documents(docs_context, web_context)從實(shí)現(xiàn)細(xì)節(jié)可以總結(jié)出 Hybrid 模式的幾個關(guān)鍵點(diǎn)數(shù)據(jù)源二選一優(yōu)先使用document_urls在線文檔未提供時回退到DOC_PATH本地文檔。因此即使文檔全部在本地也無需額外配置。并發(fā)執(zhí)行本地文檔通道與 Web 搜索通道通過asyncio.gather并發(fā)運(yùn)行互不阻塞同時visited_urls集合會在兩路之間共享去重避免對同一 URL 重復(fù)抓取。上下文合并兩路結(jié)果由prompt_family.join_local_web_documents()合并。默認(rèn) prompt 家族PromptFamily.Default負(fù)責(zé)組織合并后的上下文順序而不同模型家族的提示模板可能對合并方式有不同實(shí)現(xiàn)枚舉定義見 utils/enum.py#L94-L103。Hybrid 模式適合以私有文檔為主、以公開網(wǎng)絡(luò)資料為輔的場景例如企業(yè)內(nèi)部知識庫 行業(yè)公開報告的交叉驗(yàn)證。關(guān)于混合研究的設(shè)計思路倉庫內(nèi)的官方博客文章《Hybrid Research》有更深入的背景說明見 docs/blog/2024-09-7-hybrid-research/index.md。五、參數(shù)速查與注意事項(xiàng)參數(shù)取值說明DOC_PATH本地目錄路徑如./my-docs文檔根目錄默認(rèn)./my-docs校驗(yàn)失敗時回退默認(rèn)值report_sourceweb/local/hybrid/azure等數(shù)據(jù)來源ReportSource枚舉定義于 utils/enum.pyvector_storeLangChain VectorStore 實(shí)例可選傳入后文檔會切塊1000/200并寫入向量庫前端選項(xiàng)My Documents對應(yīng)report_sourcelocal見 ResearchForm.tsx實(shí)踐中有幾點(diǎn)需要留意目錄遞歸DocumentLoader使用os.walk遞歸遍歷子目錄中的文檔也會被加載適合按主題組織文件夾。格式依賴CSV/Excel/Word/PPT 依賴unstructured相關(guān)加載器首次使用前請確認(rèn)已按 requirements.txt 安裝完整依賴??漳夸浄雷o(hù)目錄內(nèi)沒有任何可解析文檔時加載階段會直接拋出異常終止任務(wù)務(wù)必先自檢DOC_PATH內(nèi)容。文件引用名加載后的每條文檔以basename文件名作為來源標(biāo)識報告中會以此作為本地來源的引用標(biāo)注document.py#L54-L57。六、小結(jié)通過本文你已掌握 gpt-researcher 本地文檔研究的完整路徑設(shè)置DOC_PATH→ 選擇report_sourcelocal前端選 My Documents即可讓 Agent 基于私有文檔生成報告切換為hybrid則疊加 Web 檢索實(shí)現(xiàn)本地為主、網(wǎng)絡(luò)為輔的混合研究。更進(jìn)一步從 DocumentLoader 的格式分發(fā)、ResearchConductor 的分支編排到asyncio.gather的并發(fā)合并你可以清楚地看到本地文檔是如何被解析、向量化、檢索并最終匯入上下文的——這為二次開發(fā)如接入新的文檔格式或自定義合并策略提供了明確的切入點(diǎn)?!久赓M(fèi)下載鏈接】gpt-researcherAn autonomous agent that conducts deep research on any data using any LLM providers項(xiàng)目地址: https://gitcode.com/GitHub_Trending/gp/gpt-researcher創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考