3.6 KiB
3.6 KiB
文档生命周期和处理策略
文档生命周期
用户放入 sources/(支持子目录)
│
▼
检查文件(跳过空文件、检测冲突)
│
▼
解析文件内容(失败则保留在 sources/)
│
├──▶ 写入 parsed/<文件名>.md(含头部元信息)
│
├──▶ 移动原始文件到 archive/<文件名_YYYYMMDDHHmm>.<ext>
│
├──▶ 更新 manifest.json
│
└──▶ 增量更新 project.md(追加文件索引和更新记录)
归档命名规则
所有进入 archive 的文件都必须带时间戳后缀,格式为 <文件名_YYYYMMDDHHmm>.<扩展名>,即使只有一个版本。
示例:
需求文档.docx→archive/需求文档_202602181600.docx技术方案.pdf(第二次入库)→archive/技术方案_202602181725.pdf
同名文件更新
同名同扩展名的文件再次入库时:
parsed/中的 markdown 文件被覆盖为最新版本archive/中保留所有历史版本(每个版本独立的时间戳文件)manifest.json中该文件条目的versions数组追加新版本记录
同名不同扩展名冲突检测
因为 parsed 产物以文件名(不含扩展名)+ .md 命名,同名不同扩展名的文件会产生冲突。
检测规则
- sources/ 内部检测:扫描 sources/ 中所有文件(含子目录),如果存在同名但不同扩展名的文件(如
技术方案.pdf和技术方案.docx),拒绝处理并提示用户重命名 - 与已入库文件检测:将 sources/ 中文件的名称(不含扩展名)与 manifest.json 中已有记录对比,如果名称相同但扩展名不同,拒绝处理并提示用户重命名
处理方式
冲突文件不予处理,保留在 sources/ 中,提示用户重命名后重新执行 ingest。非冲突文件正常处理。
文件类型解析策略
| 文件类型 | 解析方式 |
|---|---|
.docx, .pdf, .pptx, .xlsx |
使用名为 lyxy-reader-office 的 skill 解析 |
其他所有文件(.md, .txt, .csv, .json, .xml, .yaml, .yml, .log, .html 等) |
直接读取文件内容 |
Office 文档解析
解析 office 文档时,必须查找当前环境中名为 lyxy-reader-office 的 skill,阅读其 SKILL.md 获取具体的执行方式和命令。
如果环境中不存在 lyxy-reader-office skill,且没有其他可替代的文档解析 skill,则提示用户无法处理 office 文档,中止整个 ingest 流程。
sources/ 扫描规则
扫描 sources/ 时递归检查所有子目录中的文件。parsed 产物的路径仍为 parsed/<文件名>.md(扁平化存放),不保留 sources 中的子目录结构。
空文件处理
sources/ 中 0 字节的空文件应跳过处理,不解析、不归档、不更新 manifest。处理完成后向用户列出被跳过的空文件列表,提示用户检查。
解析失败处理
如果某个文件解析失败(如文档损坏、解析器报错),该文件保留在 sources/ 中不移动,报告错误信息,继续处理其他文件。
更新策略
增量追加(默认,由 ingest 触发):
- 新文件:在文件索引表追加新行,在更新记录追加条目
- 已有文件更新:覆盖文件索引表中对应行的最新归档路径和摘要
- 概述和关键信息部分不自动更新
全量重写(由 rebuild 触发):
- 读取所有 parsed/*.md 文件
- 重新生成概述、关键信息、文件索引
- 保留历史更新记录,追加本次 rebuild 条目