---
name: obsidian-knowledge-filter
description: 从知识库目录中检索、筛选和提取特定关键词相关知识
license: Apache-2.0
author: github/cafe3310
depends_on_skill: []
depends_on_binary:
  - python3
---

# 技能: Obsidian 知识筛选器 (Obsidian Knowledge Filter)

## 描述

此技能旨在从由大量 Markdown 文件组成的知识库（例如 Obsidian Vault）中，通过一个精确且分阶段的工作流，进行知识的检索、筛选和提取。它采用带编号前缀的 YAML 和 Markdown 文件来管理每一步的中间数据，并在每个关键步骤暂停以供用户审阅，确保最终产出的内容高度相关且无重复。

**核心理念**: 此技能的目标是在用户的指导下，通过一系列独立的脚本和分析步骤，精确地从知识库中提炼与特定主题相关的信息，并通过结构化的方式呈现，最终形成综合分析报告。

## 何时使用

当用户请求您通过查找、关联和综合分散在个人知识库中的信息来解决复杂问题时，请使用此技能。此工作流特别适用于需要高精度、希望减少冗余信息并全程参与筛选过程的场景。

## 工作流程

该过程分为四个主要阶段，每个阶段都以用户审阅为节点。

### 阶段 1: 关键词搜索与分析

#### 步骤 1.1: 运行分析脚本 `001_analyze_files.py`

此脚本递归地在指定目录中搜索所有 `.md` 文件，并执行以下操作：
- **文件排除**: 自动跳过任何路径中包含 `tmp-`, `_attachments`, 或 `.trash` 的文件/目录。
- **关键词分析**: 查找包含指定关键词的文件，记录每个关键词的出现频率。
- **上下文合并**: 将包含关键词的行的上下文（默认为前后 10 行）合并成连续的行号区间。

- **输出**: 在一个新建的 `tmp-YYYY-MM-DD-HH-MM-SS-analysis/` 临时目录中，生成 `001_analysis.yaml`。

---
**`001_analysis.yaml` 格式详解:** 
这是一个 YAML 文件，包含一个文件信息对象的列表。每个对象都具有以下结构：
```yaml
- file_path: '文件夹/2025-12-29-示例文件.md'  # 相对于当前工作目录的路径
  keyword_counts:
    - word: '关键词1'
      count: 5
    - word: '关键词2'
      count: 2
  line_ranges:
    - [10, 30]   # 第一个内容提取区间
    - [45, 65]   # 第二个内容提取区间
```

---

#### 步骤 1.2: 用户审阅分析文件
Agent 暂停并请求用户审阅 `001_analysis.yaml`，用户可手动编辑此文件以增删文件或修改行号区间。

### 阶段 2: 内容提取与清理

#### 步骤 2.1: 运行提取脚本 `002_extract_content.py`
用户确认后，此脚本会读取 `001_analysis.yaml`，并根据其中的 `file_path` 和 `line_ranges` 提取相应的内容。

- **内容清理**: 在提取内容后，脚本会执行以下三项自动清理：
    1.  **合并换行**: 将连续的多个换行符合并为一个。
    2.  **移除加粗**: 删除所有的 Markdown 加粗标记 (`**`)。
    3.  **移除图片**: 删除所有的 Markdown 图片链接 (`![[...]]`)。

- **输出**: 在同一个临时目录中，生成 `002_content.yaml`，其结构与 `001_analysis.yaml` 类似，但每个对象都增加了一个 `content` 字段。

---
**`002_content.yaml` 格式详解:** 
```yaml
- file_path: '文件夹/2025-12-29-示例文件.md'
  keyword_counts:
    # ... (同上)
  line_ranges:
    # ... (同上)
  content: "这是从文件中提取并清理后的文本内容...\n..."
```
---

#### 步骤 2.2: 用户审阅内容文件
Agent 再次暂停，请求用户审阅 `002_content.yaml`，确保提取和清理后的内容符合预期。

### 阶段 3: 内容洞察综合

#### 步骤 3.1: Agent 进行分块综合分析
用户确认后，Agent 开始对 `002_content.yaml` 进行智能分析。为提升效率并保证分析的连贯性，Agent 采用分块「读取-分析-写出」循环模式：

1.  **分块读取**: Agent 以 1000 行为单位，逐块读取 `002_content.yaml` 文件；例如，第一次会读取 1-1000 行。
2.  **综合分析**: 针对刚才读取的 **整个内容块**（其中可能包含多个文件片段），Agent 在内部进行一次性综合分析，提炼出所有与用户任务相关的洞察、观点和联系。
3.  **单次写入**: Agent 将 2 产生的分析洞察，一次性地追加写入到 `003_content_analysis.md` 文件中，清晰地标注每个洞察来源于哪个文件。
4.  **循环执行**: 跳到 1 继续下一块，直到处理完所有内容块。

这种方法避免了逐条分析的低效与碎片化，确保了分析过程的流畅性和上下文关联性。

- **输出**: `003_content_analysis.md`，其中包含了对所有文件片段的综合洞察。

#### 步骤 3.2: 用户审阅洞察文件

Agent 完成所有内容块的分析后，暂停并请求用户审阅最终生成的 `003_content_analysis.md`，确认洞察的准确性和深度。

### 阶段 4: 最终报告合成

#### 步骤 4.1: Agent 生成最终报告

在用户完成最终审阅后，Agent 将以 `003_content_analysis.md` 为素材，撰写一份逻辑连贯、结构清晰的最终报告。

- **输出**: `004_report.md`

#### 步骤 4.2: 提交结果

Agent 向用户提交最终的 `04_report.md` 报告。
