Berth Bot 的「大脑 · 翻译 · 办公室」三层

一句话:模型厂商出脑子,AI SDK 当翻译,Agents SDK 给它一间永不下班的办公室。Berth 自己的代码只写「这个 bot 该干什么」。

Berth 业务代码contexts/bot · apps/bot
bot 是谁、能用哪些 tool(查持仓、查行情、提议改画像…)、什么时候跑 Routine、推什么通知。
只写「干什么」,不关心「怎么跑」。
↓ 隔着一层 AgentRuntime port(插座)——换底座不用改业务
Agents SDK · Thinkagents 0.30.0(锁死)
办公室 + 值班制度。每个所有者一个 Durable Object:存聊天记录、挂 WebSocket、到点自己醒来跑 Routine、被系统回收后能接着干。
Think = 里面那个「想 → 调工具 → 看结果 → 再想」的循环。
↓ 每转一圈循环,就叫一次模型
Vercel AI SDKai v7
万能翻译 / 转换插头。四家模型 API 格式各不相同,它统一成一套写法:发消息、收流式回复、解析「模型想调哪个工具」。
↓ 用谁的 key,就打到谁家
模型厂商@ai-sdk/* · BYOK
真正的大脑。用户自带 key(BYOK),费用记在用户自己账上,Berth 不垫付。key 用 Secrets Store 里的 KEK 加密后存放。
AnthropicOpenAIDeepSeekOpenRouter

换个生活比喻

🧠

模型 = 外包专家

很聪明,但每次只回答一句,回答完就忘。你要把前因后果每次都讲给他听。

🔌

AI SDK = 转换插头

四个国家四种插座。有了它,Berth 只用一种插头,换专家不用重新接线。

🏢

Agents SDK = 办公室

有档案柜(线程)、电话(WebSocket)、闹钟(Routine)。专家健忘,办公室替他记住一切。

🔑

BYOK = 自带会员卡

请专家的钱刷用户自己的卡。Berth 只负责把卡锁进保险柜(KEK 加密)。

你发一句「我 BTC 仓位危险吗?」之后

  1. Agents SDKWebSocket 收到消息,唤醒你的所有者 DO,从档案柜取出这条线程的聊天记录。
  2. Think 循环把「职能说明 + 画像 + 聊天记录 + 可用 tool 清单 + 你这句话」打包。
  3. AI SDK翻译成用户所选厂商的格式,用用户的 key 发出去。
  4. 模型回:「我要先调 查持仓 工具。」(它自己不能查,只能「点菜」)
  5. Think 循环执行 tool → 只读请求 HL mainnet → 把仓位数据塞回对话 → 回到第 3 步再问一次模型。这就是 agent 的「循环」。
  6. 模型看完数据,不再点菜,直接写答案:「保证金率 xx%,离强平还有 yy…」
  7. Agents SDK流式推回你的手机/网页,同时把整轮存进线程。下次接着聊。

那几个词到底什么意思

锁死 0.30.0
这个 SDK 还在 experimental 阶段,小版本就可能改坏东西。所以写死版本号,升级要专门跑一遍回归测试,mobile 和 bot 两处必须同时改。
Think
Agents SDK 自带的「聊天 agent」实现,替你写好了第 2–6 步的循环、流式输出和断线恢复。
AgentRuntime port
Berth 自己定义的一个接口(插座)。只有 owner/thinkRuntime.ts 认识 Think,其他代码只认这个插座。哪天 Think 不好用了,只换这一个文件。
tool calling
模型不能自己上网或查链。它只能说「我想调 X,参数是 Y」,由程序替它执行再把结果告诉它。agent 能做多少事,全看你给它多少工具。
BYOK
Bring Your Own Key,用户填自己的模型 API key。