mcpField
A
ai-tech-fulltext-fetch

ai-tech-fulltext-fetch

github.com/tiangong-ai数据与数据库1158 次安装1 周前更新
代码仓库

关于 ai-tech-fulltext-fetch

从 ai-tech-rss-fetch 使用的 SQLite 数据库读取 RSS 条目,抓取并保存文章正文。适合在元数据同步后建立可增量运行、支持重试的全文获取流程。

主要功能

  1. 01从现有 RSS 条目抓取正文
  2. 02优先使用规范 URL
  3. 03提取失败时回退 HTML 解析
  4. 04按条目唯一保存提取结果
  5. 05支持增量同步和失败重试

适用场景

  1. 01为已有 RSS 条目补充全文
  2. 02按需获取单篇文章正文
  3. 03检查正文提取状态
  4. 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 持久化全文。

工作流

  1. 先确保元数据表存在。
  • 使用此技能前,先运行 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"
  1. 初始化全文表。
python3 scripts/fulltext_fetch.py init-db --db "$AI_RSS_DB_PATH"
  1. 运行增量全文同步。
  • 默认行为是抓取缺少全文或当前状态为失败的行。
python3 scripts/fulltext_fetch.py sync \
  --db "$AI_RSS_DB_PATH" \
  --limit 50 \
  --timeout 20 \
  --min-chars 300
  1. 按需抓取单个条目。
python3 scripts/fulltext_fetch.py fetch-entry \
  --db "$AI_RSS_DB_PATH" \
  --entry-id 1234
  1. 检查提取内容的状态。
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_status
    • extractor(trafilatura、html-parser 或 none)
    • content_text、content_hash、content_length
    • status(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 天的行。

可配置参数

  • --db
  • AI_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.md
  • references/fetch-rules.md

资源文件

  • assets/config.example.json

脚本

  • scripts/fulltext_fetch.py

评论

支持 Markdown