# Grounded Coding

> 程序化扎根理论编码（Grounded Theory Coding）工具。对访谈记录或其他质性资料进行系统化的 开放编码（识别事件→提炼类属→分析类属）、主轴编码（典范模型关系分析）、选择性编码（核心类属→研究问题→故事线→理论对话）， 每份访谈完成后自动保存为 Markdown 文件，所有访谈完成后按需生成汇总 Excel。 当用户提到需要进行扎根编码/扎根理论编码/开放编码/质性编码/grounded coding/open coding/ qualitative coding，或者提到需要对访谈资料/质性资料进行编码分析，或者上传/提供了访谈 记录的本地文件路径时触发此skill。即使用户只是笼统地说"帮我对这份访谈进行编码"、 "扎根编码分析"、"对访谈做开放编码"、"质性资料编码"、"帮我做扎根理论分析"，也应触发此skill。

- Skill: `yipng05-max/grounded-coding` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add yipng05-max/grounded-coding`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yipng05-max/grounded-coding/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: yipng05-max (https://skillmd.com/u/yipng05-max)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/yipng05-max/grounded-coding

---


# 程序化扎根理论编码

对访谈记录或其他质性资料进行系统化的扎根理论编码分析。每份访谈依次执行开放编码与主轴编码（五个阶段自动连续执行），保存为 Markdown 文件；多份访谈积累后，按需进入选择性编码。

## 启动：获取基本信息

当用户触发此skill时，首先获取以下信息（如用户未提供，则主动询问）：

1. **质性资料路径**：用户上传或提供的访谈记录/质性资料的本地文件路径（支持PDF、Word、TXT等格式）
2. **研究领域**：用户所在的研究领域（如教育学、管理学、社会学等）
3. **研究主题**：用户正在研究的具体主题
4. **被访者信息**：被访谈者的身份描述（如"某小学教师"、"创业者A"等）
5. **研究议题焦点**（可选）：用户特别关注的研究议题或分析重点
6. **访谈序号与既有编码表**（持续比较关键信息）：
   - 这是你研究中的第几份访谈？（第一份 / 第N份）
   - 如果是第二份及以后：之前访谈的累积编码表是否可以提供？
     请提供文件路径，或直接粘贴类属列表，格式如下：
     ```
     类属1：[类属名称]
       包含编码：编码A, 编码B, ...
       属性1：[名称]（维度：[极端A] ←→ [极端B]）
       属性2：[名称]（维度：[极端C] ←→ [极端D]）
     类属2：...
     ```
   - 如果是第一份访谈，直接开始全新建构。

如果用户在触发时已经提供了部分信息（如直接给出文件路径和研究主题），不要重复询问已知信息，只补充缺失的必要信息。

收到基本信息、读取质性资料全文后，**在进入编码之前**，询问研究者是否希望提供示范编码：

> "在正式编码前，你可以选择：
> **A. 研究者示范**：你先对文本中任意一小段（3–5 个句群）做示范编码，AI 会识别你的编码风格，然后按你的风格完成后续开放编码
> **B. AI 直接编码**：跳过示范，AI 按照标准原则直接开始
>
> 哪种方式？（选 B 或不回应则直接开始）"

**若研究者选择 A（研究者示范）：**

1. 请研究者提供示范片段及其对应编码（格式：`S1 "原文" → 编码标签`）
2. AI 分析示范编码的风格特征，明确说明：
   - 动名词使用程度：高度动名词化，还是更多名词短语？
   - 抽象层次：贴近原文（描述性），还是已有一定理论提炼？
   - 粒度：每个句群一个编码，还是允许多个？
   - 用词风格：倾向本土化表达，还是理论术语？
3. 输出风格确认：
   > "我理解你的编码风格是：[描述]。我将按照此风格完成后续开放编码。如有偏差，请随时纠正。"
4. 按研究者风格继续执行五阶段流程

**若研究者选择 B 或未回应：**

直接进入五阶段，按标准原则编码。

## 执行流程（五阶段连续执行）

### 第一阶段：整体主题概览

阅读完全部质性资料后，提炼出几个大的主题方向，为后续微分析提供全局视野。

输出格式：
- 列出3-6个大的主题，每个主题附简要说明（1-2句话）
- 说明各主题在资料中的大致分布和权重

这一步的目的是让研究者在进入逐句编码之前，先对资料有一个整体认知框架。就像阅读一本书之前先浏览目录，整体主题概览帮助研究者明确后续微分析的方向和重点。

### 第二阶段：开放编码

开放编码是扎根理论的基础阶段，目标是从原始资料中逐步建构概念。包含三个连续步骤，对应从具体到抽象的逐步提升：

1. **识别事件**：逐项识别资料中的事项、事情、事务，进行命名（抽象层次较低）
2. **提炼类属**：对具体事件进行分类合并，形成概念（抽象层次较高）
3. **分析类属**：定义类属内容，分析特征，进行属性与维度分类

#### 步骤一：识别事件（逐句微分析）

针对质性资料进行逐句微分析，逐项识别出资料中的事项、事情、事务，进行命名。这一步的抽象层次较低，紧贴原始资料——回答的是"这里发生了什么"。

编码原则：
1. **逐句编码**——按句群进行，不遗漏任何语句。**只有**纯粹的单词应答（独立成句，如仅有"嗯"、"对"、"好的"）可以跳过，且必须在编码结果中标注"已跳过"。其余所有语句，**无论看起来信息量多少，都必须给出编码**。某句话是否重要，是研究者的判断权，不是 AI 的判断权；当不确定时，给出描述性编码（如"重复前述观点""表达不确定"），而不是跳过
2. **优先使用动名词形式**——GT 开放编码的标准格式是动名词（如"强调自主性""回避直接冲突""将平台规则合理化"），而非名词短语（如"自主性""冲突回避""规则合理化"）。动名词保留了行动感和过程性，符合 GT 追问"正在发生什么"的分析取向。编码应简洁，通常 4–8 字，不宜过长
3. **每个句群给出一个最合适的编码**——同一个编码可以在不同句群重复出现（这说明该现象反复被提及）
4. **紧扣研究议题**——编码时重点关注与用户研究主题和研究议题相关的内容
5. **禁止对仗整齐**——编码标签的字数和句法结构应由数据内容决定，而非由输出形式决定。**如果检查发现大多数编码字数相近、结构相同（如全部是四字动名词短语），说明在优化形式而非忠实于数据，必须主动打破这种整齐感**。有些编码天然更长，有些更短，有些是受访者原话的动名词化，有些是描述性的过程短句，形态多样才符合 GT 的细粒度要求

在编码过程中，用"S+序号"标记每个句群（如S1、S2、S3...），便于后续引用和追溯。

输出数据结构：
```
句群序号 | 原文内容 | 事件命名（编码）
S1      | 原文...  | 编码A
S2      | 原文...  | 编码B
...
```

#### 步骤二：提炼类属（含跨文本持续比较）

对步骤一识别出的具体事件进行分类合并，形成更高抽象层次的概念（类属）。这是从"描述"到"概念化"的关键跃升。

**持续比较（Constant Comparison）是本步骤的核心操作。**
S&C 的持续比较要求：每一个新编码都要与已有的全部编码/类属进行比较，
而不是孤立地对单份文本建构类属。

##### 情况 A：第一份访谈（无既有编码表）

正常进行类属提炼。

归并原则：
1. **不遗漏任何编码**——每个事件命名都必须归入某个类属
2. **类属数量适中**——通常5-10个类属，过多则失去归并意义，过少则信息丢失
3. **类属命名要求**：
   - 具有一定的抽象性——高于事件命名的概括层次
   - 体现理论敏感度——能启发理论思考
   - 兼顾本土化——不必强套西方概念，允许反映资料本身的特点
   - 但也不要受制于现有理论——让类属从资料中自然涌现

##### 情况 B：第二份及以后的访谈（有既有编码表）

持续比较分三步进行：

**比较步骤 1：对每个新编码，优先尝试归入既有类属**

逐一检查：这个新编码，是否描述了既有类属中已有的经验或现象？
- 是 → 归入既有类属，同时记录该编码是否在属性或维度上提供了新信息（属性扩展或维度极端的新证据）
- 否 → 暂标为"待判断——可能是新类属"

**比较步骤 2：对"待判断"编码，判断是否构成新类属**

检查所有"待判断"编码：
- 彼此之间是否存在共同的抽象指向？
- 它们描述的现象是否与全部既有类属都有本质差异？
- 如果是 → 建立新类属，命名，并说明与既有类属的区别
- 如果否 → 重新检视，看能否归入修订后的既有类属

**比较步骤 3：检查是否需要修订既有类属**

- 新文本是否让某个既有类属的边界变得模糊？（是否需要拆分？）
- 新文本是否揭示两个既有类属实为同一现象的不同侧面？（是否需要合并？）
- 新文本是否让某个类属的命名不再准确？（是否需要重命名？）

输出数据结构：
```
句群序号 | 原文内容 | 事件命名（编码） | 类属 | 类属状态（既有/新增/修订）
S1      | 原文...  | 编码A           | 类属X | 既有
S2      | 原文...  | 编码B           | 类属X | 既有（属性扩展：新的维度极端证据）
S3      | 原文...  | 编码C           | 类属Z | 新增
S4      | 原文...  | 编码D           | 类属X→类属X' | 修订（类属X因本次材料重命名为类属X'）
...
```

#### 步骤三：分析类属（属性与维度）

对**每一个**类属定义其内容、分析其特征、进行分类。这是开放编码的收尾工作，使类属从"标签"变为"有内涵的概念"。

概念定义：
- **属性（Property）**：类属的某些重要特征，使该类属区分于其他类属
- **维度（Dimension）**：属性的程度变化，通常用一对相反概念的连续统来表达（如强—弱、多—少、主动—被动、积极—消极）

分析要求：
- 每个类属提炼出**2个属性**
- 每个属性有**2个维度**（即两极）
- 形成**四象限**的理想类型分类（2属性×2维度极端值 = 4种类型）
- 结合原始资料中的具体描述来确定属性和维度，确保有据可依
- 为四象限的每种类型尝试给出一个简短的类型名称

输出格式（每个类属）：
```
类属名称：XXX

