jordan-gibbs/hyperresearch
GitHub: jordan-gibbs/hyperresearch
一个将 Claude Code 转化为深度研究智能体的框架,通过多步骤 pipeline 和持久知识库自动收集、综合、审计网络研究并生成带完整引文的高质量报告。
Stars: 1118 | Forks: 114
最强大的深度研究框架
**Hyperresearch 将 Claude Code 变成了一个深度研究 agent:目前它在 DeepResearch-Bench RACE 排行榜上名列前茅(基于内部基准测试)。** 一个层级自适应的 16 步 pipeline 接收一个 prompt,并生成一份经过对抗性审计且带有完整来源出处的报告。它读取的每一个来源都会存入一个持久且可搜索的 vault 中,因此每次会话都会比上一次更加智能。
基于针对 DeepResearch-Bench 排行榜快照的分层试点进行的预测()。第三方验证尚在进行中。
## 为何它能胜出
- **单次运行超过 250 个来源。** `premier` 规模配置仅在广度扫描阶段就以 100–130 个来源为目标;引文追踪和空白填补会让最终实际进入 corpus 的数量增加一倍以上。
- **报告发布前会验证每个引文。** 一个多疑的引文检查器会审计每个被引用的来源是否真正支持其对应的句子。幻觉引用和未确认的撤稿在出口处是绝对的阻断项。
- **联合发布不等于共识。** 独立性审计会对衍生副本进行聚类,因此五次转载的一份新闻稿只能等同于一个来源的分量。
- **构建之初即引入对抗机制。** 四个 critic 并行攻击每一份草稿,而一个工具受限的 patcher 只能进行外科手术式的修改。它在物理层面上无法重写报告。
- **绝不丢弃任何内容。** 每个来源都会进入一个支持 markdown 和 SQLite 的可搜索 vault,你的下一次会话在获取任何新内容之前,会优先复用这些资料。
- **崩溃的运行可以恢复。** 每次运行都会保留一个清单(manifest);`run resume` 会从它中断的确切步骤继续执行。
- **规模从 30 分钟到学位论文不等。** 有边界的查询会自动路由到 5 步快速路径。可选的学位论文运行模式会分章节撰写 2.5 万到 8 万字,参考 300 到 450 个来源。
## 安装
```
cd your-project
pip install hyperresearch && hyperresearch install
```
然后在 Claude Code 中执行 `/hyperresearch <任意内容>`。
## 16 步研究 pipeline
入口技能是一个轻量级的路由器。它会确定标准研究查询,然后通过 Claude Code 的 `Skill` 工具为每个阶段调用一个步骤技能。每个步骤的程序只在该步骤实际运行时才会加载到上下文中。这正是防止一个冗长的 pipeline 随着上下文腐烂而悄然丢失步骤的原因。
| # | 步骤 | 功能 | 层级 |
|---|---|---|---|
| 1 | Decompose | 标准查询 → 原子条目 + 覆盖矩阵 + 层级分类 | all |
| 1.5 | Chapter partition | 将原子条目分为 4–10 个章节;随后步骤 2–10 按章节循环 | dissertation |
| 2 | Width sweep | 多视角搜索计划 + 并行抓取器波次 | all |
| 3 | Contradiction graph | 将整个 corpus 中的矛盾配对成排名簇 | full |
| 4 | Loci analysis | 两个并行的 loci-analyst → 带有来源预算的 loci 评分 | full |
| 5 | Depth investigation | K 个并行的 depth-investigator → 带有明确立场的临时笔记 | full |
| 6 | Cross-locus reconcile | 协调明确立场 → comparisons.md | full |
| 7 | Source tensions | 提取专家分歧 → source-tensions.json | full |
| 8 | Corpus critic | “什么来源能推翻这个结论?” + 定向空白填补抓取 | full |
| 9 | Evidence digest | 核心主张 + 逐字引用 → evidence-digest.md | full |
| 10 | Triple draft | 按角度进行来源策划 + 3 个并行的草稿子编排器(light:单一草稿) | all |
| 11 | Synthesize | 计划 + 大纲 + 生成 synthesizer 子 agent → final_report.md | full |
| 12 | Critics | 4 个对抗性 critic 并行运行 → findings JSONs | full |
| 13 | Gap-fetch | 针对 critic 发现的 vault 空白进行定向抓取波次 | full |
| 14 | Patcher | 对草稿应用外科手术式的 Edit 代码块(工具锁定 Read+Edit) | full |
| 14.5 | Cite-check | 验证引文-句子绑定关系;多疑的 LLM 抽查;第二轮外科手术式修改 | full |
| 15 | Polish | 清理 + 去除冗余(工具锁定 Read+Edit 的子 agent) | all |
| 16 | Readability audit | Recommender 编写 JSON 建议;orchestrator 选择性应用 | all |
### 层级与档位:两个规模调节杠杆
**层级** 根据每次查询进行路由。步骤 1 会自动分类为 `light` 或 `full`。`dissertation` 仅支持手动开启;在你的 prompt 中直接要求即可。
| 层级 | 运行内容 | 典型耗时 |
|---|---|---|
| `light` | 有边界的事实性查询、调查、比较:1 → 2 → 10 → 15 → 16 | 约 30–40 分钟 |
| `full`(默认) | 带有对抗性审查的深度论证分析:全部 16 个步骤 + cite-check | 在 `full` 档位下约 1.5–2.5 小时 |
| `dissertation` | 分章节的巨型运行:跨 4–10 个章节包含 300–450 个来源,2.5 万–8 万字 | 约 4–8 小时 |
**档位** 用于设置标准 pipeline 的规模:即源目标、深度预算和渲染到步骤技能中的字数目标。
```
hyperresearch profile list # all profiles + descriptions + current gear
hyperresearch profile use premier # 100–130 sources, doubled depth budget (~3–5 h)
hyperresearch profile use full # back to the 55–80-source baseline
```
该档位会针对每个项目持久化,并在重新安装后依然保留。自定义档位:在 `.hyperresearch/config.toml` 中定义 `[profile.
]`(支持任意配置项:源目标、loci 上限、草稿数量、字数目标、各 agent 的模型),然后执行 `profile use `。
### 两个核心承载原则
1. **修补,绝不重写。** 在步骤 11 生成综合报告后(或者 `light` 层级的步骤 10),唯一的修改方式是外科手术式的 Edit 代码块。Patcher 和审查清理器在 Claude Code 的允许列表级别被工具锁定为 `[Read, Edit]`,因此在物理层面上它们无法 Write 出新草稿。针对每个代码块的限制使得“直接重写”在机制上变得不可能。无法通过小幅修改解决的关键发现会被升级为结构性问题。
2. **标准研究查询即为金科玉律。** 用户的逐字 prompt 会被持久化一次到 `research/runs//query.md` 中,随后会被每个后续步骤和每个生成的子 agent 重新读取。包装器要求(保存路径、引文格式、终端部分)是一个独立的契约。
### 子 agent 名单
模型是在 profile 配置中定义的,而非硬编码。下表展示了默认配置,你可以在 `.hyperresearch/config.toml` 中覆盖其中任何一项:例如带有 `models = { fetcher = "haiku" }` 的 `[profile.full]` 会在下次安装或执行 `profile use` 时将所有 fetcher 切换为 Haiku。
| Agent | 默认模型 | 角色 |
|---|---|---|
| `hyperresearch-fetcher` | Sonnet | 通过 crawl4ai 获取 URL;每波次并行运行 8–12 个 |
| `hyperresearch-source-analyst` | Sonnet | 对任何超过 5000 字的单个长来源进行端到端摘要 |
| `hyperresearch-loci-analyst` | Sonnet | 阅读广度 corpus,返回 1–8 个带有理由的深度 loci |
| `hyperresearch-depth-investigator` | Sonnet | 调查一个 locus,编写一份带有明确立场的临时笔记 |
| `hyperresearch-corpus-critic` | Sonnet | 在起草前进行差距分析:“什么来源会推翻当前方向?” |
| `hyperresearch-draft-orchestrator` | Opus | 每个草稿角度一个;阅读其精选来源列表并编写草稿 |
| `hyperresearch-synthesizer` | Opus | 阅读所有 3 份草稿,编写最终报告(两轮写入,Read+Write 锁定) |
| `hyperresearch-dialectic-critic` | Opus | 寻找草稿遗漏的反面证据 |
| `hyperresearch-depth-critic` | Opus | 寻找临时笔记可以填补的浅层盲点 |
| `hyperresearch-width-critic` | Opus | 寻找 corpus 支持但草稿忽略的主题死角 |
| `hyperresearch-instruction-critic` | Opus | 寻找与 prompt 原子条目相悖的结构性偏差 |
| `hyperresearch-patcher` | Opus | 工具锁定 `[Read, Edit]`。将 critic 的发现作为外科手术式的 Edit 代码块应用 |
| `hyperresearch-cite-checker` | Sonnet | 在发布前对抽样到的引文-句子绑定关系进行严格验证 |
| `hyperresearch-polish-auditor` | Opus | 工具锁定 `[Read, Edit]`。删减冗余,清理格式泄露 |
| `hyperresearch-readability-recommender` | Opus | 编写关于段落节奏及列表/表格转换的 JSON 建议 |
| `hyperresearch-browser-fetcher` | Sonnet | 通过驱动你真实的 Chrome 浏览器(Claude-in-Chrome)清空升级队列 |
## Vault:持久化、可搜索、持续累积
大多数深度研究框架都是一次性的:报告输出,其他一切皆被丢弃。Hyperresearch 会保留它阅读过的内容。每个获取的来源都会进入一个由 SQLite 索引的 vault,未来的会话在获取新内容之前会先搜索这个 vault。
```
hyperresearch search "ion-trap gate fidelity" -j # Full-text search
hyperresearch search "quantum" --include-body -j # Full-body search
hyperresearch note show -j # Batch-read notes
hyperresearch graph hubs -j # Most-connected notes
hyperresearch graph backlinks -j # Reverse links
hyperresearch lint -j # Health check (broken links, missing tags)
```
**Markdown 是真相,SQLite 是缓存。** 笔记以带有 YAML frontmatter 的纯 markdown 格式存放在 `research/notes/` 中。SQLite 索引是可以完全重建的:删除它后执行 `hyperresearch sync` 即可从 markdown 中进行重构。你可以用任何编辑器打开 vault,并用 git 对其进行版本控制。你无需安装该工具即可阅读你自己的研究内容。
**直接获取 PDF。** `hyperresearch fetch` 会自动检测 PDF URL(arXiv、NBER、SSRN、直接的 `.pdf` 链接),并通过 pymupdf 提取全文。原始 PDF 会存放在 `research/raw/.pdf`,并且笔记的 `raw_file:` frontmatter 中会有链接指回原文件。
**来源轨迹。** 每个获取的来源都带有一个 `--suggested-by` 链接,指回当初发现它的源头。这个链条构成了一棵源自初始抓取的有根树;`provenance` lint 规则会捕捉到断开的孤立部分。
**按需开启语义搜索。** `hyperresearch embed sync` 会生成 embedding(提供商可插拔:`voyage`、`openai` 或默认的 `none`,默认选项不需要任何 API 密钥),并且 `search --semantic` 会将向量相似度与全文排名结合起来。
## 来源排名:质量是持久的,而非凭感觉
每个来源都会累积一个综合的 `quality_score`,该分数由来源类型层级、抓取时的实用性、引用权威性(来自 OpenAlex / Semantic Scholar,包括**撤稿标志**)以及 vault 的 PageRank 中心度共同构成:
```
hyperresearch sources score -j # Enrich DOI-bearing notes: citations, venue, retractions
hyperresearch graph rank -j # PageRank over the link + provenance graph
hyperresearch search "q" --ranked -j # Quality-weighted full-text search
hyperresearch sources independence -j # Cluster syndicated/derivative copies: 5 copies of one press release = 1 vote
hyperresearch claims search "q" -j # Query extracted claims across all sources
```
被撤回的来源其质量评分会被强制降至接近于零,并且在发布时会重新检查每个引用的 DOI 以排查最新的撤稿情况,因此昨天发布的撤稿今天就会被发现。即使是复用了旧运行中 vault 里的来源也是如此。
## 运行:可恢复、有预算、受验证
每次运行都拥有一个隔离的工作空间(`research/runs//`)和一个 manifest。并发的运行绝不会发生冲突,并且崩溃的运行会从其停止的确切位置恢复:
```
hyperresearch run status -j # Step-by-step status, spend, escalation queue depth
hyperresearch run resume -j # Exact next step + Skill invocation to continue
hyperresearch run report -j # Per-step wall-time / spend / source-yield telemetry
hyperresearch run verify -j # Ship gate: headings, length, citation density, cite-check resolution
```
`run init --budget 50` 会限制估算的等效 API 花费;一旦触及上限就会阻止运行继续,而不是任由其悄无声息地耗费大量资源。在任何报告发布之前,都会运行一套验证组合:**引文完整性**(每个引用的段落必须逐字存在于 vault 笔记中)、**撤稿引文检查**(未作说明地引用已撤回的来源会阻断发布)、**数值一致性**(无法追溯到证据的数字会被标记),外加 cite-check 步骤中的每条引文绑定审计。
## 结构性强制执行的内容
- **逐字 prompt 为最高准则。** 如果脚手架没有以用户的确切 prompt 开头,`scaffold-prompt` lint 会予以阻断
- **Locus 盖率。** 每一个步骤 4 的 locus 都必须有一个对应的步骤 5 的临时笔记;缺失的临时笔记会被标记为错误
- **仅限修补式修改。** 步骤 14、15、16 被工具锁定为 `[Read, Edit]`。它们无法重新生成草稿
- **关键发现绝不静默跳过。** `patch-surgery` lint 会将 patcher 无法应用的关键发现展示出来
- **引用的文本必须存在。** `quote-integrity` lint 会阻断任何没有在 vault 笔记中逐字出现的引用段落;幻觉引文绝对无法发布
- **撤稿会阻断发布。** 未承认撤稿事实而引用已撤回的来源,在最后一道关卡处将被视为严重错误
- **Schema 完整性。** `tier`、`content_type` 和 `type` 都是受 SQLite CHECK 约束的词汇表;损坏的 frontmatter 无法污染索引
- **出口处捕捉格式泄露。** 脚手架部分、YAML frontmatter 以及 prompt 回显会在发布前由步骤 15 剥离
## 认证爬取 + 浏览器通道
获取来自 LinkedIn、Twitter、付费墙网站或任何你能登录的内容:
```
hyperresearch setup # Browser opens. Log into your sites. Done.
```
LinkedIn、Twitter、Facebook、Instagram 和 TikTok 会自动使用可见浏览器,以避免会话被杀掉。
**被阻断的抓取会升级处理而不是直接死掉。** 当无头爬取在运行过程中遇到登录墙或机器人拦截墙时,该 URL 会作为升级任务进入队列(`hyperresearch escalation list -j`)。如果你安装了 [Claude-in-Chrome](https://claude.com/chrome) 扩展,browser-fetcher agent 会通过驱动你真实且已登录的 Chrome 来清空该队列。硬性边界:**CAPTCHAs、2FA 和登录问题永远不会被自动解决。** 它们会被整合到一条消息中并交由你来处理。
## 学术 API 优先于网络搜索
对于任何拥有研究文献的主题,请优先使用学术 API 进行搜索。它们返回按引用量排名的标准论文;而网络搜索返回的只是衍生评论。
- **Semantic Scholar:** `https://api.semanticscholar.org/graph/v1/paper/search`
- **arXiv:** `https://export.arxiv.org/api/query`
- **OpenAlex:** `https://api.openalex.org/works`
- **PubMed:** `https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi`
在进行完学术扫描之后,运行网络搜索以获取背景、新闻、非学术视角,并且至少执行一次对抗性搜索(例如“对 X 的批评”、“X 的局限性”)。
## 它做不到的事情
- 它无法取代你对哪些来源更重要的判断。由 agent 进行挑选,由你进行引导。
- 它无法获取你未登录的付费墙背后的内容。
- 它通过子 agent 列表在 Anthropic 模型上运行(各 agent 的分配由 profile 的模型映射决定)。使用量会随着层级、档位和 corpus 大小而变化。如果有人想把它移植到 Codex,欢迎提交 PR!
- Lint 关卡能捕捉**结构性**错误(缺少脚手架、来源轨迹断裂、未解决的 CRITICAL 级别问题)。它无法保证事实层面的准确性,这依然需要由你来定夺。
## 环境要求
- Python 3.11+
- [Claude Code](https://claude.com/claude-code)
## 许可证
[MIT](LICENSE)
## Star 历史
[]()标签:AI智能体, Python, Ruby, 人工智能, 信息检索, 无后门, 深度研究, 用户模式Hook绕过, 知识库, 逆向工具