关于 Deep Research
Deep Research 是一个可使用多种 LLM 生成深度研究报告的开源应用,支持 SSE API 和 MCP 服务。数据在本地处理和存储,适合需要快速生成研究报告并自行部署的用户。
主要功能
- 01多种 LLM 与搜索引擎支持
- 02思考模型与任务模型分离
- 03本地知识库上传与处理
- 04报告编辑与知识图谱生成
- 05研究历史保存与阶段性重新研究
- 06SSE API 与 MCP 服务
适用场景
- 01围绕特定主题快速生成带来源的 Markdown 研究报告
- 02结合本地文档文件生成研究材料
- 03在其他 AI 服务中通过 MCP 调用深度研究能力
MCP 相关
Deep Research 提供 StreamableHTTP 与 SSE 两种传输方式的 MCP 服务,向 MCP 客户端暴露深度研究功能,需要配置较长的超时时间。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
闪电般快速的深度研究报告
Deep Research 运用多种强大的 AI 模型,只需几分钟即可生成深入的研究报告。它结合先进的“思考”模型和“任务”模型,并利用互联网连接,针对各种主题提供快速而有见地的分析。隐私至关重要——所有数据均在本地处理和存储。
✨ 功能
- 快速深度研究: 约 2 分钟即可生成全面的研究报告,大幅加快研究进程。
- 多平台支持: 支持快速部署到 Vercel、Cloudflare 等平台。
- AI 驱动: 使用先进的 AI 模型,提供准确且有价值的分析。
- 注重隐私: 所有数据均存储在浏览器本地,确保数据隐私和安全。
- 支持多种大模型: 支持多种主流大模型,包括 Gemini、OpenAI、Anthropic、Deepseek、Atlas Cloud、Grok、Mistral、Azure OpenAI、任何兼容 OpenAI 的大模型、OpenRouter、Ollama 等。
- 支持网页搜索: 支持 Searxng、Tavily、Firecrawl、fastCRW、Exa、Bocha、Brave 等搜索引擎,让不支持搜索的大模型也能更便捷地使用网页搜索功能。
- 思考与任务模型: 采用精密的“思考”模型和“任务”模型,平衡深度与速度,快速提供高质量结果。支持切换研究模型。
- 支持进一步研究: 你可以在项目的任何阶段完善或调整研究内容,也可以从该阶段重新进行研究。
- 本地知识库: 支持上传和处理文本、Office、PDF 等资源文件,以生成本地知识库。
- 成果编辑: 支持编辑研究内容,并提供两种编辑模式:WYSIWYM 和 Markdown。还可以调整阅读难度、文章长度,并翻译全文。
- 知识图谱: 支持一键生成知识图谱,帮助你系统地了解报告内容。
- 研究历史: 支持保存研究历史,你可以随时查看之前的研究结果,并再次进行深入研究。
- 支持本地和服务端 API: 提供本地和服务端 API 调用选项,灵活满足你的需求。
- 支持 SaaS 和 MCP: 你可以通过 SSE API 将本项目用作深度研究服务(SaaS),也可以通过 MCP 服务在其他 AI 服务中使用。
- 支持 PWA: 借助渐进式 Web 应用(PWA)技术,你可以像使用软件一样使用本项目。
- 支持多密钥负载: 支持多密钥负载,以提高 API 响应效率。
- 支持多种语言:英语、简体中文、西班牙语。
- 采用现代技术构建: 使用 Next.js 15 和 Shadcn UI 开发,带来现代、高性能且视觉效果出色的用户体验。
- MIT 许可: 根据 MIT 许可证开源,个人和商业用途均可免费使用。
🎯 路线图
- 支持保存研究历史
- 支持编辑最终报告和搜索结果
- 支持其他大模型
- 支持文件上传和本地知识库
- 支持 SSE API 和 MCP 服务
🚀 开始使用
使用免费的 Gemini(推荐)
-
一键部署本项目,可以选择部署到 Vercel 或 Cloudflare
目前本项目支持部署到 Cloudflare,但你需要按照 如何部署到 Cloudflare Pages 的说明进行操作。
-
开始使用
使用其他大模型
- 将本项目部署到 Vercel 或 Cloudflare
- 设置大模型 API 密钥
- 设置大模型 API 基础 URL(可选)
- 开始使用
⌨️ 开发
按照以下步骤,即可在本地浏览器中运行 Deep Research。
先决条件
安装
-
克隆仓库:
git clone https://github.com/u14app/deep-research.git cd deep-research -
安装依赖:
pnpm install # or npm install or yarn install -
设置环境变量:
你需要将文件
env.tpl修改为.env,或创建一个.env文件并将变量写入该文件。# For Development cp env.tpl .env.local # For Production cp env.tpl .env -
运行开发服务器:
pnpm dev # or npm run dev or yarn dev打开浏览器并访问 http://localhost:3000,即可使用 Deep Research。
自定义模型列表
该项目支持自定义模型列表,但仅在代理模式下生效。请在 .env 文件或环境变量页面中添加名为 NEXT_PUBLIC_MODEL_LIST 的环境变量。
自定义模型列表使用 , 分隔多个模型。如果要禁用某个模型,请使用 - 符号后接模型名称,例如 -existing-model-name。如果只允许指定模型可用,请使用 -all,+new-model-name。
🚢 部署
Vercel
Cloudflare
目前该项目支持部署到 Cloudflare,但需要按照如何部署到 Cloudflare Pages的说明进行操作。
Docker
Docker 版本需要为 20 或更高版本,否则会提示找不到镜像。
⚠️ 注意:大多数情况下,docker 版本会比最新版本晚 1 到 2 天,因此部署后会持续出现“存在更新”的提示,这是正常现象。
docker pull xiangfa/deep-research:latest
docker run -d --name deep-research -p 3333:3000 xiangfa/deep-research
你也可以指定其他环境变量:
docker run -d --name deep-research \
-p 3333:3000 \
-e ACCESS_PASSWORD=your-password \
-e GOOGLE_GENERATIVE_AI_API_KEY=AIzaSy... \
xiangfa/deep-research
或者构建自己的 docker 镜像:
docker build -t deep-research .
docker run -d --name deep-research -p 3333:3000 deep-research
如果需要指定其他环境变量,请在上述命令中添加 -e key=value 进行设置。
使用 docker-compose.yml 部署:
version: '3.9'
services:
deep-research:
image: xiangfa/deep-research
container_name: deep-research
environment:
- ACCESS_PASSWORD=your-password
- GOOGLE_GENERATIVE_AI_API_KEY=AIzaSy...
ports:
- 3333:3000
或者构建自己的 docker compose:
docker compose -f docker-compose.yml build
静态部署
你也可以直接构建静态页面版本,然后将 out 目录中的所有文件上传到任何支持静态页面的网站服务,例如 Github Page、Cloudflare、Vercel 等。
pnpm build:export
⚙️ 配置
如“入门”部分所述,Deep Research 使用以下环境变量配置服务器端 API:
所有可用的环境变量请参阅文件 env.tpl。
环境变量重要说明:
-
隐私提醒: 这些环境变量主要用于服务器端 API 调用。使用本地 API 模式时,无需 API 密钥或服务器端配置,从而进一步保护你的隐私。
-
多密钥支持: 支持多个密钥,各密钥之间用
,分隔,例如key1,key2,key3。 -
安全设置: 设置
ACCESS_PASSWORD可以更好地保护服务器 API 的安全。 -
使变量生效: 添加或修改此环境变量后,请重新部署项目,以使更改生效。
📄 API 文档
目前该项目支持两种 API 形式:服务器发送事件(SSE)和模型上下文协议(MCP)。
服务器发送事件 API
Deep Research API 提供实时接口,用于启动和监控复杂的研究任务。
建议通过 @microsoft/fetch-event-source 使用 API。要获取最终报告,需要监听 message 事件,数据将以文本流的形式返回。
POST 方法
端点:/api/sse
方法:POST
请求体:
interface SSEConfig {
// Research topic
query: string;
// AI provider, Possible values include: google, openai, anthropic, deepseek, atlascloud, xai, mistral, azure, openrouter, openaicompatible, pollinations, ollama
provider: string;
// Thinking model id
thinkingModel: string;
// Task model id
taskModel: string;
// Search provider, Possible values include: model, tavily, firecrawl, crw, exa, bocha, searxng
searchProvider: string;
// Response Language, also affects the search language. (optional)
language?: string;
// Maximum number of search results. Default, `5` (optional)
maxResult?: number;
// Whether to include content-related images in the final report. Default, `true`. (optional)
enableCitationImage?: boolean;
// Whether to include citation links in search results and final reports. Default, `true`. (optional)
enableReferences?: boolean;
}
请求头:
interface Headers {
"Content-Type": "application/json";
// If you set an access password
// Authorization: "Bearer YOUR_ACCESS_PASSWORD";
}
详见API 文档。
GET 方法
这是一种有趣的实现。你可以直接通过 URL 观看深度研究的整个过程,就像看视频一样。
你可以通过以下链接访问深度研究报告:
http://localhost:3000/api/sse/live?query=AI+trends+for+this+year&provider=pollinations&thinkingModel=openai&taskModel=openai-fast&searchProvider=searxng
查询参数:
// The parameters are the same as POST parameters
interface QueryParams extends SSEConfig {
// If you set the `ACCESS_PASSWORD` environment variable, this parameter is required
password?: string;
}
Model Context Protocol (MCP) 服务
目前支持 StreamableHTTP 和 SSE 服务端传输方式。
StreamableHTTP 服务端点:/api/mcp,传输类型:streamable-http
SSE 服务端点:/api/mcp/sse,传输类型:sse
{
"mcpServers": {
"deep-research": {
"url": "http://127.0.0.1:3000/api/mcp",
"transportType": "streamable-http",
"timeout": 600
}
}
}
注意: 深度研究需要较长时间才能完成,因此需要设置较长的超时时间,以免研究过程中断。
如果服务端设置了 ACCESS_PASSWORD,MCP 服务将受到保护,你需要添加额外的请求头参数:
{
"mcpServers": {
"deep-research": {
"url": "http://127.0.0.1:3000/api/mcp",
"transportType": "streamable-http",
"timeout": 600,
"headers": {
"Authorization": "Bearer YOUR_ACCESS_PASSWORD"
}
}
}
}
启用 MCP 服务需要设置全局环境变量:
# MCP Server AI provider
# Possible values include: google, openai, anthropic, deepseek, atlascloud, xai, mistral, azure, openrouter, openaicompatible, pollinations, ollama
MCP_AI_PROVIDER=google
# MCP Server search provider. Default, `model`
# Possible values include: model, tavily, firecrawl, crw, exa, bocha, searxng
MCP_SEARCH_PROVIDER=tavily
# MCP Server thinking model id, the core model used in deep research.
MCP_THINKING_MODEL=gemini-2.0-flash-thinking-exp
# MCP Server task model id, used for secondary tasks, high output models are recommended.
MCP_TASK_MODEL=gemini-2.0-flash-exp
注意: 为确保 MCP 服务正常使用,你需要设置相应模型和搜索引擎的环境变量。有关具体的环境变量参数,请参阅 env.tpl。
🪄 工作原理
-
研究主题
- 输入研究主题
- 使用本地研究资源(可选)
- 开始思考(或重新思考)
-
提出想法
- 系统会提出问题
- 回答系统问题(可选)
- 编写研究计划(或重写研究计划)
- 系统输出研究计划
- 开始深入研究(或重新研究)
- 系统生成 SERP 查询
- 系统会提出问题
-
信息收集
- 初步研究
- 根据 SERP 查询检索本地研究资源
- 根据 SERP 查询从互联网收集信息
- 深入研究(此过程可以重复)
- 提出研究建议(可选)
- 开始新一轮信息收集(过程与初步研究相同)
- 初步研究
-
生成最终报告
- 提出写作要求(可选)
- 将所有研究材料汇总为一份完整的 Markdown 报告
- 重新生成研究报告(可选)
flowchart TB
A[Research Topic]:::start
subgraph Propose[Propose your ideas]
B1[System asks questions]:::process
B2[System outputs the research plan]:::process
B3[System generates SERP queries]:::process
B1 --> B2
B2 --> B3
end
subgraph Collect[Information collection]
C1[Initial research]:::collection
C1a[Retrieve local research resources based on SERP queries]:::collection
C1b[Collect information from the Internet based on SERP queries]:::collection
C2[In-depth research]:::recursive
Refine{More in-depth research needed?}:::decision
C1 --> C1a
C1 --> C1b
C1a --> C2
C1b --> C2
C2 --> Refine
Refine -->|Yes| C2
end
Report[Generate Final Report]:::output
A --> Propose
B3 --> C1
%% Connect the exit from the loop/subgraph to the final report
Refine -->|No| Report
%% Styling
classDef start fill:#7bed9f,stroke:#2ed573,color:black
classDef process fill:#70a1ff,stroke:#1e90ff,color:black
classDef recursive fill:#ffa502,stroke:#ff7f50,color:black
classDef output fill:#ff4757,stroke:#ff6b81,color:black
classDef collection fill:#a8e6cf,stroke:#3b7a57,color:black
classDef decision fill:#c8d6e5,stroke:#8395a7,color:black
class A start
class B1,B2,B3 process
class C1,C1a,C1b collection
class C2 recursive
class Refine decision
class Report output
🙋 常见问题
为什么我的 Ollama 或 SearXNG 无法正常工作,并显示错误 TypeError: Failed to fetch?
如果浏览器安全限制导致请求产生 CORS 错误,你需要配置 Ollama 或 SearXNG 参数以允许跨域请求。你也可以考虑使用服务端代理模式,由后端服务发出请求,从而有效避免跨域问题。
🛡️ 隐私
Deep Research 的设计充分考虑了你的隐私。所有研究数据和生成的报告都存储在你的本地计算机上。 我们不会收集或向外部服务传输任何研究数据(除非你明确使用服务端 API 调用;在这种情况下,数据会通过你配置的代理(如果有)发送到 API)。保护你的隐私是我们的首要任务。
🙏 致谢
- Next.js - 用于构建高性能 Web 应用的 React 框架。
- Shadcn UI - 设计精美的组件,帮助简化 UI 开发。
- AI SDKs - 为 Deep Research 提供智能研究能力。
- Deep Research - 感谢项目
dzhng/deep-research带来的灵感。
🤝 参与贡献
欢迎为 Deep Research 贡献!如果你对改进、修复错误或添加新功能有想法,请随时:
- Fork 此仓库。
- 为你的功能或错误修复创建新分支。
- 进行修改并提交。
- 发起 pull request。
对于重大更改,请先创建 issue,讨论你计划进行的更改。
✉️ 联系方式
如果你有任何问题、建议或反馈,请创建新的 issue。
📝 许可证
Deep Research 基于 MIT License 发布。此许可证允许免费用于商业和非商业用途,也允许修改和分发。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。