Files

119 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Source → Markdown
无论输入是什么,Phase 1 都先转成统一的 `source/source.md`,并把风险写进
`source/extraction-notes.md`。
## 产物
`source.md` 要包含:标题 · 来源 · 作者 / 时间 / 链接(若可得)· 正文 · 表格 ·
图片占位 · 代码块 · 引用 · 附录 / 脚注。
`extraction-notes.md` 要记录:输入类型 · 提取方式 · 可能丢失的信息 · PDF/DOCX 中
无法可靠还原的版式 · 图片 / 表格 / 脚注 / 代码是否完整 · 需要用户补充的素材或上下文 ·
**源语言、是否需要翻译、目标语言、翻译版文件名与翻译说明**。
## 语言与翻译
抽取后判断 `source.md` 的语言,并按 Phase 0 记录的目标语言决定:
- 未指定目标语言,或目标语言与源一致 → **不翻译**,最终文章语言 = 源语言。
- 指定了目标语言且与源不一致 → 产出 `source/source.<lang>.md`(如 `source.zh.md` / `source.en.md`),
作为 Phase 2+ 的**事实底座**;原 `source.md` 保留备查。
- 翻译要求:**地道、去翻译腔** —— 按目标语言的表达习惯重组句子,不逐字直译,不留生硬外语语序 /
被动堆叠 / 异国标点;术语 / 数字 / 代码 / 公式 / 引用保持准确;标题层级、结构、信息保留比例不变。
- 翻译只在源文层做一次;后续编辑、改写语气、组件化都基于翻译版进行。
## 不同输入的处理原则
| 输入 | 处理方式 | 自检重点 |
|---|---|---|
| URL | 抓网页正文,清理导航 / 广告 / 推荐 | 是否抓到主体,链接和图片是否保留 |
| PDF | 提取文本 / 章节 / 表格 / 图片占位 | 断行错乱、页眉页脚混入、表格丢失 |
| DOCX | 提取标题层级 / 段落 / 表格 / 图片占位 | 样式不重要,结构和内容完整性重要 |
| Markdown | 保持原有标题 / 代码块 / 表格 | 不要过度改写源文 |
| 纯文本 | 识别结构并标注不确定处 | 不要擅自编造层级 |
| 截图 / 图片 | 转成图片占位 + 说明,记录用途 | 记录到 extraction-notes,等用户确认 |
## 抽取脚本选择
Skill 提供两条抽取路径:MarkItDown 主路径 + 轻量 fallback。Agent 应在 Phase 1 先判断
输入类型、信息保留要求和本机环境,再选择脚本。
### 1. MarkItDown 主路径
对 PDF / DOCX / PPTX / HTML / 复杂文档,尤其是用户要求 80-100% 信息保留时,优先使用
`scripts/source-to-markdown-markitdown.py`:
```bash
python3.10 <path-to-beautiful-article>/scripts/source-to-markdown-markitdown.py <input> -o source/source.md
```
MarkItDown 需要 Python 3.10+。它是可选增强依赖,不随组件库或脚手架强制安装。
若未安装,按需提示用户安装:
```bash
python3.10 -m pip install "markitdown[pdf,docx]"
```
如果本机没有 `python3.10` 命令但有 `uv`,可临时拉起带 MarkItDown 的环境:
```bash
uv run --python 3.12 --with "markitdown[pdf,docx]" python \
<path-to-beautiful-article>/scripts/source-to-markdown-markitdown.py <input> -o source/source.md
```
不要默认安装 `markitdown[all]`,除非用户明确需要 PPTX / XLSX / 音频 / YouTube / Azure 等
额外格式。全量安装更重,也更容易引入环境问题。
### 2. 轻量 fallback
如果 MarkItDown 不可用、Python 版本不足、转换失败,或输入只是 Markdown / TXT / 简单 HTML,
使用 `scripts/source-to-markdown.py`:
```bash
python3 <path-to-beautiful-article>/scripts/source-to-markdown.py <input> -o source/source.md
```
脚本会探测可用的解析库(pdfminer / pdfplumber / python-docx / BeautifulSoup),缺库时
打印安装建议并优雅降级。脚本只做**机械抽取**;正文清理、占位标注、风险记录仍由 agent 完成。
URL 也可直接用 agent 的网页抓取能力获取正文,再清理。
### 3. Agent 决策规则
- PDF / DOCX / PPTX / 复杂 HTML:先尝试 MarkItDown。
- Markdown / TXT:直接用 fallback,保持原文结构,不要过度处理。
- URL:可先用 Agent 的网页抓取能力获取正文;若已保存为 HTML 文件,再按复杂度选择
MarkItDown 或 fallback。
- 100% 信息保留:抽取后必须更严格自检,必要时同时跑 MarkItDown 与 fallback,对比是否
有表格、代码、脚注、图片占位遗漏。
- 任一脚本产物都只是 `source.md` 草稿;Agent 必须继续清理噪音、补图片占位,并写
`source/extraction-notes.md`。
## Source Phase 自检(主 Agent 内联 · 5 条 checklist)
源材料质检**不是硬性 SubAgent 质检点**。主 Agent 进 Phase 2 前反正要通读 `source.md`,
就地按这 5 条核查、按结论修复即可(无需单独的 review 文件):
1. **完整性**:是否被截断?体量是否和原文相称(长 PDF / 长文没有只抽到一半 / 只抓到首屏)?
2. **结构**:标题层级是否保留?还是被压平成一片正文(后面没法分章)?
3. **关键载体**:表格 / 代码 / 公式 / 引用 / 脚注是否保留且没损坏(表格没挤成一行、代码缩进还在、
公式没变乱字符)?
4. **噪声**:是否误把导航 / 广告 / Cookie 横幅 / 推荐阅读 / 页眉页脚页码写进正文?编码有没有伤
(乱码、连字 `fi`、软连字符断词、两栏 PDF 阅读顺序错乱)?
5. **不确定项**:图片是否以占位标注?拿不准的都写进 `extraction-notes.md` 了吗?
> ⚠️ 上面 1/4 能孤读 markdown 抓到,但 **2/3 里"静默丢失"的表/段**(被悄悄删掉、吞掉)
> 光看 markdown 看不出来——必须对照 `original.*`。
## 升级为独立 Source Reviewer(仅限复杂/低置信源)
**只有**当 `extraction-notes.md` 标记了"低置信 / 复杂 PDF/DOCX / 转换吃不准 / 要求 100% 保留的关键源"
时,才升级为独立 SubAgent,并**强制对照原件做 diff 式核查**,写 `review/source-review.md`:
```text
请作为 Source Reviewer。同时读取 source/original.*(原件)和 source/source.md(转换产物)。
逐项做 diff 式核查:对照原件,source.md 是否漏掉了表格 / 段落 / 脚注 / 代码 / 图,
是否混入噪音,是否有结构塌陷或编码损坏。
只输出"按出现顺序的差异清单 + 必须修复项",不评价文章好不好看,不要替我改文件。
```