English | 简体中文
本项目是一个基于 Python 实现的 AI 驱动的智能搜索与深度研究解决方案。它旨在通过良好的 Agent 架构设计和精密的搜索策略,帮助用户从海量信息中获取高质量、高相关的资料。
核心理念: 提高搜索资料的质量,远比罗列上百个网页更有价值。
- 可完全本地部署: 使用到的所有服务,均可本地部署,除大模型API外,不依赖任何在线服务
- 可视化的研究过程: 整个研究过程完全透明,它会实时地向您“直播” AI 从初步规划、动态搜索、评估网页到迭代深化的每一步
- 兼容OpenAI格式的 API 服务: 基于 Flask 构建,提供符合 OpenAI 格式的 API 接口
- 网页内容压缩: 使用大模型压缩网页内容,减少上下文长度,提高有效信息密度,在相同的上下文下,可以访问更多的网页
- 多个大模型协同工作: 充分发挥各个模型的能力,协同完成整个任务
- 可控的过程: 用户通过提示词,即可控制搜索使用的语言,资料来源限制等
- 精密的提示工程: 内置大量精心设计的 Prompt与消息处理,指导 LLM 完成复杂的搜索规划、信息评估和内容生成任务,在全部使用Gemini 2.5 flash模型的情况下,测试数十次未出现任何差错
- ✨ 主要特性
- 🏗️ 系统架构
- 🚀 快速开始
- 🧩 外部服务依赖
- 🛠️ API 使用示例
- 📦 Python 库依赖
- 💡 效果展示
- 🤔 已知问题
- ✍️ TODO
- 🤝 贡献
- 📄 开源许可
- Star History
我们提供两种部署方式:使用 Docker(推荐)或直接在本地环境运行。
这是最简单、最推荐的部署方式,无需手动管理 Python 环境和依赖。项目根目录已提供 Dockerfile 和 docker-compose.yml 文件。
您可以选择使用 Docker Compose 或 Docker CLI 来启动服务。
A. 使用 Docker Compose (推荐)
项目根目录已包含 docker-compose.yml 文件,内容如下:
version: '3'
services:
deepresearch:
container_name: deepresearch
image: cat3399/deepresearch:latest
ports:
- "5000:5000"
# volumes:
# - ./.env:/app/.env # 如果您想使用本地的 .env 文件,请取消此行的注释在项目根目录下运行以下命令即可启动服务:
docker-compose up -d注意:
docker-compose.yml文件中的volumes部分默认被注释。如果您希望将本地的.env文件直接映射到容器中(推荐做法),请取消该行的注释后再运行
B. 使用 Docker CLI
如果您不使用 Docker Compose,也可以使用以下命令直接运行 Docker 容器:
docker run -d --name deepresearch -p 5000:5000 cat3399/deepresearch:latest服务启动后,即可通过 http://127.0.0.1:5000 访问 API 服务,或通过 http://127.0.0.1:5000/setting 访问可视化配置页面。
- 确保您已安装 Python 3.8+
- 建议使用
uv或venv等虚拟环境。
克隆本仓库到本地后,在项目根目录下运行:
pip install -r requirements.txt可使用浏览器访问
http://127.0.0.1:5000/setting进入配置文件的webui,进行可视化的配置。 保存后配置会立即生效,无需重启服务。
A. 快速上手 (仅使用 Gemini)
这是最简单的配置方式,如果您只想使用 Gemini API,请采用此方法。
- 复制
.env.template文件并重命名为.env
cp .env.template .env- 唯一步骤: 只需在配置文件中填入
ALL_IN_GEMINI_KEY即可。 - 多 Key 支持: 您可以填入多个 Gemini API Key,并用英文逗号
,分隔。
此配置基础与总结模型使用2.5pro,评估使用2.5flash 压缩使用 2.5flash lite 具体模型配置优先级高于此默认值
B. 完整配置 (适用于所有模型)
- 复制
.env.template文件并重命名为.env
cp .env.template .env- 根据您的实际情况,在
.env文件中填写必要的 API 密钥和 URL。
通用说明:
- 所有模型的
API_KEY字段均支持填写多个密钥,用逗号,分隔,程序会从中随机选择一个使用。- 对于除内容压缩模型外的其他模型,如果将特定模型的配置项(如
SEARCH_KEYWORD_API_KEY,SEARCH_KEYWORD_API_URL等)留空,系统将默认使用BASE_CHAT_*的配置。API_TYPE字段用于指定 API 格式,留空默认为OPENAI格式,除内容压缩模型,其余暂不支持Gemini格式(Gemini有OpenAI兼容模式OpenAI 兼容性 | Gemini API | Google AI for Developers)。
以下是关键配置项的详细说明:
API_KEY: 访问本项目 API 服务时所需的授权密钥。
优先使用
SearXNG,当SearXNG请求失败时,会自动切换到Tavily。
-
SEARXNG_URL: 自建 或 公共 SearXNG 实例,必须支持 JSON 格式输出。 -
TAVILY_KEY: Tavily 服务的 API 密钥。 -
TAVILY_MAX_NUM: 使用 Tavily 搜索时,返回结果的最大数量 建议20。SEARCH_API_LIMIT: 限制搜索引擎 API 的并发请求数,请根据您使用的服务商限制进行设置。
如果全部配置,优先级FireCrawl>Crawl4ai>Jina
-
FIRECRAWL_API_URL: FireCrawl 服务的 URL。如果使用官方 API,此项可留空。 -
FIRECRAWL_API_KEY: FireCrawl 服务的 API 密钥。本地部署时若未设置可留空,使用官方 API 则必须填写。 -
CRAWL4AI_API_URL: Crawl4AI 服务的 URL。 -
JINA_API_URL: Jina 服务的URL (官方提供免费版,详见 https://jina.ai/reader/ ) -
JINA_API_KEY: Jina 服务的API 密钥
CRAWL_THREAD_NUM: 抓取网页时的并发任务数。建议根据网络和服务器性能适当调低以提高成功率(例如,FireCrawl 官方免费版限制为 10次/分钟)。MAX_SEARCH_RESULTS: 普通搜索模式下,单次搜索最多处理的网页数量。MAX_DEEPRESEARCH_RESULTS: 深度研究模式下,每次迭代最多处理的网页数量,不建议设置过大 建议3。MAX_STEPS_NUM: 深度研究模式下的最大迭代次数 建议12。
-
基础对话模型 (必须配置)
用于处理用户交互和工具调用,模型需要支持 Function Calling。
BASE_CHAT_API_KEY: API 密钥。BASE_CHAT_API_URL: API 地址。BASE_CHAT_MODEL: 模型名称。
-
搜索关键词生成模型 (必须配置)
SEARCH_KEYWORD_API_KEY,SEARCH_KEYWORD_API_URL,SEARCH_KEYWORD_MODEL
SEARCH_KEYWORD_MODEL 最好使用性能较好并且拥有长上下文处理能力的模型
-
搜索结果评估模型 (必须配置)
EVALUATE_THREAD_NUM: 评估网页价值时的并发任务数。EVALUATE_API_KEY,EVALUATE_API_URL,EVALUATE_MODEL
-
网页内容压缩模型 (必须配置)
建议选择支持长上下文、响应速度快的模型。
COMPRESS_API_TYPE: 指定 API 格式,如GEMINI或OPENAI。COMPRESS_API_KEY: API 密钥。若使用 Gemini,建议至少提供两个密钥以避免速率限制问题。COMPRESS_API_URL: API 地址。COMPRESS_MODEL: 模型名称。
-
最终总结生成模型 (必须配置)
SUMMARY_API_TYPE,SUMMARY_API_KEY,SUMMARY_API_URL,SUMMARY_MODEL
一键测试所有API是否正常
python main.py --test
在项目根目录下运行:
python main.py服务默认启动在 http://0.0.0.0:5000。
搜索引擎 API (二选一):
网页爬虫 (三选一):
LLM: 大模型 API 供应商
您可以使用任何兼容 OpenAI API 格式的客户端(如 LobeChat, One-API, OpenWebui, Cherry Studio)与服务进行交互。
以Cherry Studio为例
提示: 使用带
deep-research的模型 ID 即可触发深度研究模式。支持的模型 ID 列表可通过/v1/models接口获取。
- Flask: Web 框架。
- OpenAI Python SDK: 与 OpenAI 兼容的 API 进行交互。
- Requests: HTTP 请求库。
- BeautifulSoup4: HTML/XML 解析。
- PyMuPDF, python-docx, openpyxl: 用于解析 PDF, DOCX, XLSX 等文件。
- python-dotenv: 加载环境变量。
完整的依赖列表请查看 requirements.txt。
prompt:获取gemini claude deepseek glm qwen全部对话模型的参数,和官方api的价格,用表格清晰的展示,我要非常完整的数据,最后总结的时候不要有遗漏
本项目效果 (除最后总结使用 Gemini 2.5 Pro, 其余均使用 2.5 Flash 模型)
OpenAI 免费版本 Deepresearch 效果 (欢迎提供付费版效果示例)
prompt:rk3399 怎么在linux下,使用qemu 的kvm加速
关于 "RK3399 QEMU 启用 KVM",重点在于大小核,需要使用
taskset绑核。
OpenAI 免费版本 Deepresearch 效果
- 过早结束研究 - 发起请求时带上"详细研究"之类的关键词
- 更加完善的项目管理
- 使用asyncio重构,避免超时,增强并发能力
- 更加优秀的架构设计(目前为顺序迭代,部分任务并不适合这个模式)
- 智能读取网页结果中的URL和图片
- 追问
欢迎通过提交 Pull Requests 或 Issues 来改进本项目。您的每一个贡献都非常有价值!
本项目采用 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) 许可证。
简单来说,这意味着:
- 您可以自由地:
- 共享 — 在任何媒介以任何形式复制、发行本作品
- 演绎 — 修改、转换或以本作品为基础进行创作
- 惟须遵守下列条件:
- 署名 — 您必须给出适当的署名,提供指向本许可的链接,并标明是否对原作品作了修改。
- 非商业性使用 — 您不得将本作品用于商业目的。
- 相同方式共享 — 如果您再混合、转换,或者基于本作品进行创作,您必须基于与原先许可协议相同的许可协议来分发您的贡献。
如果您希望将本项目用于商业目的,请联系作者获取商业授权。







