任务架构

为 Android 本地 AI 明确 DOCX 修订文本边界

在文档包已按独立容器策略安全打开后,按用户选择的修订视图提取文本;不声称完成完整 Word 渲染或修改源文件。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-08 · Fact IDs: ANDROID-PRIVACY-01, DOCX-REVISION-SEMANTICS-2026-10

直接回答

DOCX 是包含 WordprocessingML 部件的文档包,不是只有无害格式的纯文本。如果本地 AI 功能要从用户选择的文档提取文字,必须在向模型发送内容前决定用户想要哪种修订视图。即使删除内容已不属于接受后的文本,跟踪修订仍可能让它留在包中;插入文字也可能只是待审提议。把所有文本节点都交给推理,可能泄露用户以为已删除的内容,或把相互矛盾的版本拼在一起。本文讨论在文档包已按单独验证的容器策略打开之后,如何做修订感知的文本提取;不讲 ZIP 路径校验或 XML 外部实体加固,也不声称 Cove 当前支持 DOCX 导入。 在 WordprocessingML 中,`w:ins` 和 `w:del` 标记插入和删除的行内内容;已删除文字可由 `w:delText` 表示。move-from 和 move-to 标记代表另一种修订关系。简单遍历所有后代文本会丢失这些区别,可能包括用户认为已删除的句子、丢失替换配对,或把从未在文档中出现的两个版本拼成一句话。对每段提取内容保留来源 part 和修订类型,或拒绝 parser 无法解释其修订结构的文档。 修订语义远不止过滤两个行内标签。删除段落标记的修订可以合并相邻段落,但并不自动删除原段落文字;Microsoft 的 Open XML 示例明确说明了这一点。段落或表格属性的修订可能改变结构而不改变 run 文本。脚注、尾注等相关 part 也可能包含修订标记。只提取文本的 importer 应明确支持哪些 part 与修订类型,并对未支持标记报告限制,不可称为完整 Word 视图。字段及其缓存结果、批注、页眉和页脚是不同内容来源;跳过时不要暗示它们已经纳入。 应选择产品策略,而不是猜测。原始近似投影模拟拒绝待处理修订,最终/提议投影模拟接受这些修订,复核视图则保留待审的备选内容和修订元数据。本文的“接受视图”指用户选择的、模拟接受全部受支持待处理修订的派生投影,不证明作者已经批准。如果每个修订选择不同决定,需要明确的决定映射和具备相应能力的实现。视图含义由用户或文档工作流决定;作者、时间戳或 trackRevisions 都不是接受决定。用成熟实现计算选定视图,或明确标记不支持语义;不能在导入时改写原始包来接受或拒绝修订。 保持提取只读。保留源字节以及稳定标识或摘要,然后创建单独的派生表示,并显式标记 inserted、deleted、moved-from 和 moved-to。可行时把每段连回所属 part 和位置。如果模型只接收已接受视图,应保留排除修订的记录,但不要把这些文字送进 prompt;如果用户要求复核,应在处理前用可理解的预览展示不同版本。按功能保留策略清除派生副本,绝不删除或改写原始 content-provider 文档。 用预期视图由独立方式准备的合成 DOCX 夹具测试修订案例。覆盖插入和删除 run、`w:delText`、移动、删除段落标记、跟踪的表格或段落属性、脚注/尾注、字段、嵌套或损坏修订、无修订以及不支持的 part。对照所选策略评估提取结果,而非普通纯文本 dump 或某个编辑器偶然呈现。放一个位于删除内容中的 sentinel,断言它不会进入仅接受视图的模型 prompt。预览、取消、解析失败和成功后还要确认源文件摘要不变。 Microsoft Open XML SDK 文档可作为包结构和修订格式证据,但其中 .NET 类不是 Android API,也不证明 Android 库支持相同视图。应固定并测试 Android 产品实际使用的 parser/provider,包括修订语义、part 覆盖、内存限制和错误行为。通过的夹具只支持该实现与策略的结论,不证明与 Microsoft Word 视觉等价、完整转换、法律审阅或 Cove 当前具备此功能。

用户选择的 DOCX 含一段尚未接受的删除内容

