AI 驱动的日报生成工具,过滤噪音,按需推送。
flowchart LR
A[抓取RSS] --> B[关键词过滤]
B --> C{AI 评分}
C -->|是| D[AI 评分筛选]
C -->|否| E[跳过]
D --> F[生成日报]
E --> F
F --> G[推送]
G --> H[飞书]
G --> I[钉钉]
G --> J[GitHub]
- 开箱即用 内置AI资讯模板,你只需要根据模板配置大模型既可以直接运行
- 自定义资讯来源 自定义RSS源
- 降噪 除了关键词黑名单白名单,还支持AI评分、筛选、生成
- 自定义推送 支持推送钉钉、飞书、Github等
- WEB GUI 可视化配置
- 自定义 根据 yaml 配置文件,可以自定义数据源、提示词、推送渠道等等
# 安装
npm install -g @ynews/cli
# 生成示例配置文件 ynews.yaml
ynews init --template ai
# 按需修改 ynews.yaml
ynews # 完整流程:抓取 → 生成 → 推送配置和命令
Options:
-V, --version output the version number
-c, --config <file> 配置文件路径(默认:当前目录下的 ynews.yaml)
-d, --dry-run 试运行,不推送,仅输出日报内容到 stdout
-v, --verbose 输出详细日志
--hours <number> 抓取最近 N 小时的资讯(默认:24)
--no-cache 禁用 LLM 缓存
-h, --help display help for command
Commands:
init [options] 生成示例配置文件 ynews.yamlWEB 端提供定时任务、多任务管理、登录 等功能
- 启动 API 服务和 Web GUI:
pnpm devynews.yaml 是核心配置文件,支持 ${ENV_VAR} 环境变量占位符。
# ── 模型(OpenAI 兼容接口,第一个为默认模型)──
models:
- name: gpt-4o-mini
baseUrl: https://api.openai.com/v1
apiKey: ${OPENAI_API_KEY}
# 可配置多个模型,AI 节点可通过 llm.model 指定使用哪个
# - name: deepseek-chat
# baseUrl: https://api.deepseek.com/v1
# apiKey: ${DEEPSEEK_API_KEY}
# ── 数据源(RSS 订阅)──
datasources:
- url: https://example.com/feed.xml
# 支持任意 RSS/Atom 源
# - url: https://another.com/rss
# ── AI 评分筛选(可选)──
scoring:
llm:
model: gpt-4o-mini # 可指定模型,不填则用第一个
temperature: 0.7
# top_p: 1
# max_tokens: 2048
prompt: |
为程序员挑选高价值文章。返回 JSON 数组,每篇文章一个分数(0-10)。
**评分标准(综合考虑相关性和质量)**
- 9-10: 新模型发布、大模型版本更新、重要开源项目、工具发布**
- 8-9: 开发者洞察、观点与趋势
- 7-8: xxx
- 0: 满足任意一项: 1.边缘技术内容 2.低价值内容 3.标题简短意义不明 4.对开发者和互联网创业公司没有任何帮助 5.汽车行业 6.学术与研究进展
**输出要求**
返回纯 JSON 数组, 不要任何多余的内容, 分数数量、顺序必须和文章保持一致
比如:[8,5,3]
topN: 200 # 取评分最高的前 N 篇
# ── 日报生成──
generate:
mode: ai # ai: AI 生成摘要 | plain: 原文拼接
llm:
model: gpt-4o-mini # 可指定模型
temperature: 0.1
prompt: |
你是一个专业的AI领域资讯编辑,请根据以下文章列表生成一份简洁的日报摘要。
要求:1) 按主题分组 2) 每篇文章一句话总结 3) 使用 Markdown 格式
# ── 推送渠道(可选,不填则仅输出到 stdout)──
push:
# 飞书群机器人
feishu:
webhook: https://open.feishu.cn/open-apis/bot/v2/hook/xxx
secret: ${FEISHU_SECRET} # 签名密钥(可选)
title: "📰 AI 日报" # 卡片标题
# 钉钉群机器人
dingtalk:
webhook: https://oapi.dingtalk.com/robot/send?access_token=xxx
secret: ${DINGTALK_SECRET} # 签名密钥(可选)
title: "AI 日报"
# GitHub 仓库
github:
token: ${GITHUB_TOKEN}
owner: myuser
repo: daily
branch: main # 默认 main
pathTemplate: "{YYYY}/{MM}/{DD}.md" # 文件路径模板| 字段 | 必填 | 说明 |
|---|---|---|
models |
✅ | LLM 模型列表,支持 OpenAI 兼容 API。第一个模型为默认 |
models[].name |
✅ | 模型名称,作为 API model 参数 |
models[].baseUrl |
✅ | API 地址,默认 https://api.openai.com/v1 |
models[].apiKey |
✅ | API 密钥,支持 ${ENV_VAR} 环境变量 |
datasources |
✅ | RSS 数据源列表 |
datasources[].url |
✅ | RSS/Atom 订阅地址 |
filter |
❌ | 关键词过滤配置 |
filter.strategy |
❌ | blocklist(黑名单)或 allowlist(白名单) |
filter.keywords |
❌ | 关键词列表,支持正则如 /^广告/ |
scoring |
❌ | AI 评分配置,不填则跳过 AI 评分 |
scoring.llm |
❌ | 评分节点的 LLM 参数配置,按 client.chat.completions.create 参数原样传入(messages 由程序生成) |
scoring.llm.model |
❌ | 评分用的模型,不填用第一个模型 |
scoring.llm.temperature |
❌ | 评分调用的 temperature,范围 0-2 |
scoring.llm.top_p |
❌ | 评分调用的 top_p,范围 0-1 |
scoring.llm.max_tokens |
❌ | 评分调用的 max_tokens |
scoring.prompt |
✅ | 评分提示词 |
scoring.topN |
❌ | 取评分最高的前 N 篇,默认不限制 |
generate |
✅ | 日报生成配置 |
generate.mode |
✅ | ai(AI 生成摘要)或 plain(原文拼接) |
generate.llm |
❌ | AI 生成节点的 LLM 参数配置,按 client.chat.completions.create 参数原样传入(messages 由程序生成) |
generate.llm.model |
❌ | 生成用的模型,不填用第一个模型 |
generate.llm.temperature |
❌ | 生成调用的 temperature,范围 0-2 |
generate.llm.top_p |
❌ | 生成调用的 top_p,范围 0-1 |
generate.llm.max_tokens |
❌ | 生成调用的 max_tokens |
generate.prompt |
❌ | 生成提示词(ai 模式) |
generate.maxArticles |
❌ | plain 模式文章上限,默认全部 |
cache |
❌ | 缓存配置 |
cache.rssTtl |
❌ | RSS 缓存秒数,默认 3600 |
cache.llmTtl |
❌ | LLM 缓存秒数,默认 3600 |
retry |
❌ | 重试策略 |
retry.maxRetries |
❌ | 最大重试次数,默认 3 |
retry.rounds |
❌ | 评分重试轮数,默认 2 |
push |
❌ | 推送渠道配置 |
push.feishu |
❌ | 飞书推送 |
push.dingtalk |
❌ | 钉钉推送 |
push.github |
❌ | GitHub 推送 |
docker compose up -d --build
# 浏览器访问 http://localhost:3011