feat(ingest): API Push 前端层 + 文档 + 端到端联通
后端(支持 api_push source 创建/调度): - schemas/source.py:SourceIn.url 改成 str(允许 api_push 的 api-push:// 占位) - admin.py create_source 简化 url 传递 - workers/__main__.py:_rebuild_jobs 跳过 api_push 源(它是被动接收,不抓取) - workers/pipeline.py:run_once 也加同条件,api_push 不进抓取循环 前端: - api/articles.ts:ArticleListItem 加 is_short_news(required)/source_ref; ArticleDetail 加 external_id;导出 IngestTokenOut;adminApi 加 list/create/revoke ingest token 三个方法 - views/Feed.vue:卡片根 class 短新闻加 short-card(淡蓝底 #f6f9fc + 左侧 3px 蓝色色条 #4f9eff);元信息栏加 📰 短讯 角标;长新闻摘要 body_zh_text 截前 200 字,短新闻不截取保留换行(white-space: pre-wrap); 短新闻不显示 AI 插图 - views/ArticleDetail.vue:tag 行加 📰 短讯 + source_ref 角标;短新闻 路径下隐藏翻译状态/重译/原文链接按钮;正文区短新闻直接渲染 body_zh_text,跳过译文/原文/AI 配图卡片;Angel + 美团双评论卡片 都保留 - views/AdminSources.vue:kind 加 api_push 选项;api_push 源 URL 字段 变只读占位、隐藏抓取间隔;列表操作列加 🔑 Token 按钮; 弹窗支持生成(raw_token 一次性显示 + 复制)/列表/撤销 文档: - docs/api-push.md:调用方契约 + 三层去重 + 限速 + lifecycle + owner 操作手册 + curl/Python 示例 + 重试策略 + 故障排查 - README.md:关键特性加 API Push;API 概览加 /api/v1/ingest 和 3 个 /admin/.../ingest-tokens 端点
This commit is contained in:
16
README.md
16
README.md
@@ -48,7 +48,10 @@
|
||||
- 🌐 **智能翻译**:腾讯云 TMT(月 500 万字符配额)→ 本地 NLLB-200 降级,30 天 Redis 缓存避免重复
|
||||
- 🤖 **LLM 智能增强** *(新)*:翻译完成后自动跑 4 项 LLM 任务 — 排版 / 分类 / 插图 / 点评
|
||||
- 🎨 **AI 配图**:文生图模型自动为每篇文章生成插图(走 Agnes 平台,带限速)
|
||||
- 👤 **双角色鉴权**:JWT(access 60min + refresh 14d) + API Token(sha256,可撤销,给 Android 预留)
|
||||
- 📥 **API Push 短新闻** *(新)*:`POST /api/v1/ingest` 接收外部中文短新闻推送,
|
||||
三层去重(L1 external_id / L2 content_hash / L3 DB UNIQUE)+ 每 token 2 篇/秒限速;
|
||||
短新闻入库后跳过翻译/排版/插图,只跑分类 + 双 provider 点评
|
||||
- 👤 **双角色鉴权**:JWT(access 60min + refresh 14d) + API Token(sha256,可撤销,给 Android / ingest 预留)
|
||||
- 📌 **收藏 + 关键词订阅**:用户级书签,服务端定时按关键词命中推送(预留 Telegram 通道)
|
||||
- 📊 **管理看板**:源健康度 / 翻译配额 / LLM 状态,全部可视化
|
||||
- 🔄 **热加载**:源/提示词改了不用重启,worker 每天 00:30 重建 job
|
||||
@@ -616,9 +619,20 @@ WHERE translation_status='ok';
|
||||
- `GET /bookmarks` / `POST /bookmarks` / `DELETE /bookmarks/{id}`
|
||||
- `GET /subscriptions` / `POST /subscriptions` / `DELETE /subscriptions/{id}`
|
||||
|
||||
### API Push 短新闻(无鉴权,凭 X-Ingest-Token)
|
||||
|
||||
- `POST /api/v1/ingest` — 外部推送短新闻入库(中文原生,跳过翻译/排版/插图,跑分类 + 双 provider 点评)
|
||||
- 鉴权:`X-Ingest-Token` 头对应 `api_tokens.purpose='ingest'` 的 sha256 token
|
||||
- 限速:每 token 2 篇/秒(`INGEST_RATE_PER_SEC` 可调)
|
||||
- 去重:三层(L1 external_id / L2 content_hash / L3 DB UNIQUE)
|
||||
- 完整契约见 [`docs/api-push.md`](./docs/api-push.md)
|
||||
|
||||
### Owner only(`/admin/*`)
|
||||
|
||||
- `GET /admin/sources` / `POST` / `PATCH /{id}` / `DELETE /{id}` — 源 CRUD
|
||||
- `POST /admin/sources/{source_id}/ingest-tokens` — 为 api_push 源生成 ingest token(raw_token 仅一次性返回)
|
||||
- `GET /admin/sources/{source_id}/ingest-tokens` — 列出某个 source 的 ingest token
|
||||
- `DELETE /admin/ingest-tokens/{token_id}` — 撤销 ingest token
|
||||
- `POST /admin/refresh/{source_id}` — 立即触发抓取
|
||||
- `POST /admin/translation/rerun/{article_id}` — 重译
|
||||
- `GET /admin/health` — 源健康看板
|
||||
|
||||
Reference in New Issue
Block a user