属性1：[属性名称]
  维度：[极端A] ←————→ [极端B]

属性2：[属性名称]
  维度：[极端C] ←————→ [极端D]

四象限分类：
           属性2-极端C    属性2-极端D
属性1-极端A  类型I名称     类型II名称
属性1-极端B  类型III名称   类型IV名称
```

---

> **备忘录提示（可选）：** 属性维度分析过程中，如果某个类属触发了推演冲动——觉得"这里有什么"——现在是写备忘录的好时机。直接说"备忘录"或描述你的想法，即可启动 `memo-coach`。分析动能稍纵即逝，不要等到编码全部完成再回想。

---

### 第三阶段：主轴编码（典范模型关系分析）

主轴编码的核心任务是使用**典范模型（Paradigm Model）**将类属之间的关系进行逻辑关联，形成理论化表述。这是从"描述现象"跨向"解释机制"的关键步骤。

典范模型框架（Strauss & Corbin）：
```
因果条件（Causal Conditions）
    ↓ 触发
现象（Phenomenon）——核心关注的类属
    ↓ 发生在
情境脉络（Context）
    ↓ 受到
中介条件（Intervening Conditions）影响
    ↓ 行动者采取
行动/互动策略（Action/Interaction Strategies）
    ↓ 导致
结果（Consequences）
```

#### 操作步骤

**步骤 1：标注类属角色**

逐一审视第二阶段提炼的每个类属，判断其在典范模型中可能扮演的角色。注意：一个类属在不同语境下可能扮演不同角色（如某类属在一组关系中是"条件"，在另一组中是"结果"）。

**步骤 2：建立关系命题**

尝试用典范模型的逻辑写出类属之间的关系，格式：
> 当 [因果条件] 时，在 [情境脉络] 的背景下，受到 [中介条件] 的影响，[行动者] 采取 [行动/策略] 的方式应对 [现象]，导致了 [结果]。

不必追求一次写出完整命题——有些位置可能暂时空缺，标注"待后续数据补充"即可。

**步骤 3：标注确定性**

每个关系标注确定性水平：
- **有据**：有多个句群直接支持（标注支持句群编号）
- **初现**：仅 1–2 个句群支持，需后续访谈验证
- **推测**：基于分析直觉，尚无直接证据

#### 跨访谈演化

- **第一份访谈**：典范模型是初步的、暂定的，很多关系标注为"初现"或"推测"，这是正常的
- **后续访谈**：每份新访谈完成开放编码后，重新审视典范模型：
  - 哪些"初现"关系得到了新证据支持？（升级为"有据"）
  - 哪些关系被新证据质疑？（需修订方向或降级）
  - 是否出现了新的关系路径？
  - 典范模型的整体结构是否需要调整？

输出格式：
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
典范模型关系分析
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

现象：[类属名称]

因果条件：
- [类属名] → [现象]：[关系说明]（确定性：有据/初现/推测，证据：Sx, Sy）

情境脉络：
- [类属名]：[如何构成背景条件]（确定性：...）

中介条件：
- [类属名]：[如何影响行动策略]（确定性：...）

行动/互动策略：
- [类属名]：[行动者如何应对]（确定性：...）

结果：
- [类属名]：[产生什么后果]（确定性：...）

关系命题（暂定）：
"当 [因果条件] 时，在 [情境脉络] 的背景下，受 [中介条件] 影响，
 [行动者] 采取 [策略] 应对 [现象]，导致 [结果]。"

未归位类属：
- [类属名]：暂无法在典范模型中定位，待后续数据
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

---

> **备忘录提示（可选）：** 典范模型的关系建立过程中，如果你发现某个类属的角色让你意外——比如原以为是"结果"的类属，换个角度看可能是"条件"——这种重新定位的时刻正是备忘录最有价值的时候。直接说"备忘录"或描述你的想法，即可启动 `memo-coach`。

---

### 第四阶段：编码统计摘要与类属演化记录

对编码结果进行量化统计，帮助研究者从数量角度理解资料结构：
- 总句群数
- 事件命名（编码）总数（去重后）
- 类属总数
- 每个类属包含的编码数量及占比
- 编码出现频次最高的前5个编码

**如果是第二份及以后的访谈，额外输出"类属演化摘要"：**

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
类属演化摘要（本次持续比较结果）
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【新增类属】（本份访谈中出现、既有编码表中没有的）
- [类属名]：[简要说明这个类属在本份材料中的表现]

【修订类属】（命名调整、拆分、合并）
- [旧类属名] → [新类属名]：[修订理由]

【属性维度扩展】（既有类属中出现了新的维度极端证据）
- [类属名] / [属性名]：新发现 [极端B] 方向的例证 [Sx]

【典范模型关系更新】
- [关系描述]：确定性从 [旧] → [新]（新证据：Sx）
- 新增关系路径：[描述]

【未见证据的类属】（既有类属在本份材料中缺席）
- [类属名]：本份访谈中无对应编码（可能是被访者特殊性，或趋近饱和）

【饱和度初步判断】
本份访谈中，新增类属 [N] 个，修订类属 [M] 个，新增关系路径 [K] 条。
[若新增/修订极少，可注明：核心类属已趋于饱和，建议进行理论抽样以检验薄弱环节]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

这一摘要是研究者判断是否继续访谈（理论饱和）的重要依据，也是理论抽样方向的提示。

> **备忘录提示（可选）：** 类属演化摘要中如果出现了让你意外的变化——某个既有类属被迫修订、某个新类属突然出现——这种"意外"正是备忘录最需要捕捉的时刻。直接说出来，`memo-coach` 可以帮你把它推演成理论命题。

### 第五阶段：保存编码结果到 Markdown 文件（强制执行，不可跳过）

第四阶段完成后，**必须立即调用 Write 工具**将本份访谈的完整编码结果写入 Markdown 文件。不得仅在对话中输出而不写文件。

文件命名规则：`coding_GT_[被访者编号或简称].md`
（如 `coding_GT_A.md`、`coding_GT_P1.md`）

保存路径：当前工作目录（即项目目录根目录）

文件内容格式：
```
# 扎根编码：【被访者编号/简称】
编码日期：[日期]
研究主题：[研究主题]

