关于 ai-tech-fulltext-fetch
从 ai-tech-rss-fetch 使用的 SQLite 数据库读取 RSS 条目,抓取并保存文章正文。适合在元数据同步后建立可增量运行、支持重试的全文获取流程。
主要功能
- 01从现有 RSS 条目抓取正文
- 02优先使用规范 URL
- 03提取失败时回退 HTML 解析
- 04按条目唯一保存提取结果
- 05支持增量同步和失败重试
适用场景
- 01为已有 RSS 条目补充全文
- 02按需获取单篇文章正文
- 03检查正文提取状态
- 04为后续分块、索引或摘要准备文本
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tiangong-ai/ agent-skills --skill ai-tech-fulltext-fetch安装后在 Claude Code 中输入/ai-tech-fulltext-fetch确认已加载。
详细介绍
AI 技术全文抓取
核心目标
- 复用由
ai-tech-rss-fetch填充的同一个 SQLite 数据库。 - 从每个 RSS 条目 URL 抓取文章正文。
- 在配套表(
entry_content)中持久化提取状态和文本。 - 支持增量运行和安全重试,避免创建重复的全文记录。
触发条件
- 收到为
ai_rss.db中已有条目抓取文章正文/全文的请求。 - 收到在 RSS 元数据同步后构建第二阶段流水线的请求。
- 需要针对现有
entries行建立稳定、可恢复的队列。 - 需要在分块、索引或摘要之前,按 URL 持久化全文。
工作流
- 先确保元数据表存在。
- 使用此技能前,先运行
ai-tech-rss-fetch并在 SQLite 中填充entries。 - 此技能要求
entries表已存在。 - 在多 Agent 运行时,将数据库路径固定为
ai-tech-rss-fetch使用的同一个绝对路径:
export AI_RSS_DB_PATH="/absolute/path/to/workspace-rss-bot/ai_rss.db"
- 初始化全文表。
python3 scripts/fulltext_fetch.py init-db --db "$AI_RSS_DB_PATH"
- 运行增量全文同步。
- 默认行为是抓取缺少全文或当前状态为失败的行。
python3 scripts/fulltext_fetch.py sync \
--db "$AI_RSS_DB_PATH" \
--limit 50 \
--timeout 20 \
--min-chars 300
- 按需抓取单个条目。
python3 scripts/fulltext_fetch.py fetch-entry \
--db "$AI_RSS_DB_PATH" \
--entry-id 1234
- 检查提取内容的状态。
python3 scripts/fulltext_fetch.py list-content \
--db "$AI_RSS_DB_PATH" \
--status ready \
--limit 100
数据约定
- 从现有
entries表读取:id、canonical_url、url、title。
- 写入
entry_content表:entry_id(唯一,每个条目对应一行)source_url、final_url、http_statusextractor(trafilatura、html-parser或none)content_text、content_hash、content_lengthstatus(ready或failed)retry_count、last_error、时间戳。
提取与更新规则
- URL 来源优先级:优先使用
canonical_url,否则回退到url。 - 如果依赖可用,则尝试使用
trafilatura提取;否则回退到内置 HTML 解析器。 - 按
entry_id执行 Upsert:- 成功:写入/更新全文,并将
retry_count重置为0。 - 失败且已有
ready内容:保留旧文本,保持状态为ready,记录last_error。 - 失败且没有可用的
ready内容:将状态设为failed,递增retry_count,并设置next_retry_at。
- 成功:写入/更新全文,并将
- 失败重试次数受
--max-retries限制(默认值为3),重试间隔由--retry-backoff-minutes控制。 --force允许重新抓取已处于ready状态的行。--refetch-days N允许刷新超过N天的行。
可配置参数
--dbAI_RSS_DB_PATH(建议在多 Agent 运行时使用绝对路径)--limit--force--only-failed--refetch-days--oldest-first--timeout--max-bytes--min-chars--max-retries--retry-backoff-minutes--user-agent--disable-trafilatura--fail-on-errors
错误处理
- 缺少
entries表:返回可采取行动的错误信息并停止。 - 网络/HTTP/解析错误:记录失败状态,并继续处理其他条目。
- 非文本内容类型(PDF/图片/音频/视频/zip):将该条目标记为失败。
- 提取内容过短(
--min-chars):视为失败,以避免正文文本质量低下。
参考资料
references/schema.mdreferences/fetch-rules.md
资源文件
assets/config.example.json
脚本
scripts/fulltext_fetch.py
评论
支持 Markdown