用户选择一份合同草稿供本地分析。文档包里同时有跟踪的替换措辞和已删除段落,但 WordprocessingML 部件仍保留旧文字。Importer 还没有定义向模型发送提议视图、接受视图还是复核视图。

决策

在模型处理前暂停,展示受支持的修订视图选择,并保留 part 来源而不修改用户选择的文档。

预期结果

任务只使用用户选定的视图;接受视图 prompt 不含被排除的删除文字,源文件保持原样。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • DOCX-REVISION-SEMANTICS-2026-10:WordprocessingML 修订标记与段落/结构变化需要明确提取视图。
  • ANDROID-PRIVACY-01:应用负责内容访问、存储和用户控制。
  • Microsoft Open XML 文档用于说明格式词汇和示例,不证明 Android parser 能力或 Cove 当前功能。

任务质量需要有版本记录的语料和验收规则;流畅的单条样例不等于准确度结果。

实施流程

  1. 明确支持的文档视图. 定义提取代表原始近似、提议、接受还是复核视图,并列出所含的修订类型和 package parts。不支持的语义必须明确提示。
  2. 使用修订感知 parser 契约. 分别处理 `w:ins`、`w:del`、移动标记、删除文字、段落标记变化和结构属性变化。不能扁平化所有后代文本,也不能从修订元数据推断用户已接受。
  3. 创建独立只读派生内容. 保留源字节;生成带标记和 part/location 来源的提取段落。文本导入时绝不向用户原始包应用接受或拒绝修改。
  4. 模型输入前允许用户复核. 展示选定视图以及被排除或不支持的部分。不同版本会影响含义时请用户选择;仅接受视图任务不可发送隐藏的删除文字。
  5. 测试实际 parser 行为. 使用合成修订夹具、删除文字 sentinel、源文件不变断言、取消、损坏 part 和设备构建。结论限定于被测 parser 与支持的包部件。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 推理前明确任务所用修订视图和支持的 package parts;不支持结构必须可见,不能静默扁平化。
  • 插入、删除、移动、段落标记和相关属性变化按所选视图处理,而不是只过滤两个标签。
  • 成功、取消和失败后用户选中的 DOCX 均保持字节不变;派生文本保留可复核来源。
  • Microsoft Open XML 示例不被描述为 Android API 或 Cove 支持 DOCX 导入的证据。

决策对照表

维度选择或证据解读方式
扁平文本提取连接文本后代,不保留修订状态。可能混合已删除和插入的备选内容,也丢失段落或 part 来源。
接受视图提取按文档化修订策略生成单独派生内容。可将删除内容排除于模型输入,但仍须处理结构修订并报告不支持的 part。
复核视图提取保留变化类型和来源位置供用户复核。呈现不同版本,不宣称应用已自动接受或拒绝。
改写原件以接受修订不要用作导入捷径。会改变用户原始文档,可能破坏复核状态和来源记录。

需要避免的失败模式

  • 只过滤两个行内标签不能证明覆盖完整修订视图。
  • 不要自动接受/拒绝用户修订,也不要把处理后的包写回原文件。
  • 不要把 .NET Open XML SDK 示例当作 Android API 或当前 Cove 导入能力。
  • 不要把不支持的 part、field、脚注或表格结构静默拼成普通正文。

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

忽略所有 `w:del` 就能称为当前文本吗?

不能。段落标记修订、移动、属性变化和其他包部件也会影响视图。必须定义支持语义;parser 无法解释的结构应拒绝或明确标记。

Microsoft Open XML SDK 示例能证明 Android 支持吗?

不能。它说明 WordprocessingML 语义和 .NET 实现。Android 是否支持取决于所选库/provider,以及经过测试的修订视图行为。

导入器应在源包里接受所有修订吗?

不能自动这样做。接受或拒绝修订属于文档决策。保持源文件不变,并在将文本输入模型前询问用户需要的派生视图。

纯文本对比能证明 importer 正确处理修订吗?

不能。扁平 dump 可能已丢失修订标记。应使用合成包和独立预期视图验证真实 parser 输出,并用删除文字 sentinel 检查 prompt 边界。