# Legal QA Extractor

> 从律师与客户沟通记录中提取有价值的法律问答对，生成结构化知识库内容。本技能应在用户需要整理客户咨询记录、从对话中提取可复用法律知识、创建问答知识库、或准备内容营销素材时使用。支持严格客户信息脱敏处理。

- Skill: `thomasmoreai/legal-qa-extractor` (Agent Skill)
- Install (CLI): `npx skillmds@latest add thomasmoreai/legal-qa-extractor`
- Raw SKILL.md: https://api.skillmd.com/api/skills/thomasmoreai/legal-qa-extractor/raw
- Safety review: PASS (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: ThomasMoreAI (https://skillmd.com/u/thomasmoreai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/thomasmoreai/legal-qa-extractor

---


# 法律问答提取技能

## 概述

从律师与客户的沟通记录中提取有价值的**法律问答对**（客户问题 + 律师解答），生成结构化知识库内容。适用于将客户咨询转化为可复用的法律知识，供后续整理成文章、案例或学习材料。

**核心价值**：提取那些可以被其他客户复用的问答内容，而不是单一客户的具体案情。

## 核心原则

### 客户信息保护

**绝对禁止**在问答内容中包含：
- ❌ 客户真实姓名
- ❌ 企业/机构名称
- ❌ 具体地址、联系方式
- ❌ 任何可识别个人或企业的信息

**脱敏处理标准**：
- ✅ 客户姓名 → 使用"当事人"、"客户"、"甲/乙"等代称
- ✅ 企业名称 → 使用"某公司"、"某企业"、"该企业"等代称
- ✅ 具体信息 → 模糊化为"某地"、"某时间"、"相关人员"等
- ✅ 客户原话 → 脱敏后引用："客户询问..."而非"张总说..."

### 问答对的价值判断

提取的问答应该满足以下条件之一：
- **普遍性**：其他客户也可能遇到同类问题
- **典型性**：代表了某类法律场景的常见关切
- **教育性**：律师的解答有普法价值或指导意义
- **复用性**：可以独立成文或作为知识库条目

## 工作流程

### 步骤 1：分析输入内容

获取沟通记录文档和用户的具体要求，理解：
- 文档中的沟通内容和情境
- 用户希望重点关注哪些方面
- 哪些问答具有复用价值

### 步骤 2：识别有价值的问答对

**完整梳理文档中的问答内容**，按以下维度识别价值：

#### 问答识别维度

1. **直接问答** - 客户明确提出问题，律师给出解答
2. **追问回应** - 客户追问，律师进一步解释
3. **风险提醒** - 律师主动提醒的风险点及应对建议
4. **操作指引** - 涉及流程、步骤、注意事项的问答
5. **普遍关切** - 其他客户也可能遇到的同类问题

#### 问答提取方法

- **语义分析**：理解客户真实问题和律师核心观点
- **逻辑归纳**：将分散的对话整理为独立问答对
- **价值评估**：判断问答是否具有普遍适用性
- **标准化表述**：将口语化表达转化为规范的问答格式

### 步骤 3：生成结构化报告

输出文件保存至**原文档的同一目录**，文件命名：`{原文档名}_法律问答提取_{YYYYMMDD}.md`

**输出格式**详见 [output-template.md](references/output-template.md)。

每个问答对包含以下部分：

- **问题**：客户提出的问题（标准化表述）
- **律师解答**：律师的核心观点和建议（300-500字）
- **问题背景**（可选）：该问题出现的情境（200-300字）
- **价值标签**：普遍性/典型性/教育性/复用性
- **适用场景**：什么情况下读者会关心这个问答

### 步骤 4：问答分类与关联

提供以下分析维度：

- **问答特征分析**：重点问答数量、常规问答数量、价值分布
- **领域分类**：按法律领域或业务场景分类
- **关联分析**：哪些问答之间存在关联、可组合成文章

## 质量标准

- **独立性**：每个问答对可以独立理解，不依赖完整对话背景
- **普遍性**：问答内容对其他客户也有参考价值
- **完整性**：问题和解答都清晰完整，没有断章取义
- **脱敏严格**：严格遵循客户信息保护规则
- **可复用**：提取的问答可以直接用于文章、知识库或学习材料

## 输入要求

本技能接受以下类型的输入：

1. **文档路径**：用户提供的沟通记录文档路径
2. **粘贴内容**：用户直接粘贴的沟通记录内容
3. **用户要求**：用户希望重点关注哪些类型的问答

## 配置与归档

### 用户配置

本技能支持通过 `config/.env` 文件自定义扫描行为：

```bash
# 复制模板
cp config/.env.example config/.env

# 编辑配置
QA_EXTRACTOR_SCAN_PATHS=~/Desktop/Clawd/10 - ⚖️ 法律工作/工作文档/011 - 潜在项目
QA_EXTRACTOR_SCAN_DEPTH=3
QA_EXTRACTOR_FILE_TYPES=md,txt
```

### 扫描记录

技能会维护 `archive/scan-log.json` 记录扫描状态：

```json
{
  "version": "1.1.0",
  "last_full_scan": "2026-05-10T23:00:00+08:00",
  "watch_paths": [
    {
      "path": "~/Desktop/Clawd/10 - ⚖️ 法律工作/工作文档/011 - 潜在项目",
      "last_scanned": "2026-05-10T23:00:00+08:00",
      "status": "active"
    }
  ],
  "projects": {
    "潜在项目_A": {
      "source_files": ["path/to/file1.md", "path/to/file2.md"],
      "last_extracted": "2026-05-10",
      "qa_count": 8,
      "output_file": "archive/extractions/2026-05-10_潜在项目_A_qa.md",
      "status": "active"
    }
  },
  "files": {
    "path/to/file.md": {
      "content_hash": "sha256:abc123...",
      "last_modified": "2026-05-09",
      "last_extracted": "2026-05-10",
      "qa_count": 5,
      "status": "active"
    }
  },
  "archived": {
    "path/to/old_project": {
      "archived_at": "2026-05-01",
      "reason": "moved_by_user"
    }
  }
}
```

**字段说明：**

| 字段 | 用途 |
|------|------|
| `files.*.content_hash` | 文件内容指纹，变化时触发重新提取 |
| `files.*.status` | `active` / `archived`，归档后跳过扫描 |
| `projects.*.source_files` | 同一项目的多份沟通记录，合并输出 |
| `projects.*.status` | `active` / `archived`，项目归档后锁定 |
| `archived.*` | 记录已移走的路径，防止重复扫描 |

**增量扫描逻辑：**

文件夹类型判断（用于识别归档与活动项目）：

| 命名模式 | 类型 | 处理方式 |
|----------|------|----------|
| 纯数字 / 日期区间（如 `24`、`25 01-06`、`26 01-06`） | 归档容器 | 深度扫描内部子文件夹 |
| 日期+姓名（如 `260323 张美金...`、`260404 顾忆芬...`） | 直接项目 | 直接扫描该文件夹 |
| 其他 | 项目 | 直接扫描该文件夹 |

1. 遍历 watch_paths 下所有直接子文件夹
2. 判断每个文件夹类型（归档容器 / 直接项目）
3. 对归档容器递归扫描；对直接项目扫描内容文件
4. 对每个文件计算 `content_hash`
5. 若文件不在 scan-log，或 hash 与记录不一致 → 触发提取
6. 若项目内所有文件均变化才触发提取
7. 提取完成后，按项目合并多份记录，输出单份 QA 文件

### 抽取结果归档

抽取的问答对保存在 `archive/extractions/` 目录，按项目聚合：

```
archive/
├── scan-log.json              # 扫描状态记录
└── extractions/
    ├── 2026-05-10_潜在项目_A_qa.md   # 项目A的多轮咨询合并
    ├── 2026-05-10_潜在项目_B_qa.md   # 项目B的单次记录
    └── 2026-05-11_潜在项目_C_qa.md   # 项目C（后续增量新增）
```

**多轮咨询合并逻辑：**
- 同一项目文件夹内的所有 `.md/.txt` 文件视为同一项目的多轮沟通
- 提取时按文件顺序（文件名或修改时间）整合所有问答对
- 去重：相同问题的多次出现保留最新解答
- 输出文件名：`{日期}_{项目名}_qa.md`

**注意**：`archive/` 目录不纳入 Git 版本控制。

## 适用场景

- 整理客户咨询记录为可复用知识
- 从对话中提取内容营销素材
- 建立法律问答知识库
- 准备普法文章的素材
- 制作客户常见问题清单
- 定时扫描项目文件夹，增量提取新内容

