news 2026/4/25 5:41:06

Spectrum开源了:一套代码把AI Agent发到iMessage、WhatsApp、Telegram

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spectrum开源了:一套代码把AI Agent发到iMessage、WhatsApp、Telegram

Photon 前天开源了 Spectrum——一个 TypeScript SDK,让你的 AI Agent 同时跑在 iMessage、WhatsApp、Telegram、Discord、Slack 上。写一次 Agent 逻辑,definePlatform选好渠道就能部署。我试了一天,踩了几个坑,也发现了一些意外的亮点。

Spectrum 解决的问题

做多渠道 AI Agent 最烦的不是 Agent 逻辑——而是每个平台的接入方式都不一样

我之前接飞书用 WebSocket,接 Discord 用 Bot Token,接 Telegram 用 Webhook。三个平台三套代码,消息格式不同,事件模型不同,认证方式不同。每接一个新渠道就要花半天到一天。

Spectrum 的思路是把平台差异抽象掉。你写 Agent 的核心逻辑,然后用definePlatform声明要发到哪些渠道。SDK 负责处理每个平台的协议细节。

import{Agent,definePlatform}from"spectrum-ts";constagent=newAgent({name:"my-assistant",onMessage:async(message)=>{// 这段逻辑在所有平台上都一样constreply=awaitcallLLM(message.text);return{text:reply};}});// 一行代码加一个渠道agent.use(definePlatform("telegram",{token:process.env.TG_TOKEN}));agent.use(definePlatform("discord",{token:process.env.DC_TOKEN}));agent.use(definePlatform("imessage",{/* Spectrum Cloud 凭证 */}));agent.start();

MIT 协议开源,npm 安装:npm install spectrum-ts

为什么 iMessage 是杀手特性

Spectrum 支持的渠道里,Telegram、Discord、Slack 都有现成的 Bot API——这些自己接也不难。iMessage 是独家的。

Apple 没有提供官方的 iMessage Bot API。之前想在 iMessage 上跑 Agent 基本不可能(除非用 Jailbreak 或者 AppleScript 黑魔法,都不稳定)。

Spectrum 通过 Photon Cloud 的桥接服务实现了 iMessage 接入。你的 Agent 发消息到 Photon Cloud,Cloud 通过合法渠道发到 iMessage。延迟 150-250ms,比大多数聊天 API 都快。

这意味着:你终于可以跟自己的 AI Agent 在 iMessage 里聊天了。

对于用 Apple 生态的开发者来说,这个价值很大。iMessage 是 iOS 用户用得最多的消息 App——在这里跑 Agent,意味着不需要装任何新 App。

实测:部署一个多渠道 Agent

我花了一下午把一个简单的 Agent(新闻摘要助手)部署到了 Telegram + Discord + iMessage。

安装和初始化(5 分钟)

mkdirspectrum-test&&cdspectrum-testnpminit-ynpminstallspectrum-ts

Agent 逻辑(10 分钟)

// agent.tsimport{Agent,definePlatform}from"spectrum-ts";importOpenAIfrom"openai";constllm=newOpenAI({baseUrl:"https://your-api-gateway.com/v1",apiKey:process.env.LLM_KEY});constagent=newAgent({name:"news-helper",onMessage:async(msg)=>{if(msg.text.includes("新闻")||msg.text.includes("news")){constresp=awaitllm.chat.completions.create({model:"deepseek/deepseek-v3",messages:[{role:"system",content:"你是一个 AI 新闻助手,用中文回答。"},{role:"user",content:msg.text}]});return{text:resp.choices[0].message.content};}return{text:`收到你的消息:${msg.text.slice(0,50)}...`};}});// 三个渠道agent.use(definePlatform("telegram",{token:process.env.TG_TOKEN}));agent.use(definePlatform("discord",{token:process.env.DC_TOKEN}));agent.start();console.log("Agent 启动,监听 Telegram + Discord");

部署结果

维度TelegramDiscordiMessage
接入时间3 分钟3 分钟10 分钟(需要 Cloud)
首条消息延迟210ms180ms240ms
消息格式纯文本 ✓ / Markdown ✓纯文本 ✓ / Embed ✓纯文本 ✓ / 富文本 ✗
图片发送
稳定性(24h)0 断连0 断连1 次断连(自动恢复)

全程不到 20 分钟三个渠道就跑起来了。之前我接一个飞书就花了半天。

Spectrum vs OpenClaw:互补不是竞争

我用开源 Agent 框架(OpenClaw)跑了两个多月的多渠道 Agent。看到 Spectrum 第一反应是"这个要替代我的方案了吗?"

仔细看了一天之后,结论是互补大于竞争。它们解决的是不同层面的问题。

维度SpectrumOpenClaw
定位消息渠道的统一层完整的 Agent 运行时
核心价值一套代码发到所有平台Agent 生命周期管理
Agent 逻辑你自己写内置(对话、工具调用、记忆)
模型调用你自己接内置(fallback chain、路由)
记忆系统内置(持久化跨 session)
定时任务内置(cron 系统)
渠道支持iMessage ✓ / WhatsApp ✓飞书 ✓ / 企微 ✓
iMessage(杀手特性)
飞书

一句话总结:Spectrum 是"渠道层",OpenClaw 是"运行层"。

Spectrum 只管"消息怎么到达用户"。它不管 Agent 怎么思考、怎么调工具、怎么记忆。你需要自己写 Agent 逻辑,或者——用 OpenClaw 做 Agent 运行时,再通过 Spectrum 发到 iMessage。

这个组合拳很有想象力:OpenClaw 的 Agent 能力(记忆、工具调用、定时任务、模型路由)+ Spectrum 的渠道覆盖(iMessage、WhatsApp)。

为什么不是一个东西做完

有人可能问:OpenClaw 为什么不自己支持 iMessage?

因为 iMessage 没有公开 API。Apple 不让第三方直接接入。Spectrum 通过 Photon Cloud 提供了一个合规的桥接服务——这需要和 Apple 生态深度打交道,不是一个开源项目几天能搞定的。

反过来,Spectrum 为什么不做 Agent 运行时?因为那是另一个领域。做好消息路由和做好 Agent 思考是两码事。让每个工具专注自己最擅长的事,通过组合获得最大价值。

实测中发现的坑

坑 1:iMessage 需要 Spectrum Cloud(不能纯自托管)

Spectrum SDK 是开源的,但 iMessage 接入必须走 Photon Cloud。这意味着:

  1. 你的消息经过 Photon 的服务器
  2. 需要注册 Photon 账号并配置凭证
  3. 有延迟(虽然只有 240ms,但比本地 Telegram 的 210ms 多了 30ms)

如果你对数据隐私有严格要求,iMessage 渠道要慎重考虑。Telegram 和 Discord 可以完全自托管。

坑 2:iMessage 的富文本支持有限

Telegram 支持 Markdown 格式消息,Discord 支持 Embed。但 iMessage 目前只支持纯文本 + 图片。不能发代码块、不能发表格、不能发带链接预览的卡片。

如果你的 Agent 需要发送结构化信息(比如数据报表),iMessage 渠道的体验会打折扣。

坑 3:跨渠道消息格式需要适配

Spectrum 的onMessage回调给你一个统一的消息对象。但当你的回复在不同渠道上展示时,格式差异还是存在的。

// 你以为在所有渠道都是这样显示return{text:"**加粗** 和 `代码`"};// 实际上:// Telegram: 加粗显示正常,代码块正常// Discord: 加粗正常,代码块正常// iMessage: 直接显示原始 Markdown 字符 **加粗** 和 `代码`

建议:对 iMessage 渠道做一层格式清洗,把 Markdown 标记去掉。

functioncleanForPlatform(text:string,platform:string):string{if(platform==="imessage"){returntext.replace(/\*\*(.*?)\*\*/g,"$1")// 去加粗.replace(/`(.*?)`/g,"$1")// 去代码标记.replace(/#{1,3}\s/g,"");// 去标题标记}returntext;}

延迟实测数据

跑了 100 条消息的端到端延迟(从发送到收到 Agent 回复):

渠道P50P95P99
Telegram1.8s3.2s5.1s
Discord1.6s2.9s4.3s
iMessage2.0s3.5s5.8s

注意:这个延迟包含了模型推理时间(~1.2s),渠道本身的延迟只有 150-250ms。三个渠道差距很小——主要差异来自模型推理速度的波动,不是渠道传输。

我的用法

目前把 Spectrum 当做一个"补充渠道层"用:

渠道工具原因
飞书自建 Agent 框架国内团队主力渠道
Discord自建 Agent 框架社区主力渠道
iMessageSpectrum个人移动端,只有 Spectrum 能接

iMessage 是我自己移动端用得最多的消息 App。以前不能在 iMessage 里和 Agent 聊天,只能切到飞书或者 Discord。现在用 Spectrum 接上之后,日常小任务(查个信息、翻译一句话)直接在 iMessage 里发就行了。

模型调用走 API 网关统一管理——不管从哪个渠道来的消息,后端调用都走一个 Key,我在 TheRouter 上看到一个统一的调用日志和账单,不用按渠道去对账。

常见问题

Q: Spectrum 是免费的吗?
A: SDK 开源免费(MIT 协议)。Telegram、Discord、Slack 这些有公开 API 的渠道可以完全自托管,零成本。iMessage 和 WhatsApp 需要走 Spectrum Cloud(Photon 的付费服务),目前 beta 期间免费,正式定价未公布。

Q: Spectrum 能和 OpenClaw 一起用吗?
A: 理论上可以——让 OpenClaw 处理 Agent 逻辑(记忆、工具调用、模型路由),Spectrum 处理消息投递(尤其是 iMessage)。但目前没有现成集成,需要自己写一层适配。我觉得未来会有人做这个集成。

Q: WhatsApp 的接入体验怎么样?
A: 我没有实测 WhatsApp(需要 WhatsApp Business API 账号)。从文档看,接入方式和 Telegram 类似——definePlatform("whatsapp", { credentials })一行搞定。但 WhatsApp 的消息模板审核比较严格,这不是 Spectrum 能解决的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 5:30:25

LFM2-2.6B-GGUF保姆级教程:Q4_0/Q4_K_M/Q5_K_M模型切换全流程

LFM2-2.6B-GGUF保姆级教程:Q4_0/Q4_K_M/Q5_K_M模型切换全流程 1. 模型简介 LFM2-2.6B-GGUF是由Liquid AI公司开发的大语言模型,经过GGUF量化处理后,可以在资源有限的设备上高效运行。这个模型特别适合需要在本地部署AI能力的开发者使用。 …

作者头像 李华
网站建设 2026/4/25 5:27:17

拉格朗日乘数法与KKT条件在优化问题中的应用

1. 拉格朗日乘数法基础回顾在深入探讨不等式约束之前,让我们先回顾一下拉格朗日乘数法的基本概念。这个方法由18世纪数学家约瑟夫路易斯拉格朗日提出,用于求解带有等式约束的优化问题。想象你是一位登山者,想要找到山脉的最高点,但…

作者头像 李华
网站建设 2026/4/25 5:26:27

软件开发预算应该怎么定?避免一开始就踩坑

软件开发预算没定好,超支、效果差等问题就来了。我之前做项目时,因预算没规划好,后期资金不足,功能删减,效果大打折扣。下面就分享些定预算的经验。先明确需求范围,这是基础。像做电商APP,要确定…

作者头像 李华
网站建设 2026/4/25 5:26:19

不只是压缩:当模型蒸馏开始复制人格

大模型为什么要进行瘦身? 一个原始的大模型(比如未压缩的Qwen-72B),在真实场景中会遇到四堵墙: 💾 存储墙 问题:72B参数的FP32模型,需要 72B 4字节 ≈ 288GB 显存。一张A100&#…

作者头像 李华
网站建设 2026/4/25 5:25:22

用STM32和GY-30(BH1750)做个智能台灯:自动调光与光照数据记录实践

用STM32和GY-30打造智能调光台灯:从硬件搭建到算法优化 在创客圈里,把技术转化为实用产品总能带来双倍成就感。想象一下:当夜幕降临,书桌上的台灯自动亮起适宜亮度的暖光;清晨阳光透过窗帘,灯光又能智能调节…

作者头像 李华