Add markdown sink for filtered knowledge notes
This commit is contained in:
+7
-3
@@ -8,11 +8,13 @@
|
||||
- 当前 MCP 服务的职责、接口和边界
|
||||
3. `filter-rule-engine-design.md`
|
||||
- 过滤层的输入输出、规则结构与当前实现
|
||||
4. `source-schema-design.md`
|
||||
4. `markdown-sink-design.md`
|
||||
- 第一版 Markdown sink 的输入输出、目录结构与落地方式
|
||||
5. `source-schema-design.md`
|
||||
- `source -> item -> document` 的对象设计
|
||||
5. `reading-pipeline-design-notes.md`
|
||||
6. `reading-pipeline-design-notes.md`
|
||||
- 更上层的阅读流方案与阶段划分
|
||||
6. `summary-loop-explained.md`
|
||||
7. `summary-loop-explained.md`
|
||||
- 当前 LLM 摘要校验闭环的解释
|
||||
|
||||
## 当前文档分层
|
||||
@@ -40,6 +42,8 @@
|
||||
- 提取 JSON -> LLM 摘要 JSON -> 校验 的闭环说明
|
||||
- `docs/filter-rule-engine-design.md`
|
||||
- 第一版规则过滤引擎设计与落地位置
|
||||
- `docs/markdown-sink-design.md`
|
||||
- 第一版 Markdown sink 设计与落地位置
|
||||
|
||||
### 3. 上下游方案设计
|
||||
|
||||
|
||||
+15
-12
@@ -24,6 +24,8 @@
|
||||
- 已跑通 `FreshRSS -> item -> content extraction` 单条链路
|
||||
- 已定义过滤层输入输出 schema
|
||||
- 已完成第一版规则引擎、本地脚本和 MCP tool
|
||||
- 已定义 sink 输入输出 schema
|
||||
- 已完成第一版 Markdown sink 与本地写入脚本
|
||||
|
||||
## 当前关键文件
|
||||
|
||||
@@ -39,6 +41,10 @@
|
||||
- `src/summary_mcp/models/filtering.py`
|
||||
- 过滤引擎:
|
||||
- `src/summary_mcp/filters/engine.py`
|
||||
- sink 模型:
|
||||
- `src/summary_mcp/models/sink.py`
|
||||
- Markdown sink:
|
||||
- `src/summary_mcp/sinks/markdown.py`
|
||||
- 默认过滤规则:
|
||||
- `configs/filter_rules.json`
|
||||
- 校验 CLI:
|
||||
@@ -51,20 +57,16 @@
|
||||
- `scripts/run_freshrss_extract.py`
|
||||
- 过滤脚本:
|
||||
- `scripts/run_filter_rules.py`
|
||||
- Markdown sink 脚本:
|
||||
- `scripts/run_markdown_sink.py`
|
||||
- Markdown sink 文档:
|
||||
- `docs/markdown-sink-design.md`
|
||||
- 当前提示词:
|
||||
- `outputs/llm-summary-prompt.txt`
|
||||
- FreshRSS 原始响应样例:
|
||||
- `outputs/freshrss.raw.json`
|
||||
- FreshRSS item 样例:
|
||||
- `outputs/freshrss.items.json`
|
||||
- FreshRSS 提取结果:
|
||||
- `outputs/freshrss.extracted.json`
|
||||
- 过滤结果样例:
|
||||
- `outputs/filter-decision.json`
|
||||
- 文档索引:
|
||||
- `docs/README.md`
|
||||
- MVP 归档:
|
||||
- `docs/content-extract-mcp-mvp-archive.md`
|
||||
- 当前 TODO:
|
||||
- `TODO.md`
|
||||
|
||||
@@ -79,21 +81,22 @@
|
||||
- 标准化 `item` 可继续进入内容提取流程
|
||||
- 规则引擎可对结构化摘要结果输出 `keep / drop / review` 决策
|
||||
- MCP tool 可承接“由上层 LLM/Agent 调用过滤”的模式
|
||||
- Markdown sink 可将过滤后的结果写入本地知识库目录
|
||||
|
||||
## 当前未开始的下一阶段
|
||||
|
||||
- 设计知识库入库格式
|
||||
- 设计 webhook / 推送格式
|
||||
- 把 FreshRSS 拉取与提取流程进一步批量化/调度化
|
||||
- 迭代更细的过滤规则与个性化上下文
|
||||
- 决定是否扩展 Notion / Webhook / 其他 sink
|
||||
|
||||
## 收束后建议从这里继续
|
||||
|
||||
优先从这两个问题继续:
|
||||
|
||||
1. 先设计知识库 sink 的输入输出格式
|
||||
2. 再决定先接 webhook / 推送还是继续细化过滤规则
|
||||
1. 先设计 webhook / 推送格式
|
||||
2. 再决定是否扩展其他 sink,而不是继续深化 Markdown sink 本身
|
||||
|
||||
## 一句话结论
|
||||
|
||||
当前 MVP 已完成,FreshRSS 上游和第一版规则过滤层都已接通,下一阶段应转向下游 sink 与推送设计。
|
||||
当前 MVP 已完成,FreshRSS 上游、第一版规则过滤层和第一版 Markdown sink 都已接通,下一阶段应转向推送层与更完整的下游集成。
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
# Markdown Sink 设计
|
||||
|
||||
## 1. 目标
|
||||
|
||||
第一版 sink 不直接绑定外部平台,而是先落一个稳定的 `Markdown sink`。
|
||||
|
||||
原因:
|
||||
|
||||
- 可审计
|
||||
- 可版本化
|
||||
- 易迁移
|
||||
- 可直接兼容 Obsidian / 通用 Markdown 知识库
|
||||
|
||||
## 2. 统一输入
|
||||
|
||||
Markdown sink 读取统一的 `SinkInput`:
|
||||
|
||||
- `item`
|
||||
- `article`
|
||||
- `summary`
|
||||
- `filter_decision`
|
||||
- `metadata`
|
||||
|
||||
这样未来扩展 Notion sink、Webhook sink 时,可以继续复用同一套上游输入结构。
|
||||
|
||||
## 3. 目录结构
|
||||
|
||||
当前建议目录结构:
|
||||
|
||||
```text
|
||||
knowledge-base/
|
||||
inbox/
|
||||
review/
|
||||
archive/
|
||||
```
|
||||
|
||||
具体落盘规则:
|
||||
|
||||
- `keep` -> `knowledge-base/inbox/YYYY/YYYY-MM/`
|
||||
- `review` -> `knowledge-base/review/YYYY/YYYY-MM/`
|
||||
- `drop` -> `knowledge-base/archive/YYYY/YYYY-MM/`
|
||||
|
||||
## 4. 文件命名
|
||||
|
||||
文件名格式:
|
||||
|
||||
```text
|
||||
YYYY-MM-DD-title-slug.md
|
||||
```
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
2026-03-21-kimi-cursor.md
|
||||
```
|
||||
|
||||
## 5. Markdown 内容结构
|
||||
|
||||
输出采用:
|
||||
|
||||
- YAML frontmatter
|
||||
- 摘要区
|
||||
- 要点区
|
||||
- 过滤决策区
|
||||
- 原文信息区
|
||||
- 正文摘录区
|
||||
|
||||
frontmatter 中保留:
|
||||
|
||||
- `title`
|
||||
- `url`
|
||||
- `source_id`
|
||||
- `item_id`
|
||||
- `extract_id`
|
||||
- `category`
|
||||
- `worth_keeping`
|
||||
- `decision`
|
||||
- `priority`
|
||||
- `topics`
|
||||
- `keywords`
|
||||
- `labels`
|
||||
- `published_at`
|
||||
- `saved_at`
|
||||
- `quality_flags`
|
||||
|
||||
## 6. 当前落地位置
|
||||
|
||||
- sink 模型:
|
||||
- `src/summary_mcp/models/sink.py`
|
||||
- Markdown sink:
|
||||
- `src/summary_mcp/sinks/markdown.py`
|
||||
- 本地运行脚本:
|
||||
- `scripts/run_markdown_sink.py`
|
||||
|
||||
## 7. 当前阶段结论
|
||||
|
||||
第一版知识库不先绑定 Notion、Lumina 或数据库,而是先让过滤后的内容稳定进入 Markdown 知识库。
|
||||
|
||||
只要这层格式稳定,后续可以继续扩展:
|
||||
|
||||
- Obsidian Vault
|
||||
- Logseq
|
||||
- Notion
|
||||
- Webhook
|
||||
- 自定义数据库 sink
|
||||
Reference in New Issue
Block a user