Corvus
YS0meone/Corvus加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,实验室里只剩屏幕的冷光。李明(化名)盯着面前堆积如山的 PDF——他的博士论文需要梳理近十年目标领域的核心文献,可每打开一篇,就引出三篇新的参考文献,像滚雪球一样越滚越大。Semantic Scholar 能搜关键词,Zotero 能管理引用,可这两者之间始终隔着一道鸿沟:他没有一套工具能把「发现论文」和「理解论文」串联起来,最终形成真正属于自己的知识网络。
Corvus 正是为这个场景而生的。它是一个基于多 Agent 架构的学术研究助手,核心理念很简单——用 AI 帮你找到对的论文,再基于这些论文回答你的问题。这不只是另一个 AI 搜索工具,而是一套完整的研究工作流:从语义搜索发现相关工作、引文滚雪球扩展知识边界,到选择性阅读后的问答验证,每一步都有专门 Agent 负责。
Corvus 的架构是它最值得展开讲的部分。整个系统以 LangGraph 实现Supervisor 模式,运行一个精心设计的状态机:
用户输入
↓
Supervisor(查询评估 → 规划器 → 执行器 → 后置处理)
↓ 遇到需要选论文时中断,等待用户操作
用户选择要深入阅读的论文
↓
Paper Finding Agent(最多3轮迭代搜索)
↓
Q&A Agent(基于选中的论文进行 RAG 问答)
↓
最终回答
Supervisor 的职责类似「前台接待员」:它先评估你的问题——是清晰的、需要找论文的、还是两者的结合?根据判断结果,它决定调用哪个子 Agent、调用几次。这个设计避免了传统 RAG 系统「一股脑把所有相关内容都塞给 LLM」的低效问题。
Paper Finding Agent 是整个系统最有技术含量的部分。它不是简单调 Semantic Scholar 的 API 搜关键词就完事,而是采用了循环规划(RePlan)机制:
Q&A Agent 则在用户选定论文后接管。它会在 Qdrant 向量数据库中检索用户选中论文的相关段落,然后用结构化输出决定:证据是否充分?不够的话,应该用什么更好的查询策略重新检索?最多 3 轮迭代后给出最终答案。如果某篇论文在向量化时因为不是 arXiv 论文而只索引了摘要,Agent 会诚实告知用户这个限制。
从技术选型可以看出,这是一个相当「正经」的系统,不是玩具项目:
| 层级 | 技术选型 | 作用 |
|---|---|---|
| Agent 编排 | LangGraph(Supervisor + Subgraph) | 状态机、循环中断、检查点 |
| LLM | Google Gemini 3 Flash(via LangChain) | 主力推理 |
| 后端 API | FastAPI | REST 接口 |
| 异步队列 | Celery + Redis | PDF 解析、论文向量化的后台任务 |
| 前端 | React 19 + Vite + TypeScript | 实时 Agent 状态卡片 |
| 向量数据库 | Qdrant | 论文全文语义检索 |
| 关系数据库 | PostgreSQL | Agent 检查点、用户会话 |
| PDF 解析 | Grobid | 从 PDF 提取结构化文本 |
| 学术搜索 | Semantic Scholar API(2亿+论文) | 论文发现 |
| 网络搜索 | Tavily | 补充上下文 |
| 重排序 | Cohere | 搜索结果精排 |
| 嵌入模型 | OpenAI text-embedding-3-small(1536维) | 论文语义向量 |
数据流水线设计得相当优雅:用户将论文加入列表后,系统会同时做两件事:① 把论文 ID 写入 Agent 上下文(Q&A Agent 知道该在哪些论文范围内检索),② 通过 Celery 将 PDF 解析任务推入 Redis 队列,由后台 Worker 调用 Grobid 解析 PDF,再用 OpenAI 嵌入模型向量化后存入 Qdrant。向量数据库是跨用户共享的,如果有人之前已经索引过某篇论文,新用户添加时会直接命中缓存,无需重复解析。
如果你想在本地运行 Corvus,门槛不算低但也不算离谱。docker-compose.yml 提供了完整的基础设施——PostgreSQL、Redis、Qdrant、Grobid 全部容器化,开箱即用。真正需要你操心的只有两件事:
第一,LLM API Key。 目前硬编码使用 Google Gemini 3 Flash(通过 LangChain),需要配置 GOOGLE_API_KEY。同时还需要 OpenAI API Key(嵌入)、Tavily Key(网络搜索)、Cohere Key(重排序)。如果你是部署在 Fly.io,README 提供了 langgraph dev --allow-blocking 的部署命令。
第二,资源需求。 核心推理靠 Gemini API,不强制本地 GPU,但 Qdrant 和 Grobid 容器会占用内存。实测 8GB RAM 够用,但如果要同时跑多个 Worker 并发处理大 PDF,建议 16GB+。
前端开发体验不错:pnpm dev 直接起热更新,配合 Clerk 做身份验证(可选)。有一个 MCP server 实现,允许你在 Claude Desktop 里直接调用 Corvus 的搜索工具——这算是给 AI 开发者准备的彩蛋。
从代码组织来看,这是一个高质量的开源项目:
interrupt 机制在关键节点暂停等待用户操作的设计思路值得学习eval_qa.sh 评测脚本,说明作者在乎答案质量不足之处:目前没有看到详细的单元测试覆盖(tests 目录存在但内容未知),代码质量评分暂给 78/100。
Corvus 并非万能,有几个必须知晓的限制:
1. 依赖外部 API 生态。 Gemini、OpenAI、Tavily、Cohere、Semantic Scholar——如果任何一个不可用,整个系统就残了。没有本地模型 fallback 方案。
2. PDF 解析质量依赖 Grobid。 非 arXiv 论文的 PDF 解析效果参差不齐,有些论文的表格、公式会被 Grobid 错误提取,影响向量检索质量。
3. 问答深度受限于段落级检索。 Q&A Agent 不是对论文做全文理解再回答,而是基于段落级向量相似度检索。如果你的问题需要跨多个段落综合推理,模型可能给出表面化的答案。
4. 没有多轮对话记忆。 每一次 Q&A 是独立 session,不会记住你之前问过什么、得出什么结论。
Corvus 代表了一个有价值的趋势:把 Agentic RAG 落地到专业领域。过去一年的 RAG 热潮大多停留在「文档问答」层面,Corvus 的引文滚雪球 + 分层 Agent 设计,展示了如何在知识密集型任务中引入更复杂的推理流程。
从增长看,它目前 97 颗星,还处于早期,但 README 质量和系统设计已经超过很多千星项目。如果你做学术方向的 AI 应用,或对 LangGraph 感兴趣,Corvus 值得 clone 下来跑一跑。
本文基于 GitHub 仓库 YS0meone/Corvus(MIT License)分析生成。