面向车身开发工程师,自动抓取国内外关于新材料 / 新工艺 / 新技术的实时资讯, 去重、按主题归类后,通过邮件**每天一封(北京时间早上 9:00)**定时推送。
覆盖 10 个方向:
| 方向 | 说明 |
|---|---|
| 新型高强钢 | 第三代高强钢、热成形钢、超高强钢 |
| 压铸铝合金 / 一体化压铸 | 一体化压铸、免热处理合金、超大型压铸 |
| 高强压铸铝合金 | 高强韧压铸铝、强度与塑性提升 |
| 钢铝复合压铸 | 钢铝混合压铸、钢嵌件嵌铸 |
| 镁合金 | 镁合金车身、镁压铸轻量化 |
| 镁合金防腐技术 | 防腐涂层、表面处理、微弧氧化 |
| 镁合金连接技术 | 镁合金焊接铆接、异种材料连接与电偶腐蚀 |
| 低成本复合材料 | 低成本碳纤维、玻纤、热塑性复合材料 |
| 高吸能材料 / 碰撞结构 | 吸能盒材料、碰撞吸能结构、泡沫铝 |
| 连接工艺 | 自冲铆接、激光焊、异种材料胶接 |
数据来源:Google News RSS(中文源 + 英文源),可在 main.tsx 的 TOPICS
里自由增删。
- 每个主题的多个关键词合并成一条
OR检索,并附加 Google News 的when:Nd时间限定符,只拉时间窗内的结果。 - 抓取与 blob 读取并发,抓取内部按
concurrency限流。 - 用 Val Town 的
blob存储做跨次去重,同一条链接不会重复推送。 - LLM 提炼:给每条内容生成一句话干货,并剔除与车身开发无关的噪音。
- 按主题归类,生成中文排版的 HTML 邮件并发送。
用 Val Town 自带的免费 OpenAI 接口(std/openai),无需自备 API Key。
它做两件事:
- 剔除噪音:股价涨跌、券商研报、招商引资、营销软文、供应商排行榜,以及虽然命中 关键词但主体与车身无关的内容(动力电池电芯、智驾、座舱等),都会被判为无关剔除。
- 提炼干货:一句话(≤45 字),优先保留材料/工艺名称、企业机构、关键参数、 进展阶段(研发/验证/量产/装车),去掉营销修饰语。
重要限制:Google News 的跳转链接是不透明 token,拿不到原文正文, 所以摘要是基于标题提炼的。提示词里已严格禁止模型补充标题以外的信息, 宁可返回空摘要也不编造。因此它的作用是快速筛选,细节仍需点开原文核对。
免费额度限 10 请求/分钟。本程序每次运行只发 1 次请求(所有条目批量处理), 完全够用。若接口调用失败,会自动降级为"只有标题、不过滤",不会导致任务失败。
- 请求数:58 → 20(关键词按主题+语种合并成 OR 检索)
- 依赖:移除
npm:rss-parser,改用内置正则解析,零第三方依赖、冷启动更快 - 响应体积:
when:Nd让 Google 只返回时间窗内的条目,体积大幅下降 - 并发:按
CONFIG.concurrency(默认 3)限流,配合 503/429 自动重试退避
为什么不全并发? 12 个请求同时打到 Google News,会因共享出口 IP 的突发流量 被限流,全部返回
HTTP 503。实测并发 3 是速度与成功率的平衡点。 若日志里仍出现大量 503,把concurrency调到 2 或 1,并适当调大retryBaseMs。
运行日志会打印「N 个请求,M 个有结果,耗时 Xms」,方便你判断是否被限流。
- 登录 https://val.town,点 New → Val。
- 把仓库里的
main.tsx全部内容粘贴进去。 - 右上角
+→ 选择 CRON,把这个文件设为 Cron 触发。
Cron 时间按 UTC 计算。北京时间 9:00 = UTC 1:00,所以填:
0 1 * * *
中国不实行夏令时,这个换算全年固定,不用随季节调整。
提示:Val Town 免费版 Cron 最快每 15 分钟一次,每天一次完全够用。 需要换时间可用 https://crongpt.com 生成并自动做时区换算。
代码按环境变量自动选择通道。
使用 Val Town 内置 std/email,发到你 Val Town
账号绑定的邮箱。免费版即可用。
想转到其他邮箱可在账号邮箱里设 Gmail 过滤器(条件填发件人
notifications@val.town,
勾选「永不将其发送到垃圾邮件」+「转发给」+「归类为:主要」)。
实践中 Gmail 转发坑较多:垃圾箱拦截、中文主题切词失败、转发地址绑定失效、 标签页分类,且转发后 SPF 校验会失败,邮件常落在目标邮箱的垃圾箱里。 若调不通,建议直接用方式 B。
绕开 Gmail 转发,程序直接把邮件发到目标地址;失败会立刻抛错并写进日志,便于排查。 Brevo 免费版每天 300 封、永久免费、不需要自有域名。
- 注册 https://www.brevo.com(无需信用卡)
- 验证发件地址:
Senders, Domains & Dedicated IPs→Senders→Add a sender, 填一个你能收信的邮箱,去点确认链接 - 拿 API Key:右上角账号菜单 →
SMTP & API→API Keys→ 生成 - 在 Val 的 Environment Variables 里加三个变量(必须同时配齐才生效):
| 变量 | 值 |
|---|---|
BREVO_API_KEY | 上一步生成的 API Key |
BREVO_SENDER | 第 2 步已验证的发件邮箱 |
RECIPIENT_EMAIL | 你想接收情报的任意邮箱 |
免费版邮件底部带 "Sent with Brevo" 标识,无法去除。
在编辑器里点 Run,几秒后检查邮箱是否收到(首次运行时间窗内若无新内容,会打印
“本次没有新内容”,可把 CONFIG.lookbackDays 临时调大再 Run 一次测试)。
| 想做的事 | 改哪里 |
|---|---|
| 增删关注方向 / 关键词 | TOPICS 数组 |
| 只要国内 or 只要国外 | CONFIG.fetchZh / CONFIG.fetchEn |
| 时间窗、每主题条数 | CONFIG.lookbackDays / CONFIG.maxItemsPerTopic |
| 某方向结果偏少 | 把 CONFIG.combineQueries 改成 false,退回一个关键词一个请求(更慢但召回更全) |
| 关掉摘要 / 换模型 | CONFIG.enableSummary / CONFIG.summaryModel |
| 觉得噪音剔太狠或不够狠 | 改 main.tsx 里 SUMMARY_PROMPT 的「keep 判定」规则 |
| 推送频率 | Val Town 里的 Cron 表达式 |
全部可选。不配 = 发到 Val Town 账号邮箱;三个配齐 = 通过 Brevo 直投指定邮箱。
| 变量 | 说明 |
|---|---|
BREVO_API_KEY | Brevo 的 API Key |
BREVO_SENDER | 在 Brevo 验证过的发件邮箱 |
RECIPIENT_EMAIL | 接收情报的邮箱(可以是任意地址) |
- Google News RSS 偶尔会对共享出口 IP 限流,代码已对单个源失败做容错,不影响其他源。
- 若长期抓不到某方向,多半是关键词太窄,适当放宽
TOPICS里的检索词。 - 所有时间以 UTC 存储与比较,邮件里日期为发布日(YYYY-MM-DD)。