Active Research
分析任何主题、领域或论文,并使用Actionbook浏览器自动化和json-ui渲染生成美观的HTML报告。
使用方法
/active-research <topic>
/active-research <topic> --lang en
/active-research <topic> --lang zh
/active-research <topic> --lang both
/active-research <topic> --output ./reports/my-report.json
或者简单地告诉Claude: “研究XXX并生成报告”
参数
| 参数 | 必需 | 默认 | 描述 |
|---|---|---|---|
topic |
是 | - | 研究的主题(任何文本) |
--lang |
否 | en |
语言模式:en(默认)、zh或both |
--output |
否 | ./output/<topic-slug>.json |
JSON报告的输出路径 |
主题检测
| 模式 | 类型 | 策略 |
|---|---|---|
arxiv:XXXX.XXXXX |
论文 | arXiv高级搜索(步骤2b)+ ar5iv深度阅读 |
doi:10.XXX/... |
论文 | 解析DOI,然后arXiv高级搜索寻找相关工作 |
| 学术关键词(论文、研究、模型、算法) | 学术主题 | arXiv高级搜索(步骤2b)+ Google寻找非学术来源 |
| URL | 特定页面 | 获取并分析页面 |
| 一般文本 | 主题研究 | Google搜索+如果相关则arXiv高级搜索 |
架构
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
│ Claude │────▶│ Actionbook │────▶│ Web Pages │────▶│ Extract │
│ Code │ │ Browser CLI │ │ (multiple) │ │ Content │
└──────────┘ └──────────────┘ └──────────────┘ └─────┬────┘
│ │
│ ┌──────────────┐ ┌──────────────┐ │
├─────────▶│ Actionbook │ │ arXiv Adv. │ │
│ │ search/get │────▶│ Search Form │ │
│ │ (selectors) │ │ (40+ fields) │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ Actionbook索引arXiv表单选择器, │
│ 使得特定于字段、过滤的学术 │
│ 搜索成为可能,WebFetch/WebSearch无法做到。 │
│ │
┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
│ Open in │◀────│ json-ui │◀────│ Write JSON │◀──────────┘
│ Browser │ │ render │ │ Report │ Synthesize
└──────────┘ └──────────────┘ └──────────────┘
为什么使用Actionbook,而不是WebFetch/WebSearch?
| 功能 | Actionbook | WebFetch/WebSearch |
|---|---|---|
| 操作复杂网络表单(下拉菜单、复选框、日期选择器) | 是 — 使用索引选择器 | 否 |
| arXiv: 按作者、标题、摘要单独搜索 | 是 — #terms-0-field选择 |
否 — 仅关键词 |
| arXiv: 按主题(CS、Physics、Math等)过滤 | 是 — 类别复选框 | 否 |
| arXiv: 按日期范围或特定年份过滤 | 是 — 日期输入 | 否 |
| 读取经过验证的选择器的页面(无需猜测) | 是 — actionbook get |
否 — 原始HTML解析 |
| 与任何索引网站的UI交互 | 是 — 点击、输入、选择 | 否 — 只读 |
这是Actionbook对研究的核心价值:它将网络表单变成了AI代理的结构化、可编程接口。
必须使用Actionbook CLI
始终使用actionbook browser命令进行网络浏览。绝不使用WebFetch或WebSearch。
actionbook browser open <url> # 导航到页面
actionbook browser snapshot # 获取可访问性树
actionbook browser text [selector] # 提取文本内容
actionbook browser screenshot [path] # 捕获视觉
actionbook browser click <selector> # 点击元素
actionbook browser close # 关闭浏览器(始终在结束时执行)
完整工作流程
第1步:计划搜索策略
根据主题,从不同角度生成5-8个搜索查询:
- 核心定义/概述
- 最新发展/新闻
- 技术细节/实现
- 比较/替代方案
- 专家意见/分析
- 用例/应用
搜索顺序 — 始终先查询Actionbook API,然后搜索:
| 步骤 | 动作 | 为什么 |
|---|---|---|
| 步骤2(首先) | 查询Actionbook API | 在浏览之前获取arXiv高级搜索表单、ar5iv论文和其他已知网站的验证选择器。这是所有后续步骤的基础。 |
| 步骤3(其次) | arXiv高级搜索 | 使用步骤2中的Actionbook选择器执行多字段、过滤的学术搜索。即使非学术主题通常也有相关论文。 |
| 步骤4(第三) | Google/Bing搜索 | 用博客、新闻、代码、讨论、非学术来源补充。 |
**重要提示:**始终先查询Actionbook API(步骤2),然后使用它们在arXiv高级搜索(步骤3)中。这就是Actionbook驱动的研究与WebFetch/WebSearch的根本不同 —— 代理在打开浏览器之前就知道每个表单字段的确切选择器。
第2步:查询Actionbook API以获取选择器(始终首先执行此步骤)
**在浏览任何URL之前,查询Actionbook的索引选择器。**这为您提供了验证的CSS/XPath选择器,而不是猜测。
# 按域搜索索引操作
actionbook search "<keywords>" -d "<domain>"
# 获取特定页面的详细选择器
actionbook get "<domain>:/<path>:<area>"
对研究有用的预索引网站:
| 网站 | area_id | 关键选择器 |
|---|---|---|
| arXiv高级搜索 | arxiv.org:/search/advanced:default |
40+选择器:字段选择、术语输入、类别复选框(CS/Physics/Math/…)、日期范围过滤器、交叉列表控制 —— 用于步骤3 |
| ar5iv论文 | ar5iv.labs.arxiv.org:/html/{paper_id}:default |
h1.ltx_title_document(标题)、div.ltx_authors(作者)、div.ltx_abstract(摘要)、section.ltx_section(章节) |
| Google Scholar | scholar.google.com:/:default |
#gs_hdr_tsi(搜索输入)、#gs_hdr_tsb(搜索按钮) |
| arXiv主页 | arxiv.org:/:default |
全局搜索超过2.4M+文章 |
对于您计划访问的任何URL,运行actionbook search "<keywords>" -d "<domain>"以检查是否已索引。如果站点已索引,请使用索引选择器;对于未索引的站点,回退到actionbook browser snapshot。
示例:在搜索之前获取arXiv高级搜索选择器:
# 查询Actionbook以获取arXiv表单选择器
actionbook get "arxiv.org:/search/advanced:default"
# 返回40+选择器:#terms-0-field、#terms-0-term、#classification-computer_science等。
第3步:使用Actionbook选择器进行arXiv高级搜索
关键区别:WebFetch/WebSearch只能进行简单的关键词搜索。Actionbook已经索引了整个arXiv高级搜索表单,有40+验证的选择器(在步骤2中查询),使得多字段、多标准学术搜索成为可能 —— 就像人类研究者会使用该表单一样。
使用步骤2中获得的选择器,代理可以:
| 功能 | Actionbook选择器 | WebFetch/WebSearch |
|---|---|---|
| 按特定字段搜索(标题、作者、摘要) | #terms-0-field选择 → 选择字段 |
不可能 |
| 添加多个搜索词,使用布尔逻辑 | button "Add another term +" |
不可能 |
| 按主题(CS、Physics、Math等)过滤 | #classification-computer_science复选框 |
不可能 |
| 按日期范围过滤 | #date-filter_by-3单选 + #date-from_date / #date-to_date |
不可能 |
| 按特定年份过滤 | #date-filter_by-2单选 + #date-year输入 |
不可能 |
| 包括/排除交叉列出的论文 | #classification-include_cross_list-0/1单选 |
不可能 |
| 控制结果显示 | #size选择、#abstracts-0/1单选 |
不可能 |
示例:搜索特定作者的最新CS论文:
# 打开arXiv高级搜索
actionbook browser open "https://arxiv.org/search/advanced"
# 1.将搜索字段设置为"作者"并输入作者姓名
actionbook browser click "#terms-0-field"
actionbook browser click "option[value='author']"
actionbook browser type "#terms-0-term" "Yann LeCun"
# 2.仅过滤计算机科学
actionbook browser click "#classification-computer_science"
# 3.限制过去12个月
actionbook browser click "#date-filter_by-1"
# 4.在结果中显示摘要
actionbook browser click "#abstracts-0"
# 5.提交搜索
actionbook browser click "button:has-text('Search'):nth(2)"
# 6.提取结果
actionbook browser text "#main-container"
示例:在日期范围内按标题关键词搜索:
actionbook browser open "https://arxiv.org/search/advanced"
# 在"标题"字段中搜索
actionbook browser click "#terms-0-field"
actionbook browser click "option[value='title']"
actionbook browser type "#terms-0-term" "large language model agent"
# 日期范围:2025-01至2026-02
actionbook browser click "#date-filter_by-3"
actionbook browser type "#date-from_date" "2025-01-01"
actionbook browser type "#date-to_date" "2026-02-09"
# 提交并提取
actionbook browser click "button:has-text('Search'):nth(2)"
actionbook browser text "#main-container"
第4步:用Google/Bing搜索补充
在arXiv之后,使用Google/Bing找到非学术来源(博客、新闻、文档、代码、讨论):
# 通过Google搜索
actionbook browser open "https://www.google.com/search?q=<encoded_query>"
actionbook browser text "#search"
# 或者通过Bing搜索
actionbook browser open "https://www.bing.com/search?q=<encoded_query>"
actionbook browser text "#b_results"
解析搜索结果以提取URL和片段。收集最相关的5-10个URL。对于每个发现的URL,查询Actionbook API(步骤2模式)以检查站点是否已索引,然后访问。
第5步:深度阅读来源
对于每个相关URL,首先查询Actionbook API(与步骤2相同)以检查站点是否已索引,然后使用验证的选择器:
actionbook browser open "<url>"
actionbook browser text # 完整页面文本(回退)
actionbook browser text "<selector>" # 如果已索引,使用Actionbook选择器
对于arXiv论文,尝试按此顺序使用源(新论文经常在ar5iv上失败):
# 1.首先尝试ar5iv(最佳的结构化选择器来自Actionbook)
actionbook browser open "https://ar5iv.org/html/<arxiv_id>"
actionbook browser text "h1.ltx_title_document" # 标题
actionbook browser text "div.ltx_authors" # 作者
actionbook browser text "div.ltx_abstract" # 摘要
# 注意:section.ltx_section经常在新论文上失败 — 使用"article"作为回退
# 2.如果ar5iv内容被截断(<5KB),回退到arxiv摘要+其他来源
actionbook browser open "https://arxiv.org/abs/<arxiv_id>"
actionbook browser text "main"
# 3.用HuggingFace模型卡和GitHub README补充完整细节
actionbook browser open "https://huggingface.co/papers/<arxiv_id>"
actionbook browser text "main"
**关键教训:**不要仅依赖ar5iv。始终交叉引用3-4个来源以获得完整性。
对于Google Scholar(由Actionbook索引):
actionbook browser open "https://scholar.google.com"
# 输入搜索:使用选择器#gs_hdr_tsi
actionbook browser click "#gs_hdr_tsi"
# ...输入查询,点击#gs_hdr_tsb进行搜索
对于未索引的站点,使用快照发现页面结构:
actionbook browser open "<url>"
actionbook browser snapshot # 获取可访问性树以找到选择器
actionbook browser text "<discovered_selector>"
第6步:综合发现
将收集到的信息组织成一个连贯的报告:
- 概览/执行摘要
- 关键发现
- 详细分析
- 支持数据/证据
- 影响/重要性
- 来源
第7步:生成json-ui JSON报告
按照@actionbookdev/json-ui模式编写JSON文件。使用Write工具。
输出路径:./output/<topic-slug>.json(或用户指定的--output路径)
第8步:渲染HTML
至关重要:您必须尝试所有回退方法,绝不放弃。绝不在第一次失败时停止。
**重要提示:始终使用JSON_FILE和HTML_FILE的绝对路径。**相对路径在git rev-parse返回绝对仓库根目录时会中断。
尝试每种方法,直到成功:
# 方法1:npx(推荐 — 如果npm可用,任何地方都有效)
npx @actionbookdev/json-ui render /absolute/path/to/report.json -o /absolute/path/to/report.html
# 方法2:全局安装(如果用户运行:npm install -g @actionbookdev/json-ui)
json-ui render /absolute/path/to/report.json -o /absolute/path/to/report.html
# 方法3:Monorepo本地路径(如果位于actionbook项目内,则作为回退)
node "$(git rev-parse --show-toplevel)/packages/json-ui/dist/cli.js" render /absolute/path/to/report.json -o /absolute/path/to/report.html
**绝不默默放弃。**如果所有方法都失败,请告诉用户:
- JSON报告已保存在
<path> - 要安装渲染器,请运行:
npm install -g @actionbookdev/json-ui
第9步:在浏览器中打开
# macOS
open <report.html>
# Linux
xdg-open <report.html>
第10步:关闭浏览器
始终在完成后关闭浏览器:
actionbook browser close
json-ui报告模板
重要提示:始终包括BrandHeader和BrandFooter。
{
"type": "Report",
"props": { "theme": "auto" },
"children": [
{
"type": "BrandHeader",
"props": {
"badge": "Deep Research Report",
"poweredBy": "Actionbook"
}
},
{
"type": "Section",
"props": { "title": "概览", "icon": "paper" },
"children": [
{
"type": "Prose",
"props": {
"content": "英文概览..."
}
}
]
},
{
"type": "Section",
"props": { "title": "关键发现", "icon": "star" },
"children": [
{
"type": "ContributionList",
"props": {
"items": [
{
"badge": "Finding",
"title": "...",
"description": "..."
}
]
}
}
]
},
{
"type": "Section",
"props": { "title": "详细分析", "icon": "bulb" },
"children": [
{
"type": "Prose",
"props": { "content": "..." }
}
]
},
{
"type": "Section",
"props": { "title": "关键指标", "icon": "chart" },
"children": [
{
"type": "MetricsGrid",
"props": { "metrics": [], "cols": 3 }
}
]
},
{
"type": "Section",
"props": { "title": "来源", "icon": "link" },
"children": [
{
"type": "LinkGroup",
"props": { "links": [] }
}
]
},
{
"type": "BrandFooter",
"props": {
"timestamp": "YYYY-MM-DDTHH:MM:SSZ",
"attribution": "Powered by Actionbook",
"disclaimer": "This report was generated by AI using web sources. Verify critical information independently."
}
}
]
}
如果用户明确要求双语输出,可以使用i18n对象(见i18n部分)。
论文报告模板(针对arXiv论文)
当分析学术论文时,使用更丰富的模板,包括:
PaperHeader(标题、arxivId、日期、类别)AuthorList(带有隶属关系的作者)Abstract(关键词高亮)ContributionList(关键贡献)MethodOverview(逐步方法)ResultsTable(实验结果)Formula(关键方程,LaTeX)Figure(来自ar5iv的论文图表)
可用的json-ui组件
| 组件 | 用途 | 关键属性 |
|---|---|---|
BrandHeader |
报告标题 | badge, poweredBy |
PaperHeader |
论文元数据 | title, arxivId, date, categories |
AuthorList |
作者 | authors: [{name, affiliation}], maxVisible |
Section |
主要章节 | title, icon(paper/star/bulb/chart/code/link/info/warning) |
Prose |
富文本 | content(支持粗体、斜体、代码、列表) |
Abstract |
摘要文本 | text, highlights: ["keyword"] |
ContributionList |
编号发现 | items: [{badge, title, description}] |
MethodOverview |
逐步 | steps: [{step, title, description}] |
MetricsGrid |
关键统计 | metrics: [{label, value, trend, suffix}], cols |
ResultsTable |
数据表 | columns, rows, highlights: [{row, col}] |
Table |
通用表 | columns: [{key, label}], rows, striped, compact |
Callout |
信息/提示/警告 | type(info/tip/warning/important/note)、title, content |
Highlight |
引用 | type(quote/important/warning/code)、text, source |
KeyPoint |
关键发现卡片 | icon, title, description, variant |
CodeBlock |
代码片段 | code, language, title, showLineNumbers |
Formula |
LaTeX方程 | latex, block, label |
Figure |
图片 | images: [{src, alt, width}], label, caption |
Image |
单张图片 | src, alt, caption, width |
DefinitionList |
术语/定义 | items: [{term, definition}] |
LinkGroup |
源链接 | links: [{href, label, icon}] |
Grid |
网格布局 | cols, children |
Card |
卡片容器 | padding(sm/md/lg)、shadow |
TagList |
标签 | tags: [{label, color, href}] |
BrandFooter |
页脚 | timestamp, attribution, disclaimer |
json-ui已知陷阱
| 陷阱 | 症状 | 修复 |
|---|---|---|
MetricsGrid.suffix作为i18n对象 |
text.replace不是函数 |
suffix必须是纯字符串,而不是{ "en": ..., "zh": ... } |
MetricsGrid.value作为数字 |
渲染错误 | value必须是字符串(例如,"58.5"而不是58.5) |
缺少BrandHeader/BrandFooter |
报告看起来破损 | 始终包括两者 |
Table行值作为i18n对象 |
单元格中的[object Object] |
行单元格值必须是纯字符串。列label支持i18n,但行数据不支持。使用"Runtimes / 中文标签"而不是{ "en": "Runtimes", "zh": "中文标签" } |
| 非常长的Prose内容 | 截断渲染 | 分割成多个Prose块或使用子节 |
i18n支持
默认情况下(--lang en),写纯字符串:
"英文文本"
如果用户或代理明确选择双语输出(--lang both),请使用i18n对象:
{ "en": "英文文本", "zh": "中文文本" }
对于--lang zh,使用纯中文字符串。
例外:
MetricsGrid属性value和suffix必须始终是纯字符串。Table行单元格值必须是纯字符串(列label支持i18n,但行数据不支持)。对于双语行,使用组合字符串如"Runtimes / 中文标签"。
学术论文支持
arXiv论文
ar5iv.org HTML(阅读首选,但对3个月以内的论文经常不完整):
| 元素 | 选择器(Actionbook验证) | 可靠性 | 回退 |
|---|---|---|---|
| 标题 | h1.ltx_title_document |
高 | div.ltx_abstract包括标题上下文 |
| 作者 | div.ltx_authors |
高 | — |
| 摘要 | div.ltx_abstract |
高 | — |
| 全文 | article |
中 | 使用当章节选择器失败 |
| 章节 | section.ltx_section |
新论文上低 | article获取所有内容 |
| 章节标题 | h2.ltx_title_section |
新论文上低 | 从article文本解析 |
| 图表 | figure.ltx_figure |
中 | — |
| 表格 | table.ltx_tabular |
中 | — |
| 参考文献 | .ltx_bibliography |
中 | — |
**注意:**对于最近提交的大约3个月以内的论文,ar5iv经常呈现不完整的内容。始终检查actionbook browser text 2>&1 | wc -c — 如果<5KB,页面没有完全呈现。回退到其他来源。
arXiv API(通过actionbook browser获取元数据):
actionbook browser open "http://export.arxiv.org/api/query?id_list={arxiv_id}"
actionbook browser text
推荐论文来源优先级
根据测试,使用此优先级顺序以获得最大覆盖范围:
| 优先级 | 来源 | 您将获得什么 | 可靠性 |
|---|---|---|---|
| 1 | arxiv.org/abs/<id> |
摘要、元数据、提交历史 | 非常高 |
| 2 | huggingface.co/papers/<id> |
摘要、社区评论、相关模型/数据集 | 非常高 |
| 3 | GitHub仓库(从搜索结果) | 包含方法细节的README、模型库、代码 | 高 |
| 4 | HuggingFace模型卡 | 训练配方、基准结果、快速开始 | 高 |
| 5 | ar5iv.org/html/<id> |
完整的论文HTML,结构化选择器 | 中(新论文失败) |
| 6 | Google Scholar / Semantic Scholar | 引用、相关工作 | 中 |
**关键见解:**不要依赖单一来源。arxiv摘要+HuggingFace+GitHub的组合通常可以提供90%+所需的内容,即使ar5iv失败。
其他学术来源
使用actionbook browser访问并提取内容:
- Google Scholar(
scholar.google.com)— Actionbook索引,使用#gs_hdr_tsi进行搜索 - Semantic Scholar(
semanticscholar.org) - Papers With Code(
paperswithcode.com) - 会议论文集网站
错误处理
| 错误 | 动作 |
|---|---|
| 浏览器无法打开 | 运行actionbook browser status,重试 |
| 页面加载超时(30秒) | 跳过来源,尝试下一个。常见于papers.cool、慢速学术站点 |
| ar5iv内容被截断(<5KB) | 论文对ar5iv来说太新了。回退到arxiv摘要+HuggingFace+GitHub |
section.ltx_section未找到 |
ar5iv呈现不完整。使用actionbook browser text "article"或"main"代替 |
| Actionbook选择器未找到 | 使用actionbook browser snapshot发现实际页面结构 |
actionbook search返回无结果 |
网站未索引。使用actionbook browser snapshot手动查找选择器 |
json-ui渲染崩溃(text.replace) |
检查MetricsGridsuffix/value — 必须是纯字符串,而不是i18n对象 |
npx @actionbookdev/json-ui失败 |
运行npm install -g @actionbookdev/json-ui,然后使用json-ui render重试。如果仍然失败,尝试monorepo本地路径 |
| 无搜索结果 | 扩大搜索词,尝试不同角度 |
| 渲染失败 | 保存JSON,告诉用户路径,并建议:npm install -g @actionbookdev/json-ui |
**重要提示:**始终在结束之前运行actionbook browser close,即使出现错误。
质量指南
- 广度:从至少3-5个不同的来源进行研究
- 深度:阅读全文,不仅仅是片段
- 准确性:在不同来源之间交叉引用事实
- 结构:使用适当的json-ui组件为每种内容类型
- 归属:始终在报告中包含源链接
- 新鲜度:在相关性相等时优先选择最近的来源
双语内容注意事项(可选)
当使用--lang both时,zh字段应该自然书写(不是逐字翻译)。
实用规则:
- 保持不同语言中的事实相同(数字、日期、源链接)。
- 保持表格文本简短易读。
- 在没有稳定的中文术语时,保留英文中的技术术语。
- 优先考虑清晰度而不是逐字翻译。