本文来自 thinkingloop 的 k,一个手搓过实时翻译语音智能体的投资人。

Caddy 是什么?

Caddy — 用你的声音控制所有工作应用

Caddy 号称是:下一代计算界面,由语音和屏幕上下文驱动。Caddy 通过让知识工作者直接与电脑对话,消除了点击和复制粘贴的混乱。当今的知识工作者已经生活在以语音为先的世界中——他们在 WhatsApp、iMessage 和 Discord 上说话。现在也是我们的工具倾听的时候了。

创始人: Caddy 由 Connor Waslo 和 Rajiv Sancheti 联合创立。两位创始人在创办 Caddy 前共同在视频通信独角兽 Loom 工作了四年,分别领导 Loom 的 AI 套件产品和设计团队。Rajiv 曾担任 Loom AI 功能的设计负责人,此前也在 Airbnb 及 Kleiner Perkins (KP) 孵化器参与产品设计项目。Connor 是 Loom AI 套件的产品负责人,并带领过 Loom 的定价与营收团队,对企业软件的商业化和用户需求有深入理解。这样强强组合的背景使他们深刻认识到语音交互在办公场景的潜力。

产品: Caddy 打造 “工作版 Siri”,让用户用语音完成跨应用的复杂工作流程。简单来说,Caddy 将用户的声音变成计算机的新型输入接口。它能够 “读懂” 用户屏幕上的内容和当前意图,从而在用户持续专注时自动替用户执行操作。例如,当用户说出 “创建一个 Linear 工单并分享给 Slack” 这样的指令后,Caddy 会理解上下文并在后台立即于 Linear 中创建工单,再将链接发到 Slack 指定频道,无需用户手动切换应用来回操作。

Caddy 提供两种模式:

操作模式(Action mode): 用户口述意图,Caddy 即可跨应用执行相应任务(如发送 Slack 消息、在日历安排会议等),因为 Caddy 能看到当前屏幕内容并连接相关应用,所以用户可以免除频繁在各工具间切换。

听写模式(Dictation mode): 用户可以在任意文本输入框直接用语音输入文字(邮件、即时消息、评论等),完全替代键盘打字且适用于全局,不论当前聚焦在哪个应用窗口。

让 GPT5.1 复现一个 Caddy

Caddy 本质上是「桌面代理 + 语音前端 + LLM 编排 + App Connectors」,挂在 OS 最底层,把 “说话 → 操作多应用” 的链路打通。

我按工程链路拆一遍,从你按下说话键,到 Linear 里真的多了一条 ticket。

1.顶层架构图

可以粗暴分成 5 层:

  1. 客户端/OS 集成层:桌面 App、快捷键、麦克风、屏幕上下文抓取、输入注入

  2. 语音管线层:VAD、流式 ASR、命令式文本后处理

  3. 上下文与状态层:屏幕内容解析、当前应用/选中对象、用户会话状态

  4. LLM/Agent 编排层:意图理解、工具调用规划、多步 Workflow

  5. Connectors 执行层:Slack / Linear / Calendar 等 API + 必要的 UI 自动化

2.客户端:常驻桌面的小 daemon(守护进程)

目标:抢占「入口」,掌握输入/屏幕/部分输出。

关键组件:

3.语音管线:从 “声音” 到 “可用文本”

目标:低延迟、高准确、偏命令语气的 ASR。

链路:

  1. 本地 VAD / Chunking
  1. 流式 ASR
  1. 文本后处理

Dictation 模式里,很多时候 ASR + 轻后处理 = 可直接注入;

Action 模式则将文本交给下一层 LLM/Agent。

4.屏幕上下文引擎:让 “这个” 有具体指代

Caddy 卖点之一就是 “看得见你的屏幕”,否则 “share this to Slack” 这样的应用程序交互会懵。

可以设计一个 Context Service(大部分逻辑在客户端,本地优先):

  1. 基础元数据
  1. 结构化上下文抓取策略
  1. 截图 + OCR / 多模态 fallback
  1. 上下文对象化
{
  "active_app": "Linear",
  "active_url": "https://linear.app/...",
  "selection_text": "Bug report: ...",
  "screen_summary": "User is viewing a bug report in Linear tagged 'P1 - Production'.",
  "entities": [
    {"type": "ticket", "id": "LIN-123", "title": "Login fails on Safari", "url": "..."}
  ]
}

隐私友好做法:

尽可能在本地做提取 + 摘要,只把 “压缩后的语义信息” 发给服务器,而不是裸截图/全文。

5.LLM / Agent 编排:把 “话” 和 “屏幕” 变成一串 API 调用

这里是整套系统的大脑。

5.1 模式识别(Action vs Dictation)

5.2 意图解析 + Workflow 规划

Action 模式下:

  1. 构造一个大 Prompt / System message:
  1. 通过 tool calling / function calling
  1. 歧义与确认

Dictation 模式下,LLM 主要是做 “润色/格式化”,而不是 orchestrator。

6.Connectors:跨应用执行层(API & UI 自动化)

目标:让 Agent 的工具调用变成真实世界的 side-effect。

6.1 API Connectors

每个 SaaS app 就是一套小 SDK + 工具定义:

6.2 UI 自动化 fallback(无 API / 用户本地状态)

有些事情需要直接 “动鼠标键盘”:

{
  "actions": [
    {"type": "key", "combo": "Cmd+L"},
    {"type": "text", "value": "https://linear.app/..."},
    {"type": "key", "combo": "Enter"}
  ]
}

这块做深了就是 “桌面 RPA + LLM planner” 的组合。

7.Dictation 模式的专用链路

相对简单但对 “体验细节” 要求极高:

  1. 客户端:
  1. 后端:
  1. 客户端注入:

一个硬指标:端到端延迟最好控制在 < 200ms 级别,才有 “说一句话字就跟着出来” 的错觉。

8.账户、个性化与 “工作版 Siri” 的持续进化

这层是 “产品力”,但背后也有技术栈:

9.基础设施:服务划分与观测

后端大致可以拆成:

链路是典型的 event-driven:

10.安全、隐私与 “我到底给了你多少权力”

这类产品非常敏感,安全/隐私几乎是技术架构的一等公民:

11.串一下你给的例子:

“创建一个 Linear 工单并分享给 Slack”

从工程链路看就是:

  1. 客户端捕获语音 + 当前屏幕(可能正在浏览一个 bug 描述页面)。

  2. 语音 → VAD → 流式 ASR → 文本:“创建一个 Linear 工单并分享给 Slack”。

  3. Context Service 提供:

  1. Orchestrator:
  1. LinearTool.create_issue(title=…, description=selection_text, project=…)

  2. SlackTool.post_message(channel=”#eng-bugs”, text=“New bug created: ”)

    1. Connectors:
  1. 客户端:

* 弹个 Toast:“已创建 LIN-123 并发到 #eng-bugs”,并提供撤销/跳转按钮。

整条链路跑顺了,就是 “语音 + 屏幕上下文” 变成 “真正的多 app 自动化”。为了这个愿景和 Dafdef/AI Key、Voice In + RPA、或浏览器侧 Copilot 做对比时,可以直接按这几个层级做差异分析:入口(OS vs 浏览器)、上下文深度、Agent 编排能力、Connector 丰富度、以及安全/隐私策略。

阅读更多 Voice Agent 学习笔记:了解最懂 AI 语音的头脑都在思考什么


↙↙↙阅读原文可查看相关链接,并与作者交流