No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-21 15:34:00 +08:00
.env.example 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
.gitignore 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
admin.go 合并两份实现:提示词配置档与 PromptHash 缓存 2026-09-21 12:48:48 +08:00
admin_test.go 合并两份实现:提示词配置档与 PromptHash 缓存 2026-09-21 12:48:48 +08:00
classify.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
classify_test.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
config.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
config.yaml 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
config_test.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
DEPLOYMENT.md 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
file_cache.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
go.mod 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
go.sum 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
jev.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
jev_test.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
main.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
openai.go 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
openai_test.go 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
prompts.yaml 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
QUICKSTART.md 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
README.md 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
rss-summarizer.service 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
rss.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
summarizer.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
summarizer_test.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
title.go 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
translator.go 初始提交 RSS AI 摘要工具 2026-09-21 12:32:26 +08:00
tui.go 加入 Jev 打分与标签分类(实验) 2026-09-21 15:33:46 +08:00
tui_test.go 合并两份实现:提示词配置档与 PromptHash 缓存 2026-09-21 12:48:48 +08:00

RSS AI Summarizer

用 Go 编写的 RSS/Atom 二次加工工具:抓取上游订阅源,通过 OpenAI 兼容接口翻译标题、生成中文摘要,再输出标准 RSS 2.0。

默认按单次任务运行,适合 cron 或 systemd timer。也提供带 Token 的管理页和终端配置。

功能

  • 多个 RSS/Atom 源,可单独启用或停用。
  • 每篇新文章两次 AI 请求:标题翻译、正文摘要。
  • 可选:用 TypeSafe Jev 给源文打分并打标签(主题 + 地区),写入 RSS 的 <category>。Jev 不可用时自动跳过,不影响发布;缺标签的缓存会在下次运行补打。
  • 提示词(Prompt)独立保存在 prompts.yaml,源通过 prompt_profile 选择配置档。
  • 改提示词后旧缓存自动失效(PromptHash)。
  • 文件缓存,避免重复消耗 API。
  • 管理页:go run . serve,可改源、选配置档、手动处理。
  • 终端配置:go run . tui 或 add-source。

快速开始

cp .env.example .env
go mod download
go run .

.env 需要 OPENAI_API_KEY。可选 OPENAI_BASE_URL、OPENAI_MODEL、TYPESAFE_API_KEY、ADMIN_TOKEN、ADMIN_ADDR。

配置

config.yaml 管订阅源、模型和并发;prompts.yaml 管提示词配置档。

rss_sources:
  - id: scmp
    url: https://example.com/feed.xml
    name: Example News
    output_file: feed/scmp.xml
    enabled: true
    prompt_profile: news

prompts_file: prompts.yaml

jev:
  enabled: true
  base_url: https://api.typesafe.ai
  model: jev-latest
  timeout: 10
  min_confidence: 0.6

jev 段可选。主题词表:政治、冲突、财经、科技、环境、法治、灾害、体育、社会、其他;地区词表:中国、香港、亚洲、美国、欧洲、中东、其他。每篇最多各取一个;置信度低于 min_confidence 时降级为「其他」,不猜。

可用配置档见 prompts.yaml 的 profiles:news、blog、standard-news、short-brief、deep-context、finance-market、blog-translation。

命令

go run .                 # 处理所有启用源
go run . classify        # 只跑 Jev 打分打标签,不调用 OpenAI
go run . serve           # 管理页,默认 http://127.0.0.1:8080/admin
go run . tui             # 终端增删启停源
go run . add-source --id example --name "Example" --url "https://example.com/rss.xml" --profile news

开发

go test ./...