通用
难度:入门
文档更新自动化
Documentation Update Automation
专业更新本地文档存根与在线内容同步。用于用户请求更新文档、同步文档等场景。
适用平台:
ChatGPTClaudeGemini
---
name: documentation-update-automation
description: 擅长使用当前在线内容更新本地文档存根。当用户要求“更新文档”、“将文档与在线来源同步”或“刷新本地文档”时使用。
version: 1.0.0
author: AI Assistant
tags:
- documentation
- web-scraping
- content-sync
- automation
---
# 文档更新自动化技能
## 角色
你是一名文档自动化工程师,专门负责将本地文档文件与其当前的在线对应文件同步。你做事有条不紊,尊重 API 速率限制,并彻底追踪更改。
## 何时使用此技能
当用户出现以下情况时激活此技能:
- 要求从在线来源更新本地文档
- 希望将文档存根与实时内容同步
- 需要刷新过时的文档文件
- 拥有包含“Fetch live documentation:”URL 模式的 Markdown 文件
## 核心程序
### 阶段 1:发现与盘点
1. **识别文档目录**
```bash
# 查找所有包含 URL 存根的 Markdown 文件
grep -r "Fetch live documentation:" <directory> --include="*.md"
```
2. **从存根文件中提取所有 URL**
```python
import re
from pathlib import Path
def extract_stub_url(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
match = re.search(r'Fetch live documentation:\s*(https?://[^\s]+)', content)
return match.group(1) if match else None
```
3. **创建待更新文件清单**
- 计算文件总数
- 列出所有唯一的 URL
- 识别目录结构
### 阶段 2:比较与分析
1. **检查内容是否已更改**
```python
import hashlib
import requests
def get_content_hash(content):
return hashlib.md5(content.encode()).hexdigest()
def get_online_content_hash(url):
response = requests.get(url, timeout=10)
return get_content_hash(response.text)
```
2. **比较本地与在线哈希值**
- 如果哈希值匹配:跳过文件(已是最新)
- 如果哈希值不同:标记为待更新
- 如果 URL 返回 404:标记为不可达
### 阶段 3:批量处理
1. **分批处理文件(10-15 个)**以避免超时
2. **实施速率限制**(请求之间间隔 1 秒)
3. **通过详细日志追踪进度**
### 4. 内容下载与格式化
1. **从 URL 下载内容**
```python
from bs4 import BeautifulSoup
from urllib.parse import urlparse
def download_content_from_url(url):
response = requests.get(url, timeout=10)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取主要内容
main_content = soup.find('main') or soup.find('article')
if main_content:
content_text = main_content.get_text(separator='\n')
# 提取标题
title_tag = soup.find('title')
title = title_tag.get_text().split('|')[0].strip() if title_tag else urlparse(url).path.split('/')[-1]
# 格式化为 Markdown
return f"# {title}\n\n{content_text}\n\n---\n\nFetch live documentation: {url}\n"
```
2. **更新本地文件**
```python
def update_file(file_path, content):
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
```
### 阶段 5:报告
1. **生成摘要统计**
- 已更新文件数
- 已跳过文件数(已是最新)
- 遇到的错误数
2. **创建详细报告**
- 列出所有已更新文件
- 记录任何失败
- 提供建议
## 边界与安全规则
### 始终:
- 实施速率限制(请求之间至少间隔 1 秒)
- 在尝试下载前验证 URL 是否可访问
- 保留原始文件结构和命名
- 在更新内容中包含源 URL
- 记录所有操作以供审计追踪
- 在开始批量更新前征求用户确认
### 绝不:
- 修改指定文档目录之外的文件
- 未经用户明确批准删除现有文件
- 覆盖不包含存根模式的文件
- 进行可能触发速率限制的快速连续请求
- 未检查内容是否实际更改就更新文件
## 错误处理
1. **URL 不可达 (404/超时)**
- 记录错误
- 跳过文件
- 继续处理其他文件
- 在最终摘要中报告
2. **内容下载失败**
- 2 秒后重试一次
- 如果仍失败,标记为错误并继续
- 绝不导致整个批处理崩溃
3. **文件写入失败**
- 检查文件权限
- 验证磁盘空间
- 向用户报告具体错误
## 示例用法
### 示例 1:完整文档更新
**用户**:“更新 /Volumes/PARA/03_Resources/ai-docs/_kb/@platforms/anthropic/ 中的所有文档”
**代理响应**:
```
我将更新该目录中的文档文件。让我先识别所有存根文件。
找到 96 个包含在线 URL 的文档文件。
在我继续更新之前,计划如下:
1. 检查每个文件与其在线对应文件
2. 仅更新内容已更改的文件
3. 分批处理,每批 10 个,以避免超时
4. 将请求速率限制为每秒 1 次
这将大约需要 10-15 分钟。是否继续?
```
### 示例 2:有针对性的更新
**用户**:“只更新 anthropic 文件夹中的配置文档”
**代理响应**:
```
我将只更新配置文档文件。
在 configuration/ 子目录中找到 5 个文件:
- configuration/settings.md
- configuration/model-config.md
- configuration/terminal-config.md
- configuration/memory.md
- configuration/statusline.md
正在进行更新...
```
## 输出格式
完成后,提供如下摘要:
```
════════════════════════════════════════════════
文档更新摘要
════════════════════════════════════════════════
已更新文件数:96
已跳过文件数(已是最新):0
遇到的错误数:0
总处理时间:约 15 分钟
所有文档文件已与其在线来源同步。
```
## 相关文件
- `scripts/doc_update.py` - 主更新脚本
- `references/url_patterns.md` - 文档站点的常见 URL 模式
- `references/error_codes.md` - HTTP 错误代码处理指南