面向长报告研究任务的 Deep Research Agent。
当前版本已经从早期的单体同步脚本,演进为一套可恢复、可排队、可评测、可控成本的研究系统,核心目标是:
- 生成有引用支撑的长报告
- 支持
low / medium / high三档检索模式 - 支持任务排队、状态跟踪、恢复执行
- 区分模型成本与外部检索成本
- 用公开 benchmark 和内部 benchmark 持续做质量回归
- 后端:
FastAPI + Celery + Redis + LangGraph - 状态持久化:
SQLite - 前端:
React + Vite - 任务提交:
SQLite task state + SQLite publish_outbox + async outbox publisher - 恢复能力:
checkpoint + task state + KnowledgeManager snapshot - 默认检索档位:
medium
POST /research 不再在请求线程里同步调用 celery.send_task(...)。
现在的提交语义是:
- 任务已接受并持久化
- 异步发布到 Celery/Redis
- 前端可以立即拿到
task_id
任务详情里会返回:
publish_statuspublish_attempt_countpublish_last_errorqueued_at
支持显式恢复入口:
POST /research/{task_id}/resume
恢复不再只依赖 LangGraph checkpoint,而是同时恢复:
- task state
- latest checkpoint metadata
KnowledgeManagersnapshot
恢复相关状态字段包括:
resume_countresumed_from_checkpointlast_checkpoint_idlast_checkpoint_nodeinterruption_state
低成本优先:
Serper basic- 轻量抓取
- 不走 retrieval 侧长文抽取链
适合预算最敏感场景。
默认平衡档:
SerperTavily Extract- authority-first 检索与证据门控
这是当前默认推荐模式。
高覆盖高成本档:
Tavily SearchMapCrawlExtract
适合追求覆盖率和报告质量,但外部检索成本明显更高。
检索链已经从“搜到什么抓什么”收敛成显式的 Evidence Acquisition 流程:
- 候选来源召回
- 来源质量判断
- 抓取编排与失败分类
- 证据门控
当前重点特性:
- authority-first 检索
- 高价值来源优先进入主证据集合
- PDF blocked host 与非 PDF blocked host 分开处理
retrieval_failed显式区分“没搜到”和“搜到了但抓不下来”
当前已完成的第一轮专项优化:
- PDF blocked 专项
arxiv.org/ 学术 HTML host 可达性修复direct_answer_support_rate统计口径与 authority 判定修复
请求示例:
{
"query": "DeepSeek R1 vs OpenAI o1 reasoning differences and 2025 compute cost",
"research_mode": "medium"
}返回内容包括:
statusresearch_modellm_cost_rmbexternal_cost_rmb_esttotal_cost_rmb_estserper_queriestavily_credits_estelapsed_secondspublish_statusresume_count
审计字段里仍保留:
external_cost_usd_estserper_cost_usd_esttavily_cost_usd_est
前端提供:
- 查询输入
- 三档模式选择
- 任务状态轮询
- 成本与耗时摘要展示
入口文件:
- frontend/src/App.tsx
- frontend/src/components/SearchBar.tsx
- frontend/src/components/StatusMonitor.tsx
Python:
pip install -r requirements.txt前端:
cd frontend
npm installcelery -A gateway.tasks worker -l infouvicorn gateway.api:app --host 0.0.0.0 --port 8000 --reloadcd frontend
npm run dev至少需要:
OPENAI_API_KEY=...
SERPER_API_KEY=...
TAVILY_API_KEY=...常用可选项:
REDIS_BROKER_URL=redis://localhost:6379/0
REDIS_RESULT_BACKEND=redis://localhost:6379/1
DEFAULT_RESEARCH_MODE=medium
MAX_TASK_DURATION_SECONDS=300
MAX_TASK_NODE_COUNT=15
MAX_TASK_RMB_COST=1.0项目当前分两条评测线:
用于模式、成本、稳定性和长报告质量回归。
典型脚本:
python scripts/benchmark_modes.pypython scripts/judge_bakeoff.pypython scripts/recovery_benchmark.pypython scripts/concurrency_probe.pypython scripts/cost_ab_experiment.py
当前主线是本地兼容的 DeepResearch Bench 风格长报告评测,不是官方 leaderboard 成绩。
核心脚本:
python scripts/public_benchmark_deepresearch_bench.pypython scripts/deepresearch_bench_scoring.py
评分关注:
drb_report_scorefact_scorecomprehensivenessinsightinstruction_followingreadability
额外诊断指标:
blocked_source_rateblocked_attempt_rateauthority_source_rateweak_source_hit_ratedirect_answer_support_rateretrieval_failed
以下不是官方榜单成绩,而是当前本地兼容公开 benchmark 的最新 3 题 pilot:
avg_drb_report_score = 7.0553avg_fact_score = 8.4direct_answer_support_rate = 0.8333blocked_source_rate = 0.0retrieval_failed = 1/3
这说明:
- 第一轮 blocked/access 优化是有效的
- 系统已经不再主要卡在 PDF 或
arxiv可达性 - 当前剩余瓶颈开始收敛到“高权威证据覆盖仍不够完整”
常用回归:
python verify_modules.py
pytest tests/test_research_modes.py -q
pytest tests/test_benchmark_scoring.py -q
pytest tests/test_deepresearch_bench.py -q
pytest tests/test_evidence_acquisition.py -q
pytest tests/test_writer_graph.py -q- 架构上下文:docs/AI_CONTEXT.md
- Benchmark 归档:docs/benchmarks
- 历史决策归档:docs/adr
- 默认档位仍然是
medium - 第一轮检索可达性优化已经完成
- 当前下一阶段主瓶颈不是 writer 报错,也不是 PDF blocked
- 下一步更适合继续打:
- 高权威 evidence slot 覆盖
retrieval_failedauthority_source_rateweak_source_hit_rate
本项目采用 MIT License 开源协议。详情见:LICENSE