AI 应用AI AgentRAG前端后端【免费下载链接】open-deep-researchAn open source deep research clone. AI Agent that reasons large amounts of web data extracted with Firecrawl项目地址https://gitcode.com/gh_mirrors/ope/open-deep-research点击查看免费下载Open Deep Research 是 OpenAI Deep Research 实验的开源克隆项目其核心思路是用 Firecrawl 为主线结合 lib/ai/index.ts、app/(chat)/api/chat/route.ts/api/chat/route.ts) 等源码完整讲解项目架构、模型提供商切换、一键部署、本地运行、DeepSeek/TogetherAI 依赖安装以及REASONING_MODEL推理模型配置并深入剖析深度研究工具的执行流程与数据流实现帮助你快速掌握部署与二次开发的关键环节。一、项目定位与技术原理Open Deep Research 是一个研究型 AI Agent它接收一个研究主题自主完成搜索search→ 提取extract→ 分析规划analyze plan→ 综合成文synthesis的迭代循环最终产出一份包含引用来源的深度分析报告。与 OpenAI 官方方案不同本项目不对模型做微调而是采用两条关键路径的组合Firecrawl Search Extract通过 Firecrawl 的搜索引擎把实时网页数据喂给 AI并通过 extract 从多个网站提取结构化数据推理模型负责研究分析、文档建议、数据抽取与结构化输出等需要深思熟虑的任务默认使用o1-mini可替换为o1、o3-mini、gpt-4o、DeepSeek-R1、deepseek-reasoner 等。从 app/(chat)/api/chat/route.ts/api/chat/route.ts#L44-L55) 可以看到聊天接口把工具分为三类blocksToolsrequestSuggestions、firecrawlToolssearch、extract、scrape以及allToolsfirecrawl 三件套 deepResearch其中deepResearch是真正驱动深度研究循环的编排工具。二、核心特性与技术栈全景README 将项目能力划分为六个方面以下逐一结合源码展开说明。2.1 Firecrawl Search ExtractFeed realtime data to the AI via search通过搜索把实时数据输入 AI避免模型知识陈旧Extract structured data from multiple websites通过 extract 从多个网站抽取结构化数据供分析阶段使用。Firecrawl 客户端在路由文件中以单例形式初始化app/(chat)/api/chat/route.ts/api/chat/route.ts#L57-L59)const app new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY || , });仓库还额外提供了scrape工具当模型已经拿到具体 URL 时直接抓取该页面的 Markdown 内容命中率高、成本更低。三个工具的定位可以这样区分工具输入输出适用场景searchquery、maxResults搜索结果数组URL、标题、描述发现相关网页extracturls[]、prompt按 prompt 抽取的结构化数据从已知页面获取特定数据点scrapeurl页面 Markdown已有 URL需要整页内容2.2 Next.js App Router先进路由带来无缝导航与性能提升React Server ComponentsRSCs与 Server Actions 用于服务端渲染、提升性能。仓库使用next15.0.3-canary 版本采用app目录结构app/(auth)) 存放认证相关页面与 NextAuth 配置app/(chat)) 存放聊天主界面与全部 API 路由chat、document、files/upload、history、suggestions、vote。2.3 AI SDKVercel AI SDK统一 API 生成文本、结构化对象与工具调用提供构建动态聊天与生成式 UI 的 Hooks支持 OpenAI默认、Anthropic、Cohere 及其他模型提供商。源码中大量使用了 AI SDK 的核心能力例如 app/(chat)/api/chat/route.ts/api/chat/route.ts) 中的streamText、streamObject、generateObject、generateText、createDataStreamResponse前端 components/data-stream-handler.tsx 则通过useChat的 data stream 消费服务端推送的增量事件。2.4 shadcn/ui使用 Tailwind CSS 进行样式设计组件原语来自 Radix UI兼顾无障碍与灵活性。仓库 components/ui 目录内置了 button、card、input、select、tabs、tooltip 等全套 shadcn/ui 组件components.json 记录了样式配置默认使用 Tailwind CSS 变量主题。2.5 数据持久化Vercel PostgresNeon 驱动保存聊天历史与用户数据Vercel Blob高效的文件存储。数据库层由 Drizzle ORM 管理drizzle.config.ts表结构定义在 lib/db/schema.tsUser、Chat、Message、Vote、Document、Suggestion六张表聊天与文档均关联用户 ID。查询封装在 lib/db/queries.ts通过postgres客户端直连POSTGRES_URL。2.6 NextAuth.js 认证简单且安全的认证方案。app/(auth)/auth.ts/auth.ts) 使用 Credentials Provider 支持邮箱密码登录并且支持匿名会话无会话用户访问时自动创建anon_*anonymous.user账号lib/db/schema.ts 中密码使用 bcrypt 加盐哈希因此无需注册即可体验深度研究。认证配置与中间件见 app/(auth)/auth.config.ts/auth.config.ts) 与 middleware.ts。三、模型提供商配置3.1 默认模型与切换机制模板默认使用 OpenAI 的gpt-4o。在 lib/ai/models.ts 中定义了两个可选模型idlabelapiIdentifierdescriptiongpt-4oGPT 4ogpt-4oFor complex, multi-step tasksgpt-4o-miniGPT 4o Minigpt-4o-miniAffordable for complex, multi-step tasksDEFAULT_MODEL_NAME固定为gpt-4o页面通过 cookiemodel-id记忆用户选择见 app/(chat)/page.tsx/page.tsx)。由于底层使用 AI SDK切换到 Anthropic、Cohere 等提供商只需要几行代码。README 特别说明仓库兼容 OpenRouter 与 OpenAI设置OPENROUTER_API_KEY后即可通过 OpenRouter 路由到更多模型。3.2 提供商分发逻辑源码级lib/ai/index.ts 的customModel函数体现了完整的路由决策export const customModel (apiIdentifier: string, forReasoning: boolean false) { const hasOpenRouterKey process.env.OPENROUTER_API_KEY process.env.OPENROUTER_API_KEY ! ****; const modelId forReasoning ? getReasoningModel(apiIdentifier) : apiIdentifier; if (hasOpenRouterKey) { return wrapLanguageModel({ model: openrouter(modelId), middleware: customMiddleware }); } const model modelId deepseek-ai/DeepSeek-R1 ? togetherai(modelId) : modelId deepseek-reasoner ? deepseek(modelId) : openai(modelId); return wrapLanguageModel({ model, middleware: customMiddleware }); };决策顺序为若配置了有效的OPENROUTER_API_KEY非****占位值所有模型都统一走 OpenRouter否则按模型 ID 分发deepseek-ai/DeepSeek-R1→ TogetherAIdeepseek-reasoner→ DeepSeek其余 → OpenAI所有模型统一经过wrapLanguageModel包裹中间件当前为空实现见 lib/ai/custom-middleware.ts属于可扩展点。3.3 环境变量全景本地运行时需要 .env.example 中定义的环境变量完整清单如下变量用途来源OPENAI_API_KEYOpenAI 模型调用platform.openai.comOPENROUTER_API_KEYOpenRouter 模型路由可选openrouter.aiFIRECRAWL_API_KEYFirecrawl 搜索/提取/抓取firecrawl.devAUTH_SECRETNextAuth 会话签名密钥随机生成BLOB_READ_WRITE_TOKENVercel Blob 文件存储Vercel 部署时自动注入POSTGRES_URLPostgres 数据库连接串Vercel 部署时自动注入UPSTASH_REDIS_REST_URL/UPSTASH_REDIS_REST_TOKEN限流Upstash Redisconsole.upstash.comREASONING_MODEL推理模型可选见下文第四节BYPASS_JSON_VALIDATION是否绕过 JSON Schema 校验默认false见下文第四节TOGETHER_API_KEYTogetherAI 的 DeepSeek-R1可选together.aiDEEPSEEK_API_BASE_URL/DEEPSEEK_API_KEYDeepSeek API可选默认https://api.deepseek.com/v1deepseek.com注意切勿把.env文件提交到版本库否则会泄露密钥导致他人控制你的 OpenAI 与认证提供商账号。四、部署与本地运行4.1 一键部署到 VercelREADME 提供 Vercel 一键部署入口部署时需配置四个环境变量AUTH_SECRETOPENAI_API_KEYOPENROUTER_API_KEYFIRECRAWL_API_KEY同时关联 Postgres 与 Blob 两个存储服务Vercel 会自动为部署项目注入POSTGRES_URL与BLOB_READ_WRITE_TOKEN。Upstash Redis 变量限流用也建议一并配置否则 lib/rate-limit.ts 中的限流器将因缺少连接信息而无法工作。4.2 本地运行步骤README 给出了标准的三步流程配合 Vercel CLI 拉取环境变量# 1. 安装 Vercel CLI 并链接本地实例到 Vercel/GitHub 账号生成 .vercel 目录 npm i -g vercel vercel link # 2. 拉取环境变量或手动复制 .env.example 为 .env 并填充 vercel env pull # 3. 安装依赖 pnpm install # 4. 执行数据库迁移 pnpm db:migrate # 5. 启动开发服务 pnpm dev启动后访问 localhost:3000 即可使用。数据库迁移脚本db:migrate实际执行npx tsx lib/db/migrate.ts见 package.json 的 scripts 字段迁移 SQL 存放在 lib/db/migrations当前共 6 个迁移文件0000–0005覆盖用户、聊天、消息、投票、文档、建议等全部表结构。项目还提供db:generate、db:push、db:studio、db:check等 Drizzle 工具链命令。4.3 模型依赖安装DeepSeek / TogetherAI默认模板只内置 OpenAI 依赖若要使用其他推理模型需按 README 安装对应依赖# DeepSeek pnpm add ai-sdk/deepseek # TogetherAI 的 DeepSeek pnpm add ai-sdk/togetherai在当前仓库的 package.json 中这两个依赖已经内置ai-sdk/deepseek: ^0.1.8、ai-sdk/togetherai: ^0.1.9。README 同时提醒TogetherAI 存在最大速率限制请参考其官方 rate limits 文档超出会被限流。五、推理模型配置REASONING_MODEL这是 README 中技术含量最高的部分。系统为推理任务研究分析、结构化输出等使用一套独立的模型与用户对话选用的通用模型互不影响。5.1 可用选项提供商模型说明OpenAIgpt-4o、o1、o3-mini原生支持 JSON schema 结构化输出TogetherAIdeepseek-ai/DeepSeek-R1需设置BYPASS_JSON_VALIDATIONtrueDeepSeekdeepseek-reasoner需设置BYPASS_JSON_VALIDATIONtrue5.2 关键注意事项只有部分 OpenAI 模型gpt-4o、o1、o3-mini原生支持结构化 JSON 输出其他模型如deepseek-reasoner可用于推理但可能需要关闭 JSON schema 校验使用不支持 JSON schema 的模型时在.env中设置BYPASS_JSON_VALIDATIONtrue该开关允许非 OpenAI 模型参与推理任务注意关闭 JSON 校验后模型响应可能结构化程度降低推理模型用于需要结构化思考与分析的任务包括研究分析research analysis、文档建议document suggestions、数据抽取data extraction、结构化响应structured responses未指定REASONING_MODEL时默认使用o1-mini指定了无效模型时回退到o1-mini。5.3 源码级验证lib/ai/index.ts 用白名单 兜底机制实现上述全部行为const VALID_REASONING_MODELS [o1, o1-mini, o3-mini, deepseek-ai/DeepSeek-R1, deepseek-reasoner, gpt-4o] as const; const JSON_SUPPORTED_MODELS [gpt-4o, gpt-4o-mini, o1, o3-mini] as const; const REASONING_MODEL process.env.REASONING_MODEL || o1-mini; const BYPASS_JSON_VALIDATION process.env.BYPASS_JSON_VALIDATION true; function getReasoningModel(modelId: string) { // 用户当前选择的模型本身是合法推理模型则继续使用 if (VALID_REASONING_MODELS.includes(modelId as ReasoningModel)) { return modelId; } const configuredModel REASONING_MODEL; // 配置了无效模型 → 回退 o1-mini 并告警 if (!VALID_REASONING_MODELS.includes(configuredModel as ReasoningModel)) { console.warn(Invalid REASONING_MODEL ${configuredModel}, falling back to ${fallback}); return fallback; } // 未绕过 JSON 校验且模型不支持 JSON schema → 告警 if (!BYPASS_JSON_VALIDATION !supportsJsonOutput(configuredModel)) { console.warn(Warning: Model ${configuredModel} does not support JSON schema. Set BYPASS_JSON_VALIDATIONtrue to override); } return configuredModel; }注意一个细节若用户在聊天中选择的模型本身就在VALID_REASONING_MODELS白名单中如选了gpt-4o则推理任务直接复用该模型否则才启用REASONING_MODEL配置。5.4 配置示例在.env中添加# 可选值deepseek-reasoner、deepseek-ai/DeepSeek-R1 REASONING_MODELdeepseek-reasoner # 使用不支持 JSON schema 的模型时必填 BYPASS_JSON_VALIDATIONtrue推理模型是自动生效的无论用户在通用聊天中选择哪个模型只要应用需要结构化输出或复杂分析就会自动切换到推理模型lib/ai/index.ts 中forReasoning参数驱动。5.5 推理模型的实际应用点在深度研究工具内部推理模型出现在两个关键环节app/(chat)/api/chat/route.ts/api/chat/route.ts)分析规划analyzeAndPlan通过generateObject让推理模型产出结构化analysis对象summary、gaps、nextSteps、shouldContinue、nextSearchTopic、urlToSearch决定是否继续搜索及下一步方向最终综合final synthesis通过generateText让推理模型基于全部 findings 与 summaries 生成长篇深度分析maxTokens上限 16000并要求包含关键洞察、结论、不确定点与来源引用。六、深度研究工具的运行机制源码剖析6.1 工具定义与整体流程deepResearch工具app/(chat)/api/chat/route.ts/api/chat/route.ts#L692-L1038)接收一个topic参数内部维护一个researchState状态机核心字段包括findings已收集的研究发现文本 来源 URLsummaries每轮分析产生的摘要nextSearchTopic/urlToSearch推理模型给出的下一轮搜索方向currentDepth/maxDepth当前深度与最大深度默认 7failedAttempts/maxFailedAttempts连续失败次数与上限3 次completedSteps/totalExpectedSteps进度统计maxDepth * 5。主循环为search → extract → analyze → 决定是否继续Search 阶段app.search(searchTopic)搜索当前主题成功后把结果写入source-delta数据流Extract 阶段取搜索结果前 3 条 URL加上推理模型指定的urlToSearch并行调用app.extract提取关键信息重点提取事实、数据与专家观点合并为新的 findingsAnalyze 阶段调用analyzeAndPlan让推理模型总结已学内容、指出 gaps、给出下一步搜索建议若shouldContinuefalse或没有剩余 gaps 则停止Synthesis 阶段停止后调用推理模型生成最终长篇分析报告并通过finish数据流事件回传。此外还有两个保护机制单次研究总时长上限 4 分 30 秒timeLimit 4.5 * 60 * 1000服务端路由maxDuration 300秒以及连续 3 次失败自动终止循环避免无限消耗 API 配额。6.2 实时进度推送Data Stream 协议研究过程通过数据流实时推送给前端定义的事件类型见 app/(chat)/api/chat/route.ts/api/chat/route.ts) 与 components/data-stream-handler.tsx事件类型载荷作用progress-init{ maxDepth, totalSteps }初始化总进度depth-delta{ current, max, completedSteps, totalSteps }更新当前深度activity-delta{ type, status, message, timestamp, depth }追加一条活动日志search/extract/analyze/synthesis/thoughtsource-delta{ url, title, description }追加一个参考来源finish最终分析文本研究完成前端 components/data-stream-handler.tsx 消费这些事件activity-delta与source-delta会进入 lib/deep-research-context.tsx 维护的全局状态addActivity、addSource最终渲染在 components/deep-research.tsx 的右侧浮层面板中——该面板包含Activity与Sources两个标签页活动项用黄/绿/红圆点表示 pending / complete / error 状态来源列表直接展示域名链接。6.3 限流保护聊天接口对所有请求启用 Upstash 限流lib/rate-limit.ts基于UPSTASH_REDIS_REST_URL/UPSTASH_REDIS_REST_TOKEN创建 Redis 实例使用滑动窗口Ratelimit.slidingWindow(5, 60 s)即每个用户 60 秒内最多 5 次请求超限返回 HTTP 429。由于深度研究单轮可能耗时数分钟这一限流对防止 API 成本失控尤为重要。七、二次开发建议扩展推理模型在 lib/ai/index.ts 的VALID_REASONING_MODELS白名单中加入新模型 ID并按需补充对应 AI SDK provider 的分发分支lib/ai/index.ts调整研究深度与时长修改deepResearch工具的maxDepth默认 7与timeLimit默认 4.5 分钟两个常量即可控制研究规模与成本定制研究提示词analyzeAndPlan的 prompt要求模型报告剩余时间、判断是否继续、指定下一步搜索主题与最终综合的 prompt 都集中在 app/(chat)/api/chat/route.ts/api/chat/route.ts) 中可直接改写以适配特定领域自定义中间件lib/ai/custom-middleware.ts 目前为空实现AI SDK 的wrapLanguageModel中间件可在此注入日志、缓存、重试等横切逻辑。八、常见问题速查Q没有 OpenAI API Key只想用 DeepSeek 做研究分析A设置DEEPSEEK_API_KEY与REASONING_MODELdeepseek-reasoner并在.env中开启BYPASS_JSON_VALIDATIONtrue注意关闭 JSON 校验后输出结构化程度可能下降。Q配置了REASONING_MODEL但没生效A检查模型 ID 是否在 lib/ai/index.ts 白名单内不在白名单会回退到o1-mini并打印告警日志。另外若配置了OPENROUTER_API_KEY推理模型也会统一走 OpenRouter 路由。Q本地启动报数据库/限流错误A确认POSTGRES_URL已配置且已执行pnpm db:migrateUPSTASH_REDIS_REST_URL/UPSTASH_REDIS_REST_TOKEN缺失时限流器不可用建议按 .env.example 补齐。Q部署到 Vercel 需要哪些变量A最低要求AUTH_SECRET、OPENAI_API_KEY或OPENROUTER_API_KEY、FIRECRAWL_API_KEY存储与限流相关变量由 Vercel 与 Upstash 按需配置。赞分享AI 应用AI AgentRAG前端后端【免费下载链接】open-deep-researchAn open source deep research clone. AI Agent that reasons large amounts of web data extracted with Firecrawl项目地址https://gitcode.com/gh_mirrors/ope/open-deep-research点击查看免费下载相关推荐Open Deep Research基于 Firecrawl 与 LLM 的迭代式深度研究 Agent 实战指南Open Deep Research基于 Firecrawl 与 LLM 的迭代式深度研究 Agent 实战指南 导读 本文围绕开源仓库 deep reseaAI 应用深度研究AI Agent大模型Open Deep Research核心技术解析Firecrawl推理模型深度集成Open Deep Research是一款开源的深度研究工具通过Firecrawl网络数据提取与AI推理模型的深度集成为用户提供智能化的网络数据分析和深度研AI 应用AI AgentRAG前端后端aicommits 完全指南用 AI 自动生成 Git 提交信息的 CLI 工具aicommits 完全指南用 AI 自动生成 Git 提交信息的 CLI 工具 导读 本文以开源项目 aicommits https://link.gitc人工智能AI 应用开发工具本地部署上一篇WxJava 企业微信 Spring Boot Starter 接入指南配置、自动装配与多存储策略源码解析下一篇5步安装Habitat-Lab从环境配置到第一个具身AI示例运行创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考