- 离线批量跑调研任务:给一批问题生成带引用的长报告,用队列喂给它的 HTTP 接口比逐个开浏览器搜再粘贴进 LLM 省事,代价是每个问题要烧掉多次搜索 API 调用和 token
- 需要溯源的内容生产:报告逐条挂来源链接,比让通用 chat 模型直接写更便于事后核对,但引用质量取决于检索到的页面本身
- 把内部数据源接进研究流程:通过 MCP 挂 GitHub、数据库等专用源,比只用公开搜索更贴近内部知识,前提是这些源本身有可查询接口
- 在线问答的低首 token 延迟场景不适合它:规划加并行抓取是分钟级流程,要秒级响应就该直接走 RAG 或单次检索,别套这层 agent
gpt-researcher
assafelovicApache-2.0活跃维护 有专家点评一个能自主完成深度调研的智能体,可接入任意 LLM 提供商,自动搜索、抓取网页并汇总成研究报告。
An autonomous agent that conducts deep research on any data using any LLM providers
专家点评
上手难度:进阶更新于 2026-11-11把「一个问题拆成多路检索再合成带引用报告」这套流程做成可自托管的服务,顶替手工搜索加人工汇总
适用场景
踩坑
- 两个必填密钥(OPENAI_API_KEY、TAVILY_API_KEY)缺一个就跑不起来,Tavily 是付费搜索服务,成本随问题数线性增长;想换搜索后端要改代码而不是改配置
- 部署侧问题在 issue 里反复出现:Windows 上 weasyprint/GTK+3、Chromedriver、Docker 镜像缺失 langchain 模块、Mac M1 交叉构建 amd64 报 sse3 指令集不支持——撞上的时机基本都是「本地跑通了想上容器或换机器」这一步
- Jev 上下文过滤需要额外的 TYPESAFE_API_KEY,缺失时静默降级成 BM25,报告质量会变但不会报错,容易误以为是模型问题
同类对比
同类可看 open-deep-research 一类实现和各家 API 自带的 deep research 端点;如果只是要单轮检索增强而非多步规划,直接上检索库加一次 LLM 调用更可控,不必引入整个 agent 服务
git clone https://github.com/assafelovic/gpt-researcher.git
cd gpt-researcher
pip install -r requirements.txt
python -m uvicorn main:app --reloadREADME 未说明显存或 GPU 要求,仅要求 Python 3.12 或更高版本
项目说明
由 README 自动翻译提炼开源深度研究智能体,自动拆解问题、并行检索并生成带引用的研究报告
一个能自主完成深度调研的智能体,可接入任意 LLM 提供商,自动搜索、抓取网页并汇总成研究报告。
核心能力
- 规划器拆解研究问题,执行代理并行抓取资料
- 汇总 20+ 来源并逐条溯源,生成超 2000 字带引用报告
- 支持 Jev 智能上下文过滤,无密钥时回退 BM25
- Deep Research 树状递归探索,可配置深度与广度
- 支持 MCP 接入 GitHub、数据库等专用数据源
容易踩的坑
需先配置 OPENAI_API_KEY 和 TAVILY_API_KEY,否则无法运行;Jev 过滤需额外 TYPESAFE_API_KEY,缺失时自动降级为 BM25;服务默认监听 8000 端口,访问 http://localhost:8000
- v3.8.0New paper UI, detailed reports in 3:27, and 53 community fixes最新正式版2026-11-09 · 2026-11-09 15:12 UTC
A new UI, and detailed reports in under 4 minutes
The Next.js app has a new paper design that matches gptr.dev. Settings live in one modal with tabs for Research, MCP, Documents and Backend; a run shows a plain-language feed, and the sources margin slides in once writing starts. The previous UI is still available at
/classic.Detailed reports now finish in 3:27 instead of 9:11. Sections are researched in parallel, and the default writer is now
gpt-6-sol, which starts writing within seconds instead of reasoning for close to a minute per section first. Measurements and the model comparison are in #2272.⚠️ Changes to note
- Default writer model:
SMART_LLMis nowopenai:gpt-6-sol(wasopenai:gpt-5.4). SetSMART_LLMto keep the previous model. - LLM idle timeout: an LLM call that sends nothing for 300 seconds now fails with a clear error instead of hanging the run. Tune it with
LLM_TIMEOUT(0disables it). (#2220) - Docker: the root
.envis no longer copied into images.docker composeloads it at runtime (needs Compose 2.24+); withdocker run, pass--env-file .env. If you ever pushed an image you built locally, rotate the keys that were in your.env. generate_reportnow raises when every LLM attempt fails, instead of returning an empty report. (#2219)
Also in this release
- Prebuilt Docker images for
linux/amd64andlinux/arm64on GHCR:ghcr.io/assafelovic/gpt-researcherandghcr.io/assafelovic/gpt-researcher-frontend-nextjs, tagged with the version andlatest(#1517) - Research observer: an optional lifecycle observer for integrations that want structured progress events (#2232)
- MiniMax regional providers and Flash defaults (#1924), a configurable TypeSafe base URL (#2243), and Deploy on Render with a
render.yamlblueprint (#2184) - Multi-agent plan review feedback from the web UI works again, and the multi-agent writer uses
SMART_TOKEN_LIMITandREASONING_EFFORT(#2272) - Deep research honors reasoning budgets, counts retries and nested researchers in costs, and keeps cited learnings at the word limit (#2260, #2209, #2208)
- MCP search no longer blocks the event loop, and the
max_toolscap is enforced (#2262, #2263) - Configuration:
reasoning_effortfrom JSON config files,DOC_PATH/REPORT_SOURCEenv overrides, UTF-8 config files, and image generation settings are all honored again (#2230, #2248, #2249, #2199, #2246) - Retriever, scraper and document loader fixes across Exa, Google, Bing, Bocha, PubMed Central, arXiv, online documents and Windows text files
- Retriever plugins: a community list with Keenable and Sciverse (#2176, #2225)
53 community pull requests went into this release. Thank you to everyone who contributed.
Install:
pip install -U gpt-researcher(0.17.0)What's Changed
- fix(readme): point star history chart back to official star-history.com by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2204
- docs: drop STORM references and describe current research approach by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2205
- fix(config): preserve loaded MCP settings by @imharjot in https://github.com/assafelovic/gpt-researcher/pull/2193
- fix(config): stop sharing mutable defaults between Config instances by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2206
- fix(ci): cap pytest below 9.2 so --forked tests stop crashing by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2269
- docs: use a single black tile logo in the READMEs by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2270
- New paper UI, and detailed reports in 3:27 inste
- Default writer model:
- v3.7.0Jev update and many bug fixes and improvements2026-09-26 · 2026-09-26 17:46 UTC
查看更新说明
Smarter context, no embeddings required
GPT Researcher now picks the context it sends to the LLM by usefulness, not similarity. Every passage scraped for a research question is scored by Jev on how useful it is for answering that question, and only the passages that help are kept.
On a benchmark of 28 research tasks replayed on identical sources:
Nothing is required. With
TYPESAFE_API_KEYset, Jev is used. Without one, or if a Jev call fails, GPT Researcher falls back to local keyword (BM25) ranking, so you no longer need an embeddings provider for standard research. Report chat uses the same filter.- Docs: https://docs.gptr.dev/docs/gpt-researcher/gptr/context-filter
- Benchmark, method and code:
evals/context_filter/
⚠️ Changes to note
- Python 3.12+ is now required.
- Default context filter: without a TypeSafe key, the default is now keyword ranking instead of
embeddings. It matched or beat embeddings on every measure in the benchmark. To keep the old
behaviour, set
CONTEXT_FILTER=embeddings.
Also in this release
- Retriever plugins: ship a search provider as its own package via the
gpt_researcher.retrieversentry point (#2154) - Fixed the frontend WebSocket opening a second connection on a new research run (#2159)
- Multi-agent sections no longer repeat each other's content (#2158)
- Self-hosted frontend assets, no third-party CDNs (#2082)
- 25+ community fixes across retrievers, scrapers and deep research
- Docs: redesigned homepage, current model hallucination leaderboard, fixed builds on fresh installs
Install:
pip install -U gpt-researcher(0.16.0)What's Changed
- fix: define stream output for multi-agent execution by @alaningtrump in https://github.com/assafelovic/gpt-researcher/pull/2092
- fix(deps): pin mcp below 2.0 to keep MCPRetriever importable by @DAI-BZ in https://github.com/assafelovic/gpt-researcher/pull/2147
- fix(bing): bound request and handle transport failures by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2133
- fix(semantic-scholar): bound request and guard response parsing by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2130
- fix(openalex): handle malformed JSON responses by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2128
- fix(multi-agents): load .env before tracing setup by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2126
- fix: preserve caller-provided empty visited_urls set by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2122
- fix: handle zero generated queries in deep research by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2111
- fix: reject whitespace-only deep research query fields by @L4XB in https://github.com/assafelovic/gpt-researcher/pull/2117
- fix(google): filter YouTube hosts case-insensitively by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2113
- fix(retrievers): fall back after blank normalization by @remote-controlled-man in https://github.com/assafelovic/gpt-researcher/pull/2105
- fix(research): preserve complementary web context by @remote-controlled-man in https://github.com/assafelovic/gpt-researcher/pull/2104
- fix(research): record prefetched URLs in visited_urls by @feiiiiii5 in https://github.com/assafelovic/gpt-researcher/pull/2123
- fix(research): preserve initial planning sources in report context by @guybass in https://github.com/assafelovic/gpt-researcher/pull/2145
- fix(mcp): detect URL schemes case-insensitively by @anupamking01 in https://github.com/assafelovic/gpt-researcher/pull/2114
- fix(chat): preserve sources from the actual search tool invocation by @beemines in https://github.com/
- v3.6.1Major fixes2026-08-24 · 2026-08-24 06:58 UTC
查看更新说明
What's Changed
- fix: restore main, add CI, and land 97 queued PRs by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2074
- fix(readme): restore broken star history chart by @Dessalines39394 in https://github.com/assafelovic/gpt-researcher/pull/2066
- docs: document scholarly retriever configuration by @pikaqiu2333 in https://github.com/assafelovic/gpt-researcher/pull/1863
- chore(deps): update python-pptx requirement from >=1.0.0 to >=1.0.2 by @dependabot[bot] in https://github.com/assafelovic/gpt-researcher/pull/1927
- chore: remove the dead poetry dependency block, test the declared Python floor by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2075
- Add agent observability with Monocle by @imohammedansari in https://github.com/assafelovic/gpt-researcher/pull/1873
- fix: make the empty-source-urls notification reachable (#1978) by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2076
- fix(scraper): keep extracted content when web_base_loader enrichment fetch fails by @AmirF194 in https://github.com/assafelovic/gpt-researcher/pull/2078
- feat(retrievers): declare whether results need scraping, instead of guessing by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/2079
New Contributors
- @Dessalines39394 made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/2066
- @pikaqiu2333 made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1863
- @imohammedansari made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1873
- @AmirF194 made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/2078
Full Changelog: https://github.com/assafelovic/gpt-researcher/compare/v3.6.0...v3.6.1
- v3.6.02026-07-18 · 2026-07-18 07:56 UTC
查看更新说明
Introducing a super stable version with enhanced improvements across security, stability and performance. We're also introducing a collaboration with Langchain with the latest deep agents framework here - https://github.com/assafelovic/gpt-researcher/tree/main/deep_agents
Thank you and welcome to all the new contributors!
What's Changed
- security: sanitize untrusted content, add SECURITY.md, pin brotli by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1820
- Fix silently dropped token limits, real usage-based cost tracking, and research pipeline robustness by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1861
- Add Deep Agents example: GPT Researcher as the research engine in a LangChain deep agent by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1857
- Resolve post-merge conflicts: 4 retriever/context fixes (supersedes #1895-1898) by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1906
- Retriever hardening: 20 guard fixes against malformed results (supersedes #1837…#1890) by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1907
- Scraper robustness: 6 fixes (title/PDF-detection/temp-file/dimensions) (supersedes #1824…#1842) by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1908
- Multi-agent robustness: bound revision loops + exact sentinels (supersedes #1883/#1885/#1886) by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1909
- Core/misc hardening: 11 fixes (costs/query/llm/agent/mcp/config) (supersedes #1822…#1902) by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1910
- Reconcile master→main: GetXAPI retriever, Claude 4.x temp fix, MiniMax M3, curate_sources fixes by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1911
- feat: add Nebius Token Factory as LLM and embedding provider by @teionarr in https://github.com/assafelovic/gpt-researcher/pull/1891
- chore(multi_agents): nest AG2 variant under multi_agents/ag2 by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1912
- docs(skill): fix drift in .claude reference docs (retrievers, multi-agents, api) by @assafelovic in https://github.com/assafelovic/gpt-researcher/pull/1913
New Contributors
- @teionarr made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1891
Full Changelog: https://github.com/assafelovic/gpt-researcher/compare/v3.5.1...v3.6.0
- v3.5.12026-06-23 · 2026-06-23 18:08 UTC
查看更新说明
What's Changed
- fix: add MAX_REVISIONS guard to prevent infinite revision loop by @varshiniml7 in https://github.com/assafelovic/gpt-researcher/pull/1783
- Improve SimpleQA eval observability with structured logging and latency metadata by @SeanHe727 in https://github.com/assafelovic/gpt-researcher/pull/1790
- feat(retrievers): add Brave Search support by @agbocsardi in https://github.com/assafelovic/gpt-researcher/pull/1793
- Abstain instead of fabricating a report when no content was gathered by @aaravanmay in https://github.com/assafelovic/gpt-researcher/pull/1799
- fix(deep-research): keep oversized context from collapsing to empty by @XiaojuCH in https://github.com/assafelovic/gpt-researcher/pull/1802
- feat(retrievers): add fastCRW search retriever by @us in https://github.com/assafelovic/gpt-researcher/pull/1806
- feat: Add FactChecker and Visualizer Agents to Multi-Agent Workflow by @KasraBashirioskooei in https://github.com/assafelovic/gpt-researcher/pull/1809
- Add GroundRoute retriever (multi-engine search, cached) by @jp0xz in https://github.com/assafelovic/gpt-researcher/pull/1812
- feat: add Atlas Cloud as an OpenAI-compatible LLM provider by @lucaszhu-hue in https://github.com/assafelovic/gpt-researcher/pull/1813
- Update web_scraping.py by @Joly0 in https://github.com/assafelovic/gpt-researcher/pull/1816
- Fix Azure blob loader path handling by @konnisan in https://github.com/assafelovic/gpt-researcher/pull/1817
New Contributors
- @varshiniml7 made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1783
- @SeanHe727 made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1790
- @agbocsardi made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1793
- @aaravanmay made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1799
- @XiaojuCH made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1802
- @us made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1806
- @KasraBashirioskooei made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1809
- @jp0xz made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1812
- @lucaszhu-hue made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1813
- @konnisan made their first contribution in https://github.com/assafelovic/gpt-researcher/pull/1817
Full Changelog: https://github.com/assafelovic/gpt-researcher/compare/v3.5.0...v3.5.1
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
English | 中文 | 日本語 | 한국어 | Русский
🔎 GPT Researcher
GPT Researcher the first open deep research agent designed for both web and local research on any given task.
The agent produces detailed, factual, and unbiased research reports with citations. GPT Researcher provides a full suite of customization options to create tailor made and domain specific research agents. GPT Researcher goes well beyond RAG: planner and execution agents break each task into research questions, decision models keep only the context that is actually useful for answering them, multi-agent workflows coordinate specialized agents from planning to publication, and recursive deep research explores a topic in both breadth and depth. Research runs in parallel, which keeps it fast, stable and reliable, and reduces misinformation.
Our mission is to empower individuals and organizations with accurate, unbiased, and factual information through AI.
Why GPT Researcher?
- Objective conclusions for manual research can take weeks, requiring vast resources and time.
- LLMs trained on outdated information can hallucinate, becoming irrelevant for current research tasks.
- Current LLMs have token limitations, insufficient for generating long research reports.
- Limited web sources in existing services lead to misinformation and shallow results.
- Selective web sources can introduce bias into research tasks.
Demo
Install as Claude Skill
Extend Claude's deep research capabilities by installing GPT Researcher as a Claude Skill:
npx skills add assafelovic/gpt-researcher
Once installed, Claude can leverage GPT Researcher's deep research capabilities directly within your conversations.
Architecture
The core idea is to utilize 'planner' and 'execution' agents. The planner generates research questions, while the execution agents gather relevant information. The publisher then aggregates all findings into a comprehensive report.
Steps:
- Create a task-specific agent based on a research query.
- Generate questions that collectively form an objective opinion on the task.
- Use a crawler agent for gathering information for each question.
- Summarize and source-track each resource.
- Filter and aggregate summaries into a final research report.
Tutorials
Features
- 📝 Generate detailed research reports using web and local documents.
- 🖼️ Smart image scraping and filtering for reports.
- 🍌 AI-generated inline images using Google Gemini (Nano Banana) for visual illustrations.
- 📜 Generate detailed reports exceeding 2,000 words.
- 🌐 Aggregate over 20 sources for objective conclusions.
- 🎯 Smart context filtering with Jev, with no API key or embeddings required by default.
- 🖥️ Frontend available in lightweight (HTML/CSS/JS) and production-ready (NextJS + Tailwind) versions.
- 🔍 JavaScript-enabled web scraping.
- 📂 Maintains memory and context throughout research.
- 📄 Export reports to PDF, Word, and other formats.
📖 Documentation
See the Documentation for:
- Installation and setup guides
- Configuration and customization options
- How-To examples
- Full API references
⚙️ Getting Started
Installation
-
Install Python 3.12 or later. Guide.
-
Clone the project and navigate to the directory:
git clone https://github.com/assafelovic/gpt-researcher.git cd gpt-researcher -
Set up API keys by exporting them or storing them in a
.envfile.export OPENAI_API_KEY={Your OpenAI API Key here} export TAVILY_API_KEY={Your Tavily API Key here}(Optional) For enhanced tracing and observability, you can also set:
# export LANGCHAIN_TRACING_V2=true # export LANGCHAIN_API_KEY={Your LangChain API Key here}For custom OpenAI-compatible APIs (e.g., local models, other providers), you can also set:
export OPENAI_BASE_URL={Your custom API base URL here} -
Install dependencies and start the server:
pip install -r requirements.txt python -m uvicorn main:app --reload
Visit http://localhost:8000 to start.
For other setups (e.g., Poetry or virtual environments), check the Getting Started page.
Run as PIP package
pip install gpt-researcher
Example Usage:
...
from gpt_researcher import GPTResearcher
query = "why is Nvidia stock going up?"
researcher = GPTResearcher(query=query)
# Conduct research on the given query
research_result = await researcher.conduct_research()
# Write the report
report = await researcher.write_report()
...
For more examples and configurations, please refer to the PIP documentation page.
🔧 MCP Client
GPT Researcher supports MCP integration to connect with specialized data sources like GitHub repositories, databases, and custom APIs. This enables research from data sources alongside web search.
export RETRIEVER=tavily,mcp # Enable hybrid web + MCP research
from gpt_researcher import GPTResearcher
import asyncio
import os
async def mcp_research_example():
# Enable MCP with web search
os.environ["RETRIEVER"] = "tavily,mcp"
researcher = GPTResearcher(
query="What are the top open source web research agents?",
mcp_configs=[
{
"name": "github",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {"GITHUB_TOKEN": os.getenv("GITHUB_TOKEN")}
}
]
)
research_result = await researcher.conduct_research()
report = await researcher.write_report()
return report
For comprehensive MCP documentation and advanced examples, visit the MCP Integration Guide.
🍌 Inline Image Generation
GPT Researcher can automatically generate and embed AI-created illustrations in your research reports using Google's Gemini models (Nano Banana).
# Enable in your .env file
IMAGE_GENERATION_ENABLED=true
GOOGLE_API_KEY=your_google_api_key
IMAGE_GENERATION_MODEL=models/gemini-2.5-flash-image
When enabled, the system will:
- Analyze your research context to identify visualization opportunities
- Pre-generate 2-3 relevant images during the research phase
- Embed them inline as the report is written
Images are generated with dark-mode styling that matches the GPT Researcher UI, featuring professional infographic aesthetics with teal accents.
Learn more about Image Generation in our documentation.
✨ Deep Research
GPT Researcher now includes Deep Research - an advanced recursive research workflow that explores topics with agentic depth and breadth. This feature employs a tree-like exploration pattern, diving deeper into subtopics while maintaining a comprehensive view of the research subject.
- 🌳 Tree-like exploration with configurable depth and breadth
- ⚡️ Concurrent processing for faster results
- 🤝 Smart context management across research branches
- ⏱️ Takes ~5 minutes per deep research
- 💰 Costs ~$0.4 per research (using
o3-minion "high" reasoning effort)
Learn more about Deep Research in our documentation.
🎯 Smart Context Filtering with Jev
Every research run scrapes dozens of pages, and only some of each page helps answer the question. Before anything reaches the LLM, GPT Researcher decides which passages to keep. By default it uses Jev by TypeSafe, a model that scores how useful each passage is for the question, rather than how similar its words or embedding are.
Jev's context is 59% more relevant than embeddings, at the same cost (73% of kept passages relevant vs 46%). We benchmarked every option on 28 research tasks, replaying the same scraped sources so that only the filter changed:
| Context filter | Relevant passages kept | Head-to-head vs embeddings | Filter time | Cost per report | Needs |
|---|---|---|---|---|---|
| Jev (default) | 73% | 15 wins · 10 ties · 3 losses | 1.7s | $0.115 | TYPESAFE_API_KEY |
| Keyword (fallback) | 51% | 14 wins · 8 ties · 6 losses | 0.02s | $0.116 | nothing |
| Embeddings | 46% | — | 1.0s | $0.117 | an embedding provider |
| No filter | — | 13 wins · 11 ties · 4 losses | — | $0.192 | nothing |
Writing the report takes ~45s whichever filter you use, so a run's total time moves only by the filter step. Passing every page unfiltered writes the broadest reports on open-ended questions, but costs 65% more.
Nothing is required. With a TYPESAFE_API_KEY, Jev is used. Without one, or if a Jev call fails, GPT Researcher falls back to keyword (BM25) ranking, which runs locally with no API key, model or embeddings. Embeddings remain available as an option.
export TYPESAFE_API_KEY=... # use Jev (the default when a key is set)
export CONTEXT_FILTER=auto # auto | jev | keyword | embeddings | none
See the Context Filter docs and the full benchmark for method, caveats and how to reproduce it.
Run with Docker
Step 1 - Install Docker
Step 2 - Clone the '.env.example' file, add your API Keys to the cloned file and save the file as '.env'
Step 3 - Within the docker-compose file comment out services that you don't want to run with Docker.
docker-compose up --build
If that doesn't work, try running it without the dash:
docker compose up --build
Step 4 - By default, if you haven't uncommented anything in your docker-compose file, this flow will start 2 processes:
- the Python server running on localhost:8000
- the React app running on localhost:3000
Visit localhost:3000 on any browser and enjoy researching!
📄 Research on Local Documents
You can instruct the GPT Researcher to run research tasks based on your local documents. Currently supported file formats are: PDF, plain text, CSV, Excel, Markdown, PowerPoint, and Word documents.
Step 1: Add the env variable DOC_PATH pointing to the folder where your documents are located.
export DOC_PATH="./my-docs"
Step 2:
- If you're running the frontend app on localhost:8000, simply select "My Documents" from the "Report Source" Dropdown Options.
- If you're running GPT Researcher with the PIP package, pass the
report_sourceargument as "local" when you instantiate theGPTResearcherclass code sample here.
🤖 MCP Server
We've moved our MCP server to a dedicated repository: gptr-mcp.
The GPT Researcher MCP Server enables AI applications like Claude to conduct deep research. While LLM apps can access web search tools with MCP, GPT Researcher MCP delivers deeper, more reliable research results.
Features:
- Deep research capabilities for AI assistants
- Higher quality information with optimized context usage
- Comprehensive results with better reasoning for LLMs
- Claude Desktop integration
For detailed installation and usage instructions, please visit the official repository.
👪 Multi-Agent Assistant
As AI evolves from prompt engineering and RAG to multi-agent systems, we're excited to introduce multi-agent assistants built with LangGraph and AG2.
By using multi-agent frameworks, the research process can be significantly improved in depth and quality by leveraging multiple agents with specialized skills. This project showcases how a team of AI agents can work together to conduct research on a given topic, from planning to publication.
An average run generates a 5-6 page research report in multiple formats such as PDF, Docx and Markdown.
Check it out here or head over to our documentation for LangGraph and AG2 for more information.
🔍 Observability
GPT Researcher supports LangSmith for enhanced tracing and observability, making it easier to debug and optimize complex multi-agent workflows.
To enable tracing:
- Set the following environment variables:
export LANGCHAIN_TRACING_V2=true export LANGCHAIN_API_KEY=your_api_key export LANGCHAIN_PROJECT="gpt-researcher" - Run your research tasks as usual. All LangGraph-based agent interactions will be automatically traced and visualized in your LangSmith dashboard.
🖥️ Frontend Applications
GPT-Researcher now features an enhanced frontend to improve the user experience and streamline the research process. The frontend offers:
- An intuitive interface for inputting research queries
- Real-time progress tracking of research tasks
- Interactive display of research findings
- Customizable settings for tailored research experiences
Two deployment options are available:
- A lightweight static frontend served by FastAPI
- A feature-rich NextJS application for advanced functionality
For detailed setup instructions and more information about the frontend features, please visit our documentation page.
🚀 Contributing
We highly welcome contributions! Please check out contributing if you're interested.
Please check out our roadmap page and reach out to us via our Discord community if you're interested in joining our mission.
✉️ Support / Contact us
- Community Discord
- Author Email: [email protected]
🛡 Disclaimer
This project, GPT Researcher, is an experimental application and is provided "as-is" without any warranty, express or implied. We are sharing codes for academic purposes under the Apache 2 license. Nothing herein is academic advice, and NOT a recommendation to use in academic or research papers.
Our view on unbiased research claims:
- The main goal of GPT Researcher is to reduce incorrect and biased facts. How? We assume that the more sites we scrape the less chances of incorrect data. By scraping multiple sites per research, and choosing the most frequent information, the chances that they are all wrong is extremely low.
- We do not aim to eliminate biases; we aim to reduce it as much as possible. We are here as a community to figure out the most effective human/llm interactions.
- In research, people also tend towards biases as most have already opinions on the topics they research about. This tool scrapes many opinions and will evenly explain diverse views that a biased person would never have read.