自动深度研究技能。
loop (1 轮 = 并行 search 所有待处理子问题):
1. 动态拆解子问题(初始 3 个,可临时追加)
2. 并行 search 所有待处理子问题
3. 串行 read_page + 提炼,写入 memo(防爆)
4. 合并去重
5. 评估:弹药够不够?有没有决定性新概念影响最初结论不清晰需要继续研究?
退出条件:
- 所有子问题已完成 AND 弹药够 OR
- 达到 max_iterations(默认 5 轮)
简单模式(默认):
[待处理] / [处理中] / [已完成]每次研究创建一个独立文件夹 output/{研究主题slug}/:
output/
└── {topic-slug}/
├── state.json # 执行状态(轮数、子问题进度)
├── memo.json # 结构化研究笔记(JSON,方便 agent 读取判断)
├── sources.json # 所有来源 URL 和摘要
└── report.md # 最终报告
文件夹命名规则:用主题关键词 + 短时间戳,如 react-server-components_20240331
{
"iteration": 1,
"max_iterations": 5,
"original_query": "用户问题",
"subproblems": [
{"id": 1, "title": "子问题1", "status": "completed", "sources": 2},
{"id": 2, "title": "子问题2", "status": "processing", "sources": 1},
{"id": 3, "title": "子问题3", "status": "pending", "sources": 0}
],
"has_new_concepts": false,
"enough_evidence": false
}
{
"subproblems": [
{
"id": 1,
"title": "子问题标题",
"findings": [
{"source": "URL", "priority": "P1", "key_points": ["点1", "点2"], "conflict": null},
{"source": "URL", "priority": "P4", "key_points": ["点1"], "conflict": "与来源A冲突"}
]
}
],
"new_concepts": ["概念A", "概念B"],
"uncertain_points": ["争议点1"]
}
{
"sources": [
{"url": "URL", "title": "标题", "priority": "P1", "added_at": "2024-01-01"}
]
}
推荐使用脚本(见 scripts/ 目录):
search.sh [max_results] [output_file] read_page.sh [output_file] 在系统环境变量或 .env 文件中配置:
# 搜索 API(选一个)
export TAVILY_API_KEY="your-key-here" # https://tavily.com 获取
# DuckDuckGo 免费,无需配置
# 页面读取 API
export JINA_API_KEY="your-key-here" # https://jina.ai/reader 获取
联网搜索,返回带 URL 和高信息密度摘要的列表。
脚本调用:
./scripts/search.sh "React Server Components" 5
手动调用:
# Tavily(需要 API key)
curl "https://api.tavily.com/search" \
-H "Authorization: Bearer $TAVILY_API_KEY" \
-d '{"query": "query", "max_results": 5}'
# DuckDuckGo(免费,搜索网页内容)
curl "https://api.duckduckgo.com/?q=query&format=json"
# 如果curl失效,则用 Python duckduckgo-search 库或 SearXNG
并行 search + 串行提炼:
深度阅读目标页面,把 HTML 转成干净的 Markdown,剔除广告和导航栏。
方式1: WebFetch(推荐,无需 API):
直接调用 Claude Code 的 WebFetch 工具读取页面
方式2: 浏览器:
用浏览器工具打开页面,复制内容
方式3: Jina Reader(备用):
curl "https://r.jina.ai/readability/page?url=$URL"
每次调用 read_page 后,必须强制提炼关键信息,写入 memo.json。
同时保留 memo.md 方便人类阅读(与 memo.json 内容同步):
## 子问题 1: [标题]
### 来源 A [P1-官方] ([URL])
- 关键点 1
- 关键点 2
### 来源 B [P4-GitHub] ([URL])
- 关键点 1
- ⚠️ 与来源 A 冲突:XXX ???
---
## 子问题 2: [标题]
...
[P1-官方] → 优先级 1,官方文档[P4-GitHub] → 优先级 4,GitHub??? → 冲突待验证详见 references/source-trust.md
禁止:
路径:当前目录 output/memo.json(同时保留 memo.md 方便人工查看)
判断标准:
没有新概念 → 退出
即使有冲突也退出(不阻塞),冲突标记为"不确定点"
详见 references/conflict-detection.md
回到 Eval
max_iterations = 5(每次并行 search 一批子问题 = 1 轮,强制中断,防止烧钱)
计数规则:
路径:output/{topic-slug}/report.md
必须是 .md 文件:
# 研究报告:[用户问题]
## 问题拆解
- 子问题 1: xxx
- 子问题 2: xxx
- 子问题 3: xxx
## 关键结论
### 结论 1
证据:
- [P1-官方] 来源 1: ...
- [P4-GitHub] 来源 2: ...
### 结论 2
...
## 不确定点
- 争议点 1:xxx(来源 A vs 来源 B)
- 未验证点:xxx
## 总结
[用 2-3 句话概括核心发现,一句话回答用户问题]
## 参考来源
1. [P1-官方] [标题] - [URL]
2. [P4-GitHub] [标题] - [URL]
用户输入 /auto-deep-research 时触发。
output/{topic-slug}/state.json(轮数=0,子问题队列=3个待处理)memo.json 和 sources.jsonstate.json 中的 iteration++output/{topic-slug}/report.md用户输入:
/auto-deep-research 解释什么是 React Server Components
执行流程:
共 1 个版本