1
0
Files
Skill/openspec/changes/archive/2026-02-12-develop-lyxy-reader-docx-skill/design.md
2026-02-12 17:57:05 +08:00

107 lines
4.8 KiB
Markdown
Raw 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.
## Context
当前项目是一个专门用于开发大模型工具 skill 的项目。`skills/lyxy-reader-docx` 目录已经存在,其中包含:
- `scripts/docx_parser.py` - 完整的 DOCX 解析脚本支持多策略解析MarkItDown、python-docx、XML 原生)
- `docx_parser.md` - 脚本使用文档
需要将这些现有资源封装为一个标准的 skill让大模型能够识别并优先使用该工具处理 .docx 文件。
## Goals / Non-Goals
**Goals:**
- 创建 `skills/lyxy-reader-docx/skill.md` skill 定义文件,符合项目规范
- 封装 docx_parser.py 的核心功能为 skill 的能力描述
- 确保大模型在遇到 .docx 文件时能够识别并优先使用该 skill
- 执行时优先委托给 lyxy-runner-python skill利用其依赖管理和环境隔离能力
- 支持多种解析模式:全文提取、标题提取、章节内容提取、关键词搜索
**Non-Goals:**
- 修改现有的 docx_parser.py 脚本逻辑
- 添加图片或格式提取功能
- 实现 docx 文件的编辑或修改功能
- 支持 .doc 或其他文档格式
## Decisions
### 1. Skill 定义结构
**决策**: 采用标准的 skill.md 格式,包含 description、capabilities 等核心字段
**理由**: 遵循项目现有 skill 的统一规范,便于大模型理解和调用。查看 `skills/` 目录下的其他 skill 示例(如 `lyxy-runner-python``lyxy-runner-js`)可知项目有一致的定义格式。
### 2. 依赖声明
**决策**: 在 skill.md 的 Compatibility 字段中声明 Python 运行时依赖
**理由**: docx_parser.py 需要 Python 3.6+ 环境,并且需要至少安装 `markitdown``python-docx` 之一。明确这些依赖可以帮助大模型判断环境是否就绪。
### 3. 能力映射
**决策**: 将 docx_parser.py 的所有功能映射为 skill 的 capabilities
**理由**: 脚本提供了丰富的功能(全文、字数、行数、标题、章节、搜索),全部暴露给大模型可以提供更灵活的使用方式。能力包括:
- 全文转换为 Markdown
- 获取文档元信息(字数、行数)
- 标题列表提取
- 指定章节内容提取
- 正则表达式搜索
### 4. 触发器设计
**决策**: 设置明确的触发器Trigger phrases包括中文和英文
**理由**: 用户可能使用中文或英文请求解析 docx 文档。触发器包括:
- "读取 docx", "解析 docx", "打开 word 文档"(中文)
- "read docx", "parse docx", "extract from word document"(英文)
- 文件扩展名 `.docx` 出现时
### 5. 执行委托策略
**决策**: lyxy-reader-docx skill 执行时优先委托给 lyxy-runner-python skill
**理由**: lyxy-runner-python skill 提供了统一的 Python 脚本执行环境,具有以下优势:
- 使用 uv 管理依赖,自动安装 markitdown 或 python-docx
- 环境隔离,不污染系统 Python
- 跨平台兼容
**执行策略**:
此 skill 的执行决策由大模型在调用时判断,不在 skill 定义或脚本中实现检查逻辑。
当大模型决定执行 docx_reader skill 时:
- 如果环境中存在 lyxy-runner-python skill优先使用 lyxy-runner-python 执行 docx_parser.py
- 如果环境中不存在 lyxy-runner-python skill直接使用 Python 执行 docx_parser.py
**好处**:
- 最大化复用现有 skill
- 自动处理 Python 依赖管理(通过 lyxy-runner-python
- 提供更好的错误处理和用户体验
## Risks / Trade-offs
### 风险 1: lyxy-runner-python skill 不可用
**风险**: 目标环境可能没有安装 lyxy-runner-python skill 或其依赖uv 工具)
**缓解措施**:
- 大模型在执行时判断 lyxy-runner-python skill 是否存在
- 如果 lyxy-runner-python 不可用,自动降级为直接使用 Python 执行脚本
- 在 skill.md 中说明降级策略和直接执行的条件
### 风险 2: 依赖库未安装(降级场景)
**风险**: 当 lyxy-runner-python 不可用时,直接执行脚本可能遇到 `markitdown``python-docx` 未安装的情况
**缓解措施**:
- 在 skill.md 的 Compatibility 字段中明确列出可选依赖
- 在降级场景中脚本本身已实现多策略降级MarkItDown → python-docx → XML 原生)
- 提示用户安装 lyxy-runner-python 获得更好的体验
### 风险 2: 大文件处理性能
**风险**: 大型 .docx 文件解析可能耗时较长
**缓解措施**:
- 在能力描述中提示可以使用章节提取或关键词搜索来限制处理范围
- docx_parser.py 已实现流式处理,内存占用相对较低
### 权衡: 纯文本 vs 格式保留
**权衡**: 选择只提取纯文本,不保留图片和复杂格式
**理由**: 用户明确要求"只能将docx文档转换为文字",且大模型主要关注文本内容。虽然脚本支持 Markdown 格式转换(表格、粗体、斜体等),但图片会被自动移除,符合需求。
## Open Questions
无重大未决问题。设计清晰明确,可以直接进入实现阶段。