Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.

车身开发前沿情报机器人(Val Town)

面向车身开发工程师,自动抓取国内外关于新材料 / 新工艺 / 新技术的实时资讯, 去重、按主题归类后,通过邮件**每天一封(北京时间早上 9:00)**定时推送。

覆盖 10 个方向:

方向说明
新型高强钢第三代高强钢、热成形钢、超高强钢
压铸铝合金 / 一体化压铸一体化压铸、免热处理合金、超大型压铸
高强压铸铝合金高强韧压铸铝、强度与塑性提升
钢铝复合压铸钢铝混合压铸、钢嵌件嵌铸
镁合金镁合金车身、镁压铸轻量化
镁合金防腐技术防腐涂层、表面处理、微弧氧化
镁合金连接技术镁合金焊接铆接、异种材料连接与电偶腐蚀
低成本复合材料低成本碳纤维、玻纤、热塑性复合材料
高吸能材料 / 碰撞结构吸能盒材料、碰撞吸能结构、泡沫铝
连接工艺自冲铆接、激光焊、异种材料胶接

数据来源:Google News RSS(中文源 + 英文源),可在 main.tsxTOPICS 里自由增删。


一、它是怎么工作的

  1. 每个主题的多个关键词合并成一条 OR 检索,并附加 Google News 的 when:Nd 时间限定符,只拉时间窗内的结果。
  2. 抓取与 blob 读取并发,抓取内部按 concurrency 限流。
  3. 用 Val Town 的 blob 存储做跨次去重,同一条链接不会重复推送。
  4. LLM 提炼:给每条内容生成一句话干货,并剔除与车身开发无关的噪音。
  5. 按主题归类,生成中文排版的 HTML 邮件并发送。

关于 LLM 提炼(CONFIG.enableSummary

用 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」,方便你判断是否被限流。


二、部署到 Val Town(5 分钟)

1. 创建 Val

  1. 登录 https://val.town,点 New → Val
  2. 把仓库里的 main.tsx 全部内容粘贴进去。
  3. 右上角 + → 选择 CRON,把这个文件设为 Cron 触发。

2. 设置定时(每天早上 9 点)

Cron 时间按 UTC 计算。北京时间 9:00 = UTC 1:00,所以填:

0 1 * * *

中国不实行夏令时,这个换算全年固定,不用随季节调整。

提示:Val Town 免费版 Cron 最快每 15 分钟一次,每天一次完全够用。 需要换时间可用 https://crongpt.com 生成并自动做时区换算。

3. 邮件发送

代码按环境变量自动选择通道。

方式 A:不配环境变量(默认)

使用 Val Town 内置 std/email,发到你 Val Town 账号绑定的邮箱。免费版即可用。

想转到其他邮箱可在账号邮箱里设 Gmail 过滤器(条件填发件人 notifications@val.town, 勾选「永不将其发送到垃圾邮件」+「转发给」+「归类为:主要」)。

实践中 Gmail 转发坑较多:垃圾箱拦截、中文主题切词失败、转发地址绑定失效、 标签页分类,且转发后 SPF 校验会失败,邮件常落在目标邮箱的垃圾箱里。 若调不通,建议直接用方式 B。

方式 B:Brevo 直接投递到指定邮箱(免费,确定性更强)

绕开 Gmail 转发,程序直接把邮件发到目标地址;失败会立刻抛错并写进日志,便于排查。 Brevo 免费版每天 300 封、永久免费、不需要自有域名

  1. 注册 https://www.brevo.com(无需信用卡)
  2. 验证发件地址Senders, Domains & Dedicated IPsSendersAdd a sender, 填一个你能收信的邮箱,去点确认链接
  3. 拿 API Key:右上角账号菜单 → SMTP & APIAPI Keys → 生成
  4. 在 Val 的 Environment Variables 里加三个变量(必须同时配齐才生效):
变量
BREVO_API_KEY上一步生成的 API Key
BREVO_SENDER第 2 步已验证的发件邮箱
RECIPIENT_EMAIL你想接收情报的任意邮箱

免费版邮件底部带 "Sent with Brevo" 标识,无法去除。

4. 先跑一次验证

在编辑器里点 Run,几秒后检查邮箱是否收到(首次运行时间窗内若无新内容,会打印 “本次没有新内容”,可把 CONFIG.lookbackDays 临时调大再 Run 一次测试)。


三、常用自定义(改 main.tsx 顶部即可)

想做的事改哪里
增删关注方向 / 关键词TOPICS 数组
只要国内 or 只要国外CONFIG.fetchZh / CONFIG.fetchEn
时间窗、每主题条数CONFIG.lookbackDays / CONFIG.maxItemsPerTopic
某方向结果偏少CONFIG.combineQueries 改成 false,退回一个关键词一个请求(更慢但召回更全)
关掉摘要 / 换模型CONFIG.enableSummary / CONFIG.summaryModel
觉得噪音剔太狠或不够狠main.tsxSUMMARY_PROMPT 的「keep 判定」规则
推送频率Val Town 里的 Cron 表达式

四、环境变量清单

全部可选。不配 = 发到 Val Town 账号邮箱;三个配齐 = 通过 Brevo 直投指定邮箱。

变量说明
BREVO_API_KEYBrevo 的 API Key
BREVO_SENDER在 Brevo 验证过的发件邮箱
RECIPIENT_EMAIL接收情报的邮箱(可以是任意地址)

五、注意事项

  • Google News RSS 偶尔会对共享出口 IP 限流,代码已对单个源失败做容错,不影响其他源。
  • 若长期抓不到某方向,多半是关键词太窄,适当放宽 TOPICS 里的检索词。
  • 所有时间以 UTC 存储与比较,邮件里日期为发布日(YYYY-MM-DD)。