1
0
Files
lanyuanxiaoyao 6b4fcf2647 创建 lyxy-reader-html skill
- 新增 skill: lyxy-reader-html,用于解析 HTML 文件和 URL 网页内容
- 支持 URL 下载(pyppeteer → selenium → httpx → urllib 优先级回退)
- 支持 HTML 解析(trafilatura → domscribe → MarkItDown → html2text 优先级回退)
- 支持查询功能:全文提取、字数统计、行数统计、标题提取、章节提取、正则搜索
- 新增 spec: html-document-parsing
- 归档 change: create-lyxy-reader-html-skill
2026-03-08 02:02:03 +08:00

138 lines
5.9 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.
## Requirements
### Requirement: 优先使用 lyxy-reader-html 解析 HTML 内容
大模型在遇到 URL、.html 或 .htm 文件时SHALL 优先激活并使用 lyxy-reader-html skill 来读取内容。
#### Scenario: 用户请求读取 URL
- **WHEN** 用户提供以 http:// 或 https:// 开头的 URL
- **THEN** 大模型 SHALL 激活 lyxy-reader-html skill
- **AND** 使用 skill 目录下的 `scripts/parser.py` 执行解析
#### Scenario: 用户请求读取 HTML 文件
- **WHEN** 用户提供的文件路径以 .html 或 .htm 结尾
- **THEN** 大模型 SHALL 激活 lyxy-reader-html skill
- **AND** 使用 skill 目录下的 `scripts/parser.py` 执行解析
### Requirement: 必须通过 lyxy-runner-python 执行脚本
当环境中存在 lyxy-runner-python skill 时,大模型 SHALL 必须使用该 skill 来运行 parser.py 脚本。
#### Scenario: lyxy-runner-python 可用
- **WHEN** 大模型环境中存在 lyxy-runner-python skill
- **THEN** 大模型 SHALL 通过 lyxy-runner-python skill 执行 parser.py
- **AND** 利用 lyxy-runner-python 的自动依赖管理功能uv安装所需的 Python 包
#### Scenario: lyxy-runner-python 不可用
- **WHEN** 大模型环境中不存在 lyxy-runner-python skill
- **THEN** 大模型 SHALL 降级到直接使用 Python 执行 parser.py
- **AND** 提示用户当前使用直接执行模式
- **AND** 禁止自动执行 pip install 安装依赖
### Requirement: 引导阅读 README 获取详细用法
大模型在需要了解 parser.py 的详细使用方式时SHALL 阅读 `scripts/README.md` 文件。
#### Scenario: 首次使用 skill 执行解析
- **WHEN** 大模型首次使用 lyxy-reader-html skill 或不确定具体参数用法
- **THEN** 大模型 SHALL 阅读 `scripts/README.md` 获取命令行参数、依赖安装和使用示例等详细信息
#### Scenario: 遇到特殊参数需求
- **WHEN** 用户请求使用特殊功能(如章节提取、正则搜索等)
- **THEN** 大模型 SHALL 参考 `scripts/README.md` 中的对应参数说明
### Requirement: 支持 URL 和 HTML 文件两种输入源
系统 SHALL 支持从 URL 下载 HTML 内容或直接读取本地 HTML 文件两种输入方式。
#### Scenario: 输入为 URL
- **WHEN** 输入以 http:// 或 https:// 开头
- **THEN** 系统 SHALL 识别为 URL 模式
- **AND** 尝试下载 URL 对应的 HTML 内容
#### Scenario: 输入为本地 HTML 文件
- **WHEN** 输入是存在的本地文件且扩展名为 .html 或 .htm
- **THEN** 系统 SHALL 识别为 HTML 文件模式
- **AND** 直接读取文件内容进行解析
#### Scenario: 输入无法识别
- **WHEN** 输入既不是 URL 也不是有效的 HTML 文件
- **THEN** 系统 SHALL 输出错误信息
- **AND** 以退出码 1 退出
### Requirement: URL 下载器按优先级降级
系统 SHALL 按 pyppeteer → selenium → httpx → urllib 的优先级尝试下载 URL 内容。
#### Scenario: 下载器按优先级降级
- **WHEN** 优先级最高的下载器不可用或下载失败
- **THEN** 系统自动尝试下一优先级的下载器
- **AND** 记录每个下载器的失败原因
#### Scenario: 所有下载器失败
- **WHEN** 所有下载策略均失败
- **THEN** 系统返回详细的失败信息
- **AND** 列出每种下载策略的失败原因
- **AND** 以退出码 1 退出
### Requirement: HTML 解析器按优先级降级
系统 SHALL 按 trafilatura → domscribe → MarkItDown → html2text 的优先级尝试解析 HTML 内容。
#### Scenario: 解析器按优先级降级
- **WHEN** 优先级最高的解析器不可用或解析失败
- **THEN** 系统自动尝试下一优先级的解析器
- **AND** 记录每个解析器的失败原因
#### Scenario: 所有解析器失败
- **WHEN** 所有解析策略均失败
- **THEN** 系统返回详细的失败信息
- **AND** 列出每种解析策略的失败原因
- **AND** 以退出码 1 退出
### Requirement: HTML 内容预处理清理
系统 SHALL 在解析前对 HTML 内容进行预处理清理,移除噪声元素。
#### Scenario: 清理 script 和 style 标签
- **WHEN** HTML 内容包含 <script>、<style>、<link>、<svg> 标签
- **THEN** 系统 SHALL 移除这些标签及其内容
#### Scenario: 清理 URL 属性
- **WHEN** HTML 标签包含 href、src、srcset、action、data-*src 等 URL 属性
- **THEN** 系统 SHALL 移除这些属性
#### Scenario: 清理 style 属性
- **WHEN** HTML 标签包含 style 属性
- **THEN** 系统 SHALL 移除 style 属性
### Requirement: 支持统一的查询功能
系统 SHALL 提供统一的查询接口,包括全文提取、元数据查询、标题提取、章节提取和正则搜索。
#### Scenario: 获取文档字数
- **WHEN** 用户请求获取文档的字数
- **THEN** 系统使用 `-c` 参数返回文档的总字符数
#### Scenario: 获取文档行数
- **WHEN** 用户请求获取文档的行数
- **THEN** 系统使用 `-l` 参数返回文档的总行数
#### Scenario: 提取所有标题
- **WHEN** 用户请求提取文档的标题结构
- **THEN** 系统使用 `-t` 参数返回所有 1-6 级标题
#### Scenario: 提取指定章节内容
- **WHEN** 用户请求提取特定标题名称的章节内容
- **THEN** 系统使用 `-tc` 参数返回该章节的完整内容
- **AND** 包含完整的上级标题链和所有下级内容
#### Scenario: 正则表达式搜索
- **WHEN** 用户请求在文档中搜索关键词或模式
- **THEN** 系统使用 `-s` 参数返回所有匹配结果及上下文
- **AND** 默认包含前后各 2 行非空行上下文
- **AND** 支持 `-n` 参数自定义上下文行数
### Requirement: Markdown 后处理
系统 SHALL 对解析后的 Markdown 内容进行后处理,提升可读性。
#### Scenario: 移除图片标记
- **WHEN** 解析结果包含 Markdown 图片语法 `![alt](url)`
- **THEN** 系统 SHALL 移除这些图片标记
#### Scenario: 规范化空行
- **WHEN** 解析结果包含连续 3 个或更多空行
- **THEN** 系统 SHALL 将其合并为单个空行