关于 research-with-sources
research-with-sources 是用于开展证据驱动研究并在知识库中撰写初步文章的 Skill。它要求先检查已有内容并确定研究范围,再搜集保存来源、分析并验证引用。
主要功能
- 01研究前扫描已有内容
- 02与用户确定研究标准
- 03分析前保存原始来源
- 04逐步撰写初步文章
- 05验证元数据、链接和来源
适用场景
- 01基于外部来源调查主题
- 02扩展已有研究文章
- 03将发现保存为带引用的草稿以供后续审阅
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ inkeep/ open-knowledge-skills --skill research-with-sources安装后在 Claude Code 中输入/research-with-sources确认已加载。
详细介绍
研究——收集来源并撰写初步发现
此技能提供流程指导。平台的
/open-knowledge技能(读取/写入/预览/链接/依据规则)仍适用于所有 Markdown 操作——本流程是在其基础上补充的。
围绕某个主题开展以证据为依据的研究,并在 research/ 下撰写一篇初步研究文章。文章为初步内容,而非权威定稿:研究文章记录某一时点的发现、权衡和未决问题。只有当决策趋于明确时,才通过 /consolidate-notes 技能将其提升为权威文章。
内容目录是已解析的 content.dir——如果你还不知道该目录,请使用 config({ key: 'content.dir' }) 读取。以下路径均相对于该目录。
三种路径
- 路径 A——研究文章(默认): 一篇持久的初步文章,带有
status: draft,并在 frontmatter 中以内联sources:列表指向通过摄取流程保存的原始来源。除非用户明确选择不创建文章,否则默认采用此路径。 - 路径 B——直接回答: 仅在对话中提供研究发现。需要用户明确提出请求(例如“直接告诉我”“不需要文档”“快速回答”)。
- 路径 C——更新现有研究: 对现有研究文章进行有针对性的补充/更正。用户提及现有研究文档,或表示“更新/刷新/扩展”时采用此路径。
路径 A 为默认路径,因为初步文章会随着时间不断积累;口头回答则不会。
兼容旧格式读取: 现有文章可能使用 status: provisional,并在 sources: 下使用字符串路径。将其视为草稿研究文章和来源资源。不要批量重写;新建内容使用以下 OKF 格式。
自主模式
| 模式 | 行为 | 进入方式 |
|---|---|---|
| 监督模式(默认) | 在范围界定关卡处暂停,等待用户确认研究标准。交互式处理覆盖范围决策。 | 用户主导会话时默认采用。 |
| 无交互模式 | 提出研究标准后自动确认。自动选择路由决策。跳过交互式提示。其他所有关卡(扫描、分析、验证、依据)仍须执行。 | 用户明确表示“别等我”“直接继续”“以无交互模式运行”——或处于非交互式容器环境时。 |
在无交互模式下,提出研究标准后立即继续。提出标准后,将范围界定任务标记为已完成。
强制执行顺序
硬性关卡——不得跳过。 如果你发现自己准备在完成步骤 0–2 之前运行 WebFetch 或 WebSearch,请停下——你跳过了关卡。
- 步骤 0:创建工作流检查点任务——始终作为第一个操作。
- 步骤 1:扫描现有内容并确定路径——扫描内容目录中的既有工作;分类评估覆盖情况;在开始新研究前提供选项。
- 步骤 2:协作确定研究范围——提出研究标准。在监督模式下,停止并等待用户确认后,再进行任何外部获取。
- 步骤 3:通过摄取流程保存原始来源——先保存,再分析。
- 步骤 4:阅读并分析——默认使用第三方/外部来源;仅当用户明确要求时,才使用第一方代码库。
- 步骤 5:撰写研究文章——仅适用于路径 A。
- 步骤 6:积极添加链接,并将有价值的问答归档回内容库。
- 步骤 7:验证——检查 frontmatter、失效链接和来源对应关系。
- 步骤 8:总结并提出后续方向。
路径 B 快捷方式: 如果用户在步骤 2 明确要求直接回答,则跳过步骤 5 和 7。仍须执行步骤 0、1、3、4、6、8(即使输出形式是对话,也不得放松证据要求)。
报告默认框架:外部/第三方来源
研究文章默认采用外部框架——研究第三方主题、技术、概念、公开代码仓库、论文和官方文档。除非用户明确要求,否则不要将用户自己的代码库分析混入研究文章。 混入这类内容会使研究结果从事实综合偏向针对组织的观点形成,从而降低事实保真度。
- 默认: 外部来源(网络、开源代码仓库、论文、官方 API)。
- 例外: 如果用户要求“研究我们的 X 与 Y 相比如何”或“纳入我们的代码库”,则将其纳入——但要在文章中明确区分第一方观察与第三方研究结果,以便读者区分可从外部验证的事实和针对特定组织的观点。
边做边持久化——文章就是检查点
边做边持久化——防崩溃检查点规则。 此流程导致的代价最高的单一失败,是已完成的研究因会话中途触发速率限制或崩溃而丢失——分析内容留在上下文中,从未写入,随着会话结束而被丢弃。用户付出的代价白白浪费了。知识库就是检查点;两条规则可确保每一步都能抵御崩溃:
- 获取每个来源后立即摄取(步骤 3),一次一个——不要先获取所有来源,再集中批量摄取。已摄取的来源在崩溃后仍会保留;已获取但未写入的来源则不会。
- 尽早创建文章骨架,并在阅读时按章节逐步填充(步骤 4-5),不要等到最后一次性写完。 分析完每个来源后,在继续处理下一个来源之前,先用
edit将研究结果写入文章。若在阅读八个来源中的五个后崩溃,知识库中仍会安全保留五个章节;恢复时只需读回未完成的文章,而不必重新执行整个检索流程。
只存在于上下文中的结构化笔记并未持久化。如果某项发现值得保留,就应将其写入已摄取的来源或文章中,而不是只留在上下文里。
步骤 0:创建工作流检查点任务
始终作为第一个操作。 在进行任何读取、扫描或获取之前,创建任务。这些任务会在上下文压缩后继续保留,让遗漏的步骤立即显现,并向用户展示进度。
通过宿主的任务系统创建这些任务(在 Claude 中使用 TaskCreate;其他环境使用等效工具):
TaskCreate: "Research: Scan existing coverage + route" → start as in_progress
TaskCreate: "Research: Collaborative scoping — rubric gate" → pending, blocked by #1
TaskCreate: "Research: Capture sources via ingest" → pending, blocked by #2
TaskCreate: "Research: Read + analyze" → pending, blocked by #3
TaskCreate: "Research: Write the research article" → pending, blocked by #4
TaskCreate: "Research: Link aggressively + file Q&A back" → pending, blocked by #5
TaskCreate: "Research: Validate (frontmatter + dead-links)" → pending, blocked by #6
TaskCreate: "Research: Recap + follow-up directions" → pending, blocked by #7
使用宿主的阻塞关系来强制执行顺序。完成每个步骤后,将对应任务标记为 completed,并将下一个任务标记为 in_progress。
路径 B 变体: 如果范围界定后确定走路径 B(直接回答),则移除任务 #5 和 #7——它们不适用。
路径 C 变体: 如果步骤 1 判定走路径 C(更新现有内容),则移除任务 #3 和 #5(通常无需摄取,也不会创建新文章),并将任务 #4 重命名为“研究:阅读现有文章并比对差异”。
设置任务的原因:观察到的失败模式是 Agent 跳过扫描和范围界定,直接调用 WebFetch。任务能让用户在会话进行时立即发现被跳过的关卡。
步骤 1:扫描现有内容并确定路径
必须执行的第一个研究步骤。 在获取任何外部内容之前,先扫描知识库中已有的内容。
阶段 1:检查现有知识
如果用户明确提及一篇现有研究文章(说出文章名称、提供链接,或说“更新/刷新/扩展”): → 跳过扫描,直接进入 路径 C。
否则,始终先扫描:
exec("grep -rln <topic-keyword> <content-dir>")— 返回匹配文件,并附带 frontmatter 信息,让你无需逐一打开文件即可判断相关性。exec("ls -A <content-dir>")— 展示文件夹布局,以及每个子目录中最近更新的文档。- 对 最有希望的 1-3 个候选文件,执行
exec("cat <path>")— 返回完整文档、frontmatter、反向链接,以及 shadow-repo 最近的活动。
分类:
| 覆盖情况 | 含义 | 转至 |
|---|---|---|
| 已完全覆盖 | 现有文章以证据直接回答了问题 | 呈现发现;提供详细说明、验证、扩展或明确撰写新报告的选项 |
| 部分覆盖 | 存在相关研究;具体问题是自然的延伸 | 提供选项:(1)通过路径 C 扩展现有内容,(2)通过路径 A 撰写新文章 |
| 未覆盖 | 没有实质性重叠 | 进入路径 A(默认)或路径 B |
阶段 2:提供路径选项(监督模式)
已完全覆盖:
“我们已有关于此主题的研究,见
<path>。主要发现如下:[2-4 项关键发现]。选项:(1)直接使用,(2)验证/刷新(文章日期为 [date]),(3)围绕 [specific dimension] 扩展,(4)如果这是不同的切入角度,则另辟新角度。”
让用户选择。如果现有研究已经回答了问题,不要开始新的研究。
部分覆盖:
“我们在
<path>中有相关研究,涵盖 [scope]。你关于 [topic] 的问题尚未得到直接回答,但这是自然的延伸。选项:(1)通过路径 C 扩展现有内容,(2)通过路径 A 开始撰写新文章。我建议选择 [1 or 2],因为 [reason]。”
未覆盖:
进入步骤 2(界定范围)。如果用户要求快速回答,应指出路径 B 可能适用,并在步骤 2 的范围界定交流中予以确认。
**无头模式:**自动选择——已完全覆盖 → 针对调用方要求的具体角度撰写新文章;部分覆盖 → 开始撰写新文章;未覆盖 → 路径 A。
扫描原则
- 不要跳过扫描。 即使只花 30 秒执行 grep + cat,也能避免重复研究,并让用户了解已有信息。
- 当主题在语义上连贯时,优先扩展(路径 C)——一篇全面的文章胜过两篇内容重叠的文章。
- 当切入角度、受众或核心问题有实质性差异时,优先撰写新文章(路径 A)。
步骤 2:协作界定范围(监督模式硬性停止关卡)
硬性关卡(监督模式)。 在用户确认评估标准之前,不要开始外部研究。提出评估标准后,停止并等待用户回复。只有之后才能将范围界定任务标记为已完成。
**无头模式下:**提出评估标准并继续。提出后将任务标记为已完成。
提出评估标准
向用户返回以下结构:
## Proposed research rubric
**Question:** [narrowed from the original topic — concrete, answerable, bounded]
**Dimensions to investigate:** [3-7 facets]
1. [Dimension 1]
2. [Dimension 2]
...
**Candidate sources:** [3-8 initial guesses]
- [Source 1 — why it's relevant]
- [Source 2 — why it's relevant]
...
**Success criteria:** [2-3 concrete outcomes — "the article cites X authoritative sources", "open questions are marked explicitly", etc.]
**Output format:** Path A (article) | Path B (direct answer) | Path C (update `<existing-article>`)
范围界定原则
- 如果原始主题含糊不清(“研究 LLM Agent”),应在检索前缩小范围:“具体研究哪些 Agent?要辅助做出什么决策?时间跨度是多久?”
- 如果主题本身是一个 URL,则将该 URL 作为锚点,并扩展到 2-4 个相邻的权威来源。
- 明确这项研究要辅助做出的决策。缺少决策背景的研究容易漫无目的。
- 不要过度限定评估标准——用户可以调整。提出建议,而非强加要求。
第 3 步:通过 ingest 捕获原始来源
对于已确认的评分标准中每个相关 URL、论文或文档,请按照 ingest 流程操作——该流程位于平台的 /open-knowledge 技能中的 references/ingest-and-sources.md,而不是本资料包中。典型研究会提取 3-8 个来源。 太少 → 综合分析单薄。太多 → 你会在本次会话剩余时间里一直阅读。
- 不要跳过 ingest。 保留原始内容可以将采集与解读分开,并使研究可复现。没有保留来源的文章只是观点;保留了来源的文章则提供了一条他人可以追溯的路径。
- 如果你特别需要的来源获取失败,请停下来让用户粘贴内容——不要默默略过。写作时捏造缺失证据是最严重的失败模式。
- 如果获取结果明显是摘要而非原始字节(某些基于 LLM 的获取工具会这样),请注明这一点,并尝试使用原始内容替代方案(
curl -sL <url>,或请用户粘贴)。
第 4 步:阅读 + 分析
仔细阅读每个已采集的来源。此外,还要加载:
- 该主题已有的权威文章——
exec("cat <path>")(返回 frontmatter + 反向链接 + shadow-repo 活动)。 - 相邻主题的既有研究——同样使用
exec("cat <path>")读取 OpenKnowledge markdown。 - 相关源代码——仅当用户要求进行一手分析时才读取。对
.ts/.js等文件使用原生Read;对范围内的.md/.mdx文件使用exec。 - 项目背景——项目存放设计资料的位置。
记录结构化笔记:
- 关键论断及其证据——每项论断都需要有可指向的来源
- 不同选项之间的权衡
- 来源之间的矛盾——这些往往是文章中最有价值的部分
- 未知事项和待解决的问题——明确你所了解内容的边界
- 与当前具体决策的相关性
记笔记时就把内容写进文章,而不是之后再写(必须遵守——见上文的 边做边保存)。 开始阅读前,先创建文章骨架——frontmatter + 第 5 步的章节标题;然后每分析完一个来源,就立即用 edit 将其发现写入相关章节。“笔记”就是正在编写的文章的 Findings 章节;不要把笔记留在上下文中,等到第 5 步再一次性誊写。从这里到第 5 步之间的速率限制,不应导致你已经完成的分析丢失。到达第 5 步时,文章应已基本完成,第 5 步只需定稿和润色。
依据纪律
文章中的每项事实性论断都必须在文内注明来源。不要写没有来源支撑的推测。如果没有证据:(a) 再进行一次搜索并引用来源,(b) 在文内标注 (TODO: needs source),或 (c) 不写这项论断。切勿捏造。
步骤 5:撰写研究文章(仅适用于路径 A)
如果你遵循了 边做边持久化,文章已经存在,并且已根据步骤 4 大体填写完成——此步骤是对其进行定稿(补全任何剩余部分、完善建议,并运行下方的结构和验证检查),而不是从空白文档开始撰写。如果文章不存在或内容很少,而你是在中断后恢复工作:先用 exec("cat <path>") 重新查看未完成的文章,再只补齐缺失部分——并注意,步骤 4 中尚未写入知识库的分析会在会话中断时丢失,因此只需重新推导实际缺失的内容。在此处从头创建文档,说明跳过了增量规则;这属于错误情况,而不是理想流程。
在内容目录中保存 Markdown 文档。路径约定:
- 如果项目采用了三层生命周期(
external-sources/→research/→articles/),请保存到research/<slug>.md。 - 如果项目已有 docs/reports/specs 布局,请沿用该布局。
- 对于大型主题,请使用子目录:
research/<topic>/<subtopic>.md。
文件名:使用描述性强的 kebab-case(crdt-alternatives-for-editor.md、llm-wikis-and-knowledge-bases.md)。不要写日期——日期应放在 frontmatter 中。
Frontmatter
---
title: Descriptive title
description: One-line summary of the research question
type: research-note
status: draft
date: YYYY-MM-DD
tags:
- research
- provisional
- <topic-tag>
sources:
- resource: ../external-sources/<source-1>.md
- resource: ../external-sources/<source-2>.md
---
结构
## Question
[What specific question does this research answer? Be precise.]
## Context
[Why does this matter? What decision does it inform? Who is the reader?]
## Findings
[Main findings organized by theme, option, or criterion. Every claim cites a source inline.]
### Theme / Option 1
- Pros — with evidence links
- Cons — with evidence links
- Evidence: [Source A](../external-sources/source-a.md), [Source B](../external-sources/source-b.md)
### Theme / Option 2
...
## Trade-offs
[What you gain vs. lose with each option. A comparison table often helps.]
## Open questions
[What you still don't know — candidates for further research, prototyping, or human-judgment decisions.]
## Tentative recommendation
[Your best guess, clearly marked as tentative. Explain the reasoning so a future reader can re-evaluate when new information arrives.]
## Further reading
[Links to the ingested sources + adjacent research + any canonical articles on the topic.]
语气
- 暂定,而非权威定论。 使用“暂定”“初步发现”“基于目前的理解”等表述。
- 不要写得像是权威定论——这会造成误导。确立权威结论是
/consolidate-notes技能的职责,应在决策确定后进行。 - 明确说明不确定性。 研究是允许保留不确定性的层次。
步骤 6:积极添加链接 + 将有价值的问答归档
研究文章是探索入口。链接不足的研究会沦为无人发现的孤岛。
链接规范
- 每个指向其他文档的名词短语都应添加链接。使用标准 Markdown:
[text](./relative/path.md)。 - 引用来源时,应在正文中直接添加链接,而不只是将其列入 frontmatter 的
sources:列表:根据 [LLM Agents](../external-sources/llm-agents.md)...比单独列出sources:更好。 - 交叉链接相关研究:如果相邻主题有自己的研究文档,请在“待解决问题”部分或正文中添加链接。读者沿着一条线索阅读时,也应能找到其他相关内容。
- 撰写完成后,更新 1-2 个密切相关的现有页面,添加指向本研究的链接(通常放在“延伸阅读”或“另请参阅”部分)。这样才能通过反向链接让更多人发现这项研究。
- 不要用反引号括住链接,也不要使用 HTML 锚点——这符合平台技能的链接规则。
将有价值的问答归档
如果用户在研究过程中提出了一个具体问题,并且得到了有来源支持、可引用的答案,请将其单独整理成一个简短页面,与研究文章放在一起,而不只是留在聊天记录中。带有来源依据答案的具体问题,是你能产出的知识中信号价值最高的内容。
- 简短文件名:
what-does-X-mean.md、how-does-Y-work.md - 使用相同的对象形状
sources:frontmatter - 在本研究文档的“延伸阅读”部分链接该答案
- 如果答案过短,不值得单独建文件,就留在聊天记录中;不要拆分过度
步骤 7:验证
标记完成前,请运行以下检查清单:
- 文件已保存在内容目录下选定的路径中
- Frontmatter 包含
title、description、type: research-note、status: draft、date,以及对象形状的sources:列表 exec("ls -A <dir>")会列出带有 frontmatter 信息的新文件audit({ path: "<doc-path>.md" })检查通过(没有 lint 违规,也没有损坏的内部链接)——修复所有检查结果- “发现”中的每项事实陈述都在正文中引用来源
- 步骤 3 中链接的源文件全部存在(源链接损坏意味着采集过程的某个环节出了问题)
- 至少有 1-2 个相邻文档现在链接到本研究(遵循步骤 6“撰写完成后,更新……”的规则)
步骤 8:回顾 + 后续方向
在对话中与用户完成闭环:
## Recap
- [Finding 1 — with source]
- [Finding 2 — with source]
- [Key trade-off / contradiction surfaced]
- [1-2 open questions that remain]
**Tentative recommendation:** [state it in one sentence]
**Follow-up research directions** (Path A candidates for later):
1. [Direction 1 — what would it investigate?]
2. [Direction 2 — what would it investigate?]
3. [Direction 3 — what would it investigate?]
后续方向应是外部来源调查,而不是对用户代码库采取行动(这些内容应写入规范,而非开展更多研究)。每个方向都应是一个独立主题,供日后进一步研究。
在无头模式下,将回顾内容写入研究文章的“延伸阅读”部分,而不是通过交互方式提问。
非目标
- 不要提升为规范文章。 这是
/consolidate-notes技能的职责,应在决策真正确定后执行。过早将内容规范化会掩盖不确定性,误导未来的读者。 - 不要掩盖不确定性。 在研究阶段,“我们目前还不知道”是可以接受的表述。请明确说明。
- 不要跳过资料导入。 始终先收集原始来源,再进行分析。没有保留来源的文章只是观点。
- 不要跳过步骤 1 的扫描。 重复研究会浪费用户时间,也会错失拓展既有工作的机会。
- 在监督模式下,不要跳过范围界定关卡。 用户的评估标准会影响后续所有工作;如果文章范围有误,就无法轻易补救。
- 除非用户要求,否则不要将第一方代码库分析混入文章。 这样做会使结论从事实综合偏离为观点。
- 不要悄无声息地覆盖现有研究。 如果该主题之前研究过,请迭代(路径 C),或创建一个名称明确的后继文件(
crdt-alternatives-2.md),并标记旧文件已被取代。