<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Agent Skill on KnightLi的博客</title>
        <link>https://www.knightli.com/tags/agent-skill/</link>
        <description>Recent content in Agent Skill on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Mon, 06 Apr 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://www.knightli.com/tags/agent-skill/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>使用AI维护Hugo多语言博客的Agent Skill</title>
        <link>https://www.knightli.com/2026/04/06/agent-skill-sync-post-translations-guide/</link>
        <pubDate>Mon, 06 Apr 2026 10:00:00 +0800</pubDate>
        
        <guid>https://www.knightli.com/2026/04/06/agent-skill-sync-post-translations-guide/</guid>
        <description>&lt;p&gt;如果你在维护 Hugo 多语言博客，经常会遇到一个高频痛点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中文写完后，需要同步生成英文和繁体版本&lt;/li&gt;
&lt;li&gt;三个语言文件要保持结构一致&lt;/li&gt;
&lt;li&gt;front matter 既要翻译又要遵守 Hugo 格式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;sync-post-translations&lt;/code&gt; 就是为这个场景设计的 Agent Skill。&lt;/p&gt;
&lt;h2 id=&#34;这个技能解决什么问题&#34;&gt;这个技能解决什么问题
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sync-post-translations&lt;/code&gt; 的定位很清晰：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;以 &lt;code&gt;index.zh-cn.md&lt;/code&gt; 为源文件&lt;/li&gt;
&lt;li&gt;在同目录生成或更新 &lt;code&gt;index.en.md&lt;/code&gt;、&lt;code&gt;index.zh-tw.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;保持 Markdown 结构一致&lt;/li&gt;
&lt;li&gt;对 front matter 执行明确规则（尤其是 &lt;code&gt;date&lt;/code&gt;、&lt;code&gt;slug&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;适用触发词示例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“同步翻译英文繁体”&lt;/li&gt;
&lt;li&gt;“把这篇文章同步成英文和繁体”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;技能目录结构&#34;&gt;技能目录结构
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.\sync-post-translations\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─ SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└─ agents\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   └─ openai.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;核心代码一skillmd&#34;&gt;核心代码一：SKILL.md
&lt;/h2&gt;&lt;p&gt;下面是该技能的核心规则文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name: sync-post-translations
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description: 将 Hugo 文章从简体中文源文件（&lt;span class=&#34;sb&#34;&gt;`index.zh-cn.md`&lt;/span&gt;）同步翻译为英文（&lt;span class=&#34;sb&#34;&gt;`index.en.md`&lt;/span&gt;）和繁体中文（&lt;span class=&#34;sb&#34;&gt;`index.zh-tw.md`&lt;/span&gt;）。当用户提出“en 繁体”“同步翻译英文繁体”或要求同时生成/更新两种语言版本且需保持 front matter 与 Markdown 结构一致时使用。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# 同步文章翻译
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;使用此技能为同一篇文章生成或更新多语言版本。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 工作流程
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 在目标文章目录中定位源文件 &lt;span class=&#34;sb&#34;&gt;`index.zh-cn.md`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 读取完整 front matter 与正文内容。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 在同目录创建或更新 &lt;span class=&#34;sb&#34;&gt;`index.en.md`&lt;/span&gt; 与 &lt;span class=&#34;sb&#34;&gt;`index.zh-tw.md`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;4.&lt;/span&gt; 确保三语结构对齐后执行 Hugo 构建检查。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 翻译规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 严格保留 &lt;span class=&#34;sb&#34;&gt;`slug`&lt;/span&gt; 原值。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`date`&lt;/span&gt; 统一规范为 Hugo 常用带时间格式（RFC3339），示例：&lt;span class=&#34;sb&#34;&gt;`2026-04-05T10:00:00+08:00`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 自然翻译以下 front matter 字段：&lt;span class=&#34;sb&#34;&gt;`title`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`description`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`tags`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`categories`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;4.&lt;/span&gt; 保持 Markdown 结构不变：标题层级、列表形态、代码块、链接与命令行示例。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;5.&lt;/span&gt; 技术标识符保持原样：文件名、CLI 参数、模型名、设备名、URL、包名等。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;6.&lt;/span&gt; 若 YAML 的 &lt;span class=&#34;sb&#34;&gt;`title`&lt;/span&gt; 含有 &lt;span class=&#34;sb&#34;&gt;`:`&lt;/span&gt;，必须加引号，避免解析报错。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;7.&lt;/span&gt; 在不改变语义前提下，使用目标语言自然标点与表达习惯（&lt;span class=&#34;sb&#34;&gt;`en`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`zh-tw`&lt;/span&gt;）。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 输出约定
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 仅在源文章同目录写入目标文件。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 汇报变更的文件路径。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 条件允许时执行 &lt;span class=&#34;sb&#34;&gt;`hugo --source . --destination public`&lt;/span&gt;，并反馈通过/失败；失败时给出关键报错行。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 质量标准
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 全文术语前后一致。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 避免机器直译感，优先可发布文风。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 章节内容完整，不省略示例、注意点与总结。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;核心代码二agentsopenaiyaml&#34;&gt;核心代码二：agents/openai.yaml
&lt;/h2&gt;&lt;p&gt;这个文件定义了技能在 Agent 侧的展示和默认提示词：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;interface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;display_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;同步文章翻译&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;short_description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;生成或更新 EN + ZH-TW 翻译稿&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;default_prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;使用该技能在同一 Hugo 文章目录中，从 `index.zh-cn.md` 生成或同步 `index.en.md` 与 `index.zh-tw.md`，保留 `date` 与 `slug`，保持 Markdown 结构一致，并执行 Hugo 构建校验。&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;实战调用示例&#34;&gt;实战调用示例
&lt;/h2&gt;&lt;h3 id=&#34;1-面向人的自然语言触发&#34;&gt;1) 面向人的自然语言触发
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;请把 content/post/2026/04/06/index.zh-cn.md 同步翻译成英文和繁体，
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;要求 date 用 RFC3339，slug 不变，最后跑 hugo 校验。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-你应当期待的输出结果&#34;&gt;2) 你应当期待的输出结果
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;已更新：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- content/post/2026/04/06/index.en.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- content/post/2026/04/06/index.zh-tw.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;构建校验：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- hugo --source . --destination public
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 结果：PASS
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;为什么这些规则很关键&#34;&gt;为什么这些规则很关键
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;slug&lt;/code&gt; 保持不变，能稳定 URL 与历史外链。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;date&lt;/code&gt; 统一 RFC3339（带时区）可避免 Hugo/主题在时间解析上的歧义。&lt;/li&gt;
&lt;li&gt;Markdown 结构不变，能避免翻译后目录、代码块、短代码渲染错位。&lt;/li&gt;
&lt;li&gt;技术标识符不翻译，可显著降低“命令不可用/文件名不匹配”问题。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;常见坑位与规避&#34;&gt;常见坑位与规避
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt; 里有 &lt;code&gt;:&lt;/code&gt; 却没加引号，YAML 会解析失败。&lt;/li&gt;
&lt;li&gt;把 &lt;code&gt;--flag&lt;/code&gt;、URL、包名翻译了，示例命令会直接失效。&lt;/li&gt;
&lt;li&gt;三语标题层级不一致（如中文 &lt;code&gt;##&lt;/code&gt; 变成英文 &lt;code&gt;###&lt;/code&gt;），目录锚点会错位。&lt;/li&gt;
&lt;li&gt;只翻译正文不处理 front matter，页面列表与 SEO 信息会异常。&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>分析 Anthropic 的 Agent Skill docx 功能、代码组成、使用方法与注意事项</title>
        <link>https://www.knightli.com/2026/04/04/analyze-docx-agent-skill/</link>
        <pubDate>Sat, 04 Apr 2026 11:00:00 +0800</pubDate>
        
        <guid>https://www.knightli.com/2026/04/04/analyze-docx-agent-skill/</guid>
        <description>&lt;p&gt;Anthropic 的 &lt;code&gt;skills/docx&lt;/code&gt; 本质上是一套“让 AI 更稳地处理 Word 文档”的工作规范与脚本工具集。&lt;br&gt;
它不是单纯告诉模型“去写一个 &lt;code&gt;.docx&lt;/code&gt;”，而是把 Word 文档处理拆成几条明确路径：新建文档、读取内容、编辑已有文档、处理修订、添加评论、转换格式、校验 OOXML 结构。&lt;/p&gt;
&lt;p&gt;如果只看一句话，可以把它理解为：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;让 agent 不再把 &lt;code&gt;.docx&lt;/code&gt; 当黑盒，而是把它当成 ZIP + XML + Office 兼容性问题来处理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;这个-skill-解决什么问题&#34;&gt;这个 skill 解决什么问题
&lt;/h2&gt;&lt;p&gt;普通文本生成模型在处理 Word 文档时，常见问题有几类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;只会输出文本，不会真正生成结构正确的 &lt;code&gt;.docx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改现有文档时容易破坏 OOXML 结构&lt;/li&gt;
&lt;li&gt;遇到批注、修订、评论线程时，不知道该改哪几个 XML&lt;/li&gt;
&lt;li&gt;能生成文档，但在 Word、LibreOffice、Google Docs 之间兼容性不稳定&lt;/li&gt;
&lt;li&gt;不清楚什么时候该用 &lt;code&gt;pandoc&lt;/code&gt;，什么时候该直接解包改 XML&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;docx&lt;/code&gt; skill 的价值就在这里。它把“该怎么做”提前约束好了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;读内容时，优先用 &lt;code&gt;pandoc&lt;/code&gt; 或解包&lt;/li&gt;
&lt;li&gt;新建 &lt;code&gt;.docx&lt;/code&gt; 时，优先用 &lt;code&gt;docx-js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;编辑现有 &lt;code&gt;.docx&lt;/code&gt; 时，优先走“解包 -&amp;gt; 修改 XML -&amp;gt; 重新打包 -&amp;gt; 校验”&lt;/li&gt;
&lt;li&gt;处理接受修订、评论、schema 校验这些细节时，用配套脚本而不是让模型硬编&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这套思路非常实用，因为 Word 文档问题往往不是“文字写得对不对”，而是“文件结构是否还能被 Office 正常接受”。&lt;/p&gt;
&lt;h2 id=&#34;目录和代码组成&#34;&gt;目录和代码组成
&lt;/h2&gt;&lt;p&gt;这个 skill 大致可以分成四层。&lt;/p&gt;
&lt;h3 id=&#34;1-说明层skillmd&#34;&gt;1. 说明层：&lt;code&gt;SKILL.md&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;SKILL.md&lt;/code&gt; 是整个 skill 的入口，主要做两件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;定义触发条件&lt;br&gt;
只要用户需求涉及 Word、&lt;code&gt;.docx&lt;/code&gt;、评论、修订、目录、页码、模板、格式化文档等内容，就应该启用这个 skill。&lt;/li&gt;
&lt;li&gt;规定工作路径&lt;br&gt;
它明确写出不同任务该走哪条技术路线，而不是每次临场发挥。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;从内容看，它既是“使用说明”，也是“操作规范”。&lt;br&gt;
尤其有价值的是里面列出的很多 Word 兼容性规则，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docx-js&lt;/code&gt; 默认是 A4，不是 US Letter&lt;/li&gt;
&lt;li&gt;横向页面时宽高参数要按它的内部逻辑传&lt;/li&gt;
&lt;li&gt;列表不能手工插入 Unicode bullet&lt;/li&gt;
&lt;li&gt;表格宽度要同时设置 table 和 cell&lt;/li&gt;
&lt;li&gt;图片插入时 &lt;code&gt;type&lt;/code&gt; 不能省&lt;/li&gt;
&lt;li&gt;生成后要做 &lt;code&gt;validate&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明作者不是只想“能生成”，而是想要“生成后能稳定打开、稳定渲染、稳定兼容”。&lt;/p&gt;
&lt;h2 id=&#34;2-office-包操作层scriptsoffice&#34;&gt;2. Office 包操作层：&lt;code&gt;scripts/office/*&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;这一层负责把 &lt;code&gt;.docx/.pptx/.xlsx&lt;/code&gt; 当成 Office Open XML 包来处理。&lt;/p&gt;
&lt;h3 id=&#34;unpackpy&#34;&gt;&lt;code&gt;unpack.py&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;作用是把 Office 文件解包到目录中，并做几件辅助工作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解压 ZIP 包&lt;/li&gt;
&lt;li&gt;对 XML / &lt;code&gt;.rels&lt;/code&gt; 做 pretty print&lt;/li&gt;
&lt;li&gt;对 &lt;code&gt;.docx&lt;/code&gt; 可选执行 &lt;code&gt;merge_runs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;对 &lt;code&gt;.docx&lt;/code&gt; 可选执行 &lt;code&gt;simplify_redlines&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;把智能引号转成 XML 实体，降低后续处理风险&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它的设计重点不是“简单解压”，而是把文件整理成适合 agent 和人类继续编辑的状态。&lt;/p&gt;
&lt;h3 id=&#34;packpy&#34;&gt;&lt;code&gt;pack.py&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;作用是把修改后的目录重新打包成 &lt;code&gt;.docx/.pptx/.xlsx&lt;/code&gt;。&lt;br&gt;
打包前还会做两件重要的事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可选运行校验与自动修复&lt;/li&gt;
&lt;li&gt;把 XML 重新压缩整理，去掉无意义空白和注释&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果提供 &lt;code&gt;--original&lt;/code&gt;，它会结合 validator 做比对，这一点很关键。&lt;br&gt;
因为很多 Word 修改不是“能压回去就算成功”，而是要确认文档结构和追踪修订语义都还成立。&lt;/p&gt;
&lt;h3 id=&#34;validatepy&#34;&gt;&lt;code&gt;validate.py&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这是整个 skill 的质量闸门。&lt;br&gt;
它支持校验：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XML 是否良构&lt;/li&gt;
&lt;li&gt;namespace 是否正确&lt;/li&gt;
&lt;li&gt;各类 ID 是否唯一&lt;/li&gt;
&lt;li&gt;relationship / content type 是否匹配&lt;/li&gt;
&lt;li&gt;是否符合 XSD schema&lt;/li&gt;
&lt;li&gt;空白保留规则是否正确&lt;/li&gt;
&lt;li&gt;插入、删除、评论标记是否合法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对 &lt;code&gt;.docx&lt;/code&gt; 来说，这一步几乎是核心能力。&lt;br&gt;
很多看起来“只改了一点 XML”的文档，真正问题都出在这里。&lt;/p&gt;
&lt;h3 id=&#34;sofficepy&#34;&gt;&lt;code&gt;soffice.py&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这是一个很有工程味道的小工具。&lt;br&gt;
它不是简单调用 LibreOffice，而是为受限环境准备了兼容处理，自动设置 &lt;code&gt;SAL_USE_VCLPLUGIN=svp&lt;/code&gt;，在必要时还会构造 shim 解决 AF_UNIX socket 受限的问题。&lt;/p&gt;
&lt;p&gt;这说明 skill 的目标环境并不只是“本地桌面手工操作”，而是考虑了 agent、CI、沙箱等自动化环境。&lt;/p&gt;
&lt;h2 id=&#34;3-word-专项能力层评论修订与-redline&#34;&gt;3. Word 专项能力层：评论、修订与 redline
&lt;/h2&gt;&lt;h3 id=&#34;commentpy&#34;&gt;&lt;code&gt;comment.py&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这个脚本负责给 DOCX 添加评论。&lt;br&gt;
它做的事情比“写一段 comment XML”复杂得多，因为 Word 评论不是单文件机制，而是一组部件协同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;word/comments.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commentsExtended.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commentsIds.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commentsExtensible.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;document.xml&lt;/code&gt; 中的 comment range marker&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[Content_Types].xml&lt;/code&gt; 与 &lt;code&gt;document.xml.rels&lt;/code&gt; 中的关系声明&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;脚本里已经把这些依赖关系考虑进去了。&lt;br&gt;
如果是第一次添加评论，它会自动补齐模板文件、relationship 和 content types，这能显著降低手工改 OOXML 时的出错率。&lt;/p&gt;
&lt;h3 id=&#34;accept_changespy&#34;&gt;&lt;code&gt;accept_changes.py&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这个脚本的目标非常明确：接受所有修订。&lt;br&gt;
实现方式不是自己硬改 XML，而是通过 LibreOffice headless + Basic macro 调 &lt;code&gt;.uno:AcceptAllTrackedChanges&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这个选择很稳妥，因为“接受修订”在 Word 语义里并不只是删掉 &lt;code&gt;&amp;lt;w:ins&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;w:del&amp;gt;&lt;/code&gt; 那么简单，直接改 XML 很容易留下边角问题。&lt;br&gt;
借助 Office 引擎自身完成这一步，兼容性通常更好。&lt;/p&gt;
&lt;h3 id=&#34;validatorsredliningpy&#34;&gt;&lt;code&gt;validators/redlining.py&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这是 skill 里我觉得最值得注意的一部分。&lt;br&gt;
它会把“某个作者的修订”从原始文档和修改后文档中分别剥离，再比较正文文本是否一致，用来判断修订是否被正确地包裹在 tracked changes 结构里。&lt;/p&gt;
&lt;p&gt;换句话说，它不只是检查 XML 格式，而是在检查“你是不是按修订语义编辑了文档”。&lt;/p&gt;
&lt;p&gt;这对 agent 特别重要，因为 AI 很容易做出这种错误：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直接改正文，但没有包进 &lt;code&gt;&amp;lt;w:ins&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;w:del&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在别人的插入或删除结构里改坏层级&lt;/li&gt;
&lt;li&gt;让最终文本变了，但 redline 逻辑不成立&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个 validator 就是在挡这种“表面可用、语义错误”的问题。&lt;/p&gt;
&lt;h2 id=&#34;4-schema-与辅助层schemashelperstemplates&#34;&gt;4. Schema 与辅助层：&lt;code&gt;schemas/&lt;/code&gt;、&lt;code&gt;helpers/&lt;/code&gt;、&lt;code&gt;templates/&lt;/code&gt;
&lt;/h2&gt;&lt;h3 id=&#34;schemas&#34;&gt;&lt;code&gt;schemas/&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这里放的是一整套 OOXML / ECMA / Microsoft 扩展相关的 XSD。&lt;br&gt;
这意味着 skill 的校验不是拍脑袋写规则，而是尽量基于正式 schema 约束。&lt;/p&gt;
&lt;h3 id=&#34;helpers&#34;&gt;&lt;code&gt;helpers/&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这里主要是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;merge_runs.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;simplify_redlines.py&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作用是把解包后的 Word XML 做适度清理，让结构更稳定、更容易编辑和比较。&lt;/p&gt;
&lt;h3 id=&#34;templates&#34;&gt;&lt;code&gt;templates/&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;这里存放评论功能依赖的 XML 模板，如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;comments.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commentsExtended.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commentsIds.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commentsExtensible.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;people.xml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这类模板文件很重要，因为很多 Word 部件不是“缺了就自动补”，而是必须按 Office 能接受的格式预置。&lt;/p&gt;
&lt;h2 id=&#34;典型使用方法&#34;&gt;典型使用方法
&lt;/h2&gt;&lt;p&gt;从 &lt;code&gt;SKILL.md&lt;/code&gt; 给出的建议来看，这个 skill 最适合下面几种工作流。&lt;/p&gt;
&lt;h2 id=&#34;场景一读取或分析现有-docx&#34;&gt;场景一：读取或分析现有 DOCX
&lt;/h2&gt;&lt;p&gt;如果目标是提取内容、阅读结构、转成 Markdown，优先用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pandoc --track-changes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;all document.docx -o output.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果要看底层 XML，则用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python scripts/office/unpack.py document.docx unpacked/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;前者适合读内容，后者适合看结构。&lt;/p&gt;
&lt;h2 id=&#34;场景二新建-docx&#34;&gt;场景二：新建 DOCX
&lt;/h2&gt;&lt;p&gt;skill 的建议不是手搓 OOXML，而是用 &lt;code&gt;docx-js&lt;/code&gt; 生成：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g docx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后生成文档后再校验：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python scripts/office/validate.py doc.docx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这条路线适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;报告&lt;/li&gt;
&lt;li&gt;memo&lt;/li&gt;
&lt;li&gt;letter&lt;/li&gt;
&lt;li&gt;有标题、目录、页脚、分页、表格的正式文档&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;场景三编辑已有-docx&#34;&gt;场景三：编辑已有 DOCX
&lt;/h2&gt;&lt;p&gt;这是整个 skill 最核心的工作流：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python scripts/office/unpack.py document.docx unpacked/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 修改 unpacked/ 下的 XML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python scripts/office/pack.py unpacked/ output.docx --original document.docx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里的关键不是“修改 XML”，而是最后那步 &lt;code&gt;--original&lt;/code&gt;。&lt;br&gt;
它让系统能在回包时做 schema 和 redline 层面的验证，而不是盲目打包。&lt;/p&gt;
&lt;h2 id=&#34;场景四接受所有修订&#34;&gt;场景四：接受所有修订
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python scripts/accept_changes.py input.docx output.docx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这一步依赖 LibreOffice。&lt;br&gt;
适合用于把已审阅文档整理成“干净版本”。&lt;/p&gt;
&lt;h2 id=&#34;场景五添加评论&#34;&gt;场景五：添加评论
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python comment.py unpacked/ &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Comment text&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python comment.py unpacked/ &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Reply text&amp;#34;&lt;/span&gt; --parent &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里要特别注意：脚本只是把评论内容和必要的评论部件加进去，实际还需要按注释说明，在 &lt;code&gt;document.xml&lt;/code&gt; 中加上 comment range marker，才能把评论真正挂到对应文本范围上。&lt;/p&gt;
&lt;h2 id=&#34;这个-skill-最值得注意的几个坑&#34;&gt;这个 skill 最值得注意的几个坑
&lt;/h2&gt;&lt;p&gt;如果只是快速浏览 &lt;code&gt;SKILL.md&lt;/code&gt;，很容易低估其中“兼容性规则”的价值。&lt;br&gt;
下面这些点尤其值得记住。&lt;/p&gt;
&lt;h3 id=&#34;1-docx-不是文本文件而是-office-包&#34;&gt;1. &lt;code&gt;.docx&lt;/code&gt; 不是文本文件，而是 Office 包
&lt;/h3&gt;&lt;p&gt;最危险的误区就是把它当成“一个带格式的文本文件”。&lt;br&gt;
实际上你改的可能同时涉及：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正文 XML&lt;/li&gt;
&lt;li&gt;relationships&lt;/li&gt;
&lt;li&gt;content types&lt;/li&gt;
&lt;li&gt;comments / people / ids&lt;/li&gt;
&lt;li&gt;schema 约束&lt;/li&gt;
&lt;li&gt;修订语义&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以这个 skill 才会强调“解包 - 编辑 - 校验 - 回包”。&lt;/p&gt;
&lt;h3 id=&#34;2-docx-js-能生成文档但不保证默认参数符合你的目标&#34;&gt;2. &lt;code&gt;docx-js&lt;/code&gt; 能生成文档，但不保证默认参数符合你的目标
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;SKILL.md&lt;/code&gt; 里强调了很多默认值陷阱，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认纸张是 A4&lt;/li&gt;
&lt;li&gt;横向页面宽高处理有内部逻辑&lt;/li&gt;
&lt;li&gt;列表不能直接塞字符 bullet&lt;/li&gt;
&lt;li&gt;表格宽度要双重声明&lt;/li&gt;
&lt;li&gt;Google Docs 对百分比宽度兼容性差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明生成工具只是起点，不是最终质量保证。&lt;/p&gt;
&lt;h3 id=&#34;3-评论和修订都不是单点修改&#34;&gt;3. 评论和修订都不是单点修改
&lt;/h3&gt;&lt;p&gt;无论是 comment 还是 tracked changes，都不是改一处 XML 就完事。&lt;br&gt;
你需要维护多个部件之间的一致性，这也是 skill 把这些动作脚本化的原因。&lt;/p&gt;
&lt;h3 id=&#34;4-能打开不等于改对了&#34;&gt;4. “能打开”不等于“改对了”
&lt;/h3&gt;&lt;p&gt;一个文档能被 Word 打开，不代表结构就是对的。&lt;br&gt;
很多错误只会在这些场景暴露：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;再次编辑时崩&lt;/li&gt;
&lt;li&gt;审阅模式异常&lt;/li&gt;
&lt;li&gt;批注丢失&lt;/li&gt;
&lt;li&gt;Google Docs 打开后布局错乱&lt;/li&gt;
&lt;li&gt;重新接受修订时报错&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此 &lt;code&gt;validate.py&lt;/code&gt; 和 &lt;code&gt;pack.py --original&lt;/code&gt; 非常重要。&lt;/p&gt;
&lt;h3 id=&#34;5-依赖外部工具时要提前准备环境&#34;&gt;5. 依赖外部工具时要提前准备环境
&lt;/h3&gt;&lt;p&gt;这个 skill 依赖几类外部工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pandoc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LibreOffice / soffice&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docx-js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Python 依赖，如 &lt;code&gt;defusedxml&lt;/code&gt;、&lt;code&gt;lxml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果环境里缺这些工具，agent 即使知道流程，也无法完整执行。&lt;/p&gt;
&lt;h2 id=&#34;这个-skill-适合什么不适合什么&#34;&gt;这个 skill 适合什么，不适合什么
&lt;/h2&gt;&lt;h3 id=&#34;适合&#34;&gt;适合
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;批量生成 Word 报告&lt;/li&gt;
&lt;li&gt;结构化生成正式文档&lt;/li&gt;
&lt;li&gt;自动化修改 &lt;code&gt;.docx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;保留或处理 tracked changes&lt;/li&gt;
&lt;li&gt;自动添加批注&lt;/li&gt;
&lt;li&gt;把 Word 文档纳入脚本或 agent 工作流&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;不太适合&#34;&gt;不太适合
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;单纯导出 PDF 的简单场景&lt;/li&gt;
&lt;li&gt;只需要纯文本内容，不关心 Word 格式&lt;/li&gt;
&lt;li&gt;完全依赖手工可视化编辑的工作方式&lt;/li&gt;
&lt;li&gt;希望零依赖、零环境准备就完成全部 Word 自动化&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结
&lt;/h2&gt;&lt;p&gt;Anthropic 的 &lt;code&gt;skills/docx&lt;/code&gt; 强项不在“会生成 Word”，而在“知道 Word 为什么容易出问题，并提前把问题拆开处理”。&lt;br&gt;
它把文档生成、底层 XML 编辑、修订语义、schema 校验、Office 兼容性这些原本很零散的知识，整理成了一条可执行的工作流。&lt;/p&gt;
&lt;p&gt;如果你只是偶尔导出一份简单文档，它可能显得有点重。&lt;br&gt;
但只要场景涉及现有 &lt;code&gt;.docx&lt;/code&gt; 修改、评论、修订、自动化批处理或兼容性要求，这套 skill 就很有价值，因为它补上的恰恰是 AI 最容易忽略、而 Office 文档最容易翻车的那部分细节。&lt;/p&gt;
&lt;p&gt;简单总结就是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;SKILL.md&lt;/code&gt; 负责告诉 agent 该走哪条路&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/office/*&lt;/code&gt; 负责解包、回包、校验和 Office 兼容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;comment.py&lt;/code&gt; 与 &lt;code&gt;accept_changes.py&lt;/code&gt; 负责 Word 专项能力&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schemas/&lt;/code&gt; 与 validators 负责把“看起来能用”提升到“结构上靠谱”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;代码地址：&lt;a class=&#34;link&#34; href=&#34;https://github.com/anthropics/skills/tree/main/skills/docx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/anthropics/skills/tree/main/skills/docx&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