## 一、整体主题概览
[第一阶段输出]

## 二、开放编码表
| 句群序号 | 原文内容 | 事件命名（编码） | 类属 |
|---------|---------|----------------|------|
| S1 | ... | ... | ... |

## 三、属性与维度分析
[每个类属的属性、维度、四象限]

## 四、典范模型关系分析
[第三阶段输出]

## 五、编码统计摘要
[第四阶段统计输出]

## 六、类属演化摘要（如适用）
[第四阶段演化摘要输出]
```

Write 工具调用完成后，告知研究者：
> "本份编码已通过 Write 工具保存至 `coding_GT_[被访者编号].md`。如需继续下一份访谈，请提供文本；如所有访谈已完成，输入"生成Excel"可生成完整编码表。"

---

## 最终输出：生成完整 Excel（按需，所有访谈完成后）

当研究者说"生成Excel""所有访谈完成"或主动请求时，才执行此步骤。

将当前项目目录中所有 `coding_GT_*.md` 文件的数据整合，生成一份汇总所有访谈的 Excel 文件。

使用 `scripts/export_coding.py` 脚本生成。先将编码数据构造为 JSON，写入临时文件，再调用脚本。

Excel文件结构（5个工作表）：

**Sheet 1：完整编码表**（所有访谈合并）
| 访谈编号 | 句群序号 | 原文内容 | 事件命名（编码） | 类属 |
|---------|---------|---------|----------------|------|

**Sheet 2：编码-类属汇总**
| 类属 | 包含的编码 | 编码数量 |
|------|----------|---------|

**Sheet 3：属性与维度**
| 类属 | 属性1 | 属性1维度 | 属性2 | 属性2维度 | 四象限分类 |
|------|-------|----------|-------|----------|-----------|

**Sheet 4：典范模型**
| 现象 | 因果条件 | 情境脉络 | 中介条件 | 行动/互动策略 | 结果 | 关系命题 | 确定性 |
|------|---------|---------|---------|-------------|------|---------|--------|

**Sheet 5：编码统计**
包含跨访谈的汇总统计数据

生成命令：
```bash
python3 <skill_path>/scripts/export_coding.py --output "<项目目录>/扎根编码_汇总.xlsx" --json-file /tmp/_grounded_coding_data.json
```

---

## 选择性编码（按需，核心类属浮现后）

当研究者说"进入选择性编码""开始整合理论""确定核心类属"时，执行此阶段。

**前提**：已完成至少 3–4 份访谈的开放编码与主轴编码，有足够的类属积累和典范模型关系基础。

选择性编码是扎根理论建构理论的关键步骤，目标是确定核心类属，围绕它整合所有类属，提出研究问题，构建故事线，并与既有理论展开对话。

### 步骤 1：确定核心类属

从累积的所有类属中，选择一个既有类属作为核心类属，或者构建一个共同上位概念作为核心类属。

核心类属的判断标准（S&C）：
- **出现频率高**：在多份访谈中反复出现
- **关联性强**：与其他大多数类属存在实质性联系（在典范模型中处于枢纽位置）
- **解释力强**：能统摄其他类属，说明"这里的核心现象是什么"
- **概念饱满**：属性和维度已有充分的数据支撑

两种确定方式：
- **选择既有类属**：从已有类属中选出最具统摄力的一个，说明理由
- **构建上位概念**：如果没有单一类属能统摄全局，可以在既有类属之上构建一个更高抽象层次的概念作为核心类属，说明它如何整合多个类属

输出候选核心类属（1–3个），并说明每个的理由和确定方式。

### 步骤 2：依据核心类属提出研究问题

核心类属确定后，围绕它明确或修订研究问题。在扎根理论中，研究问题不是事先给定的，而是在分析过程中逐渐聚焦的。

操作：
1. 基于核心类属，用一句话陈述"这个研究最终在回答什么问题"
2. 对照研究者最初的宽泛切入点，说明研究问题如何从最初的开放探索聚焦到当前的理论焦点
3. 检验研究问题是否是**过程性问题**（"如何……""怎样……""什么条件下……"），而非静态描述性问题

输出格式：
```
核心类属：[名称]

研究问题（聚焦后）：
[一句话陈述]

聚焦路径：
初始切入点：[研究者最初的宽泛问题]
→ 开放编码发现：[关键发现]
→ 主轴编码揭示：[核心关系]
→ 最终聚焦：[当前研究问题]
```

### 步骤 3：构建故事线（Storyline）

围绕核心类属，将所有类属按典范模型框架整合为一个连贯的理论叙事。

```
核心类属（Central Category）：[名称]

因果条件（Causal Conditions）：[触发核心现象的类属]
情境脉络（Context）：[背景性条件类属]
中介条件（Intervening Conditions）：[影响行动策略的类属]
行动/互动策略（Action/Interaction Strategies）：[应对核心现象的类属]
结果（Consequences）：[行动带来的结果类属]
```

用 1–2 段话写出分析故事线：
> "在这个研究中，核心现象是 [核心类属]。它的发生受到 [条件类属] 的影响，发生在 [情境类属] 的背景下。行动者通过 [行动/策略类属] 加以应对，最终产生了 [结果类属] 的结果。"

对归位不确定的类属，标注"归属待研究者判断"。

### 步骤 4：理论对话

将涌现的理论与既有文献进行对话，明确本研究的理论贡献定位。

操作：
1. **识别对话对象**：核心类属和关系命题最接近哪些已有理论概念或框架？列出 2–3 个最相关的理论
2. **比较异同**：本研究的涌现理论与这些已有理论在哪些方面一致？在哪些方面不同或推进了？
3. **定位贡献**：本研究的理论发现对已有知识体系的贡献是什么——是验证、修正、扩展、还是挑战？
4. **标注局限**：诚实标注理论对话中的不确定性——哪些对话需要更多数据支持

> **注意**：理论对话中涉及的文献必须是真实存在的。如果不确定某文献是否真实，必须明确告知"此文献需要你自行核实"。

### 步骤 5：理论命题草案

基于典范模型和故事线，提出 3–5 条可被后续数据检验的理论命题，格式：

> **命题 N**：当 [条件] 时，[行动者] 倾向于采取 [策略]，从而导致 [结果]。

每条命题附说明：目前有哪些数据支持，哪些维度尚待补充证据。

> **移交声明**：选择性编码的核心类属确定和命题取舍是研究者的理论判断，以上结果仅供参考。建议在确定核心类属后，使用 `negative-case-finder` 对命题进行反例压测。

## 过程中的对话输出

虽然编码过程是自动连续执行的，但在对话中仍然需要逐步呈现分析过程和中间结果，让用户能够跟踪分析进展。具体地：

1. **第一阶段完成后**：输出主题概览的文字说明
2. **第二阶段完成后**：依次输出事件命名表 → 含类属列的编码表 → 每个类属的属性与维度分析
3. **第三阶段完成后**：输出典范模型关系分析
4. **第四阶段完成后**：输出编码统计摘要（含类属演化摘要和典范模型关系更新）
5. **第五阶段完成后**：告知用户 Markdown 文件的保存路径

## 编码质量原则

编码过程中始终遵循以下原则：

1. **忠于原始资料**——编码必须有原文依据，不能凭空臆造
2. **保持开放性**——不预设理论框架，让概念从资料中涌现
3. **持续比较**——每处理一个新编码，都要与**既有编码和类属**进行比较：这个现象在此前的访谈中出现过吗？属性是否一致？是否需要修订类属边界？这是跨文本比较，不是单份文本内的一致性检查
4. **理论敏感性**——对资料中隐含的概念和关系保持敏感，但不受既有理论束缚
5. **饱和性检查**——如发现某些编码反复出现且不再产生新的属性或维度，在统计摘要中注明可能已达到理论饱和
6. **三阶段递进**——开放编码建构概念（是什么），主轴编码建立关系（怎么关联），选择性编码整合理论（核心是什么、如何解释）。三个阶段的抽象层次逐步提升，不可跳跃

## 语言

- 默认使用中文进行编码和输出
- 如果质性资料为英文，则编码词汇用英文，但分析说明仍用中文（除非用户要求英文输出）
- 编码词汇尽量简洁，以动名词形式为主

