当我们谈论端侧 AI 助手时,大部分产品仍停留在语音交互或文本对话的层面。Omi 作为一款开源的 AI 可穿戴设备与桌面助手,其核心差异化在于同时实现了屏幕内容读取(screen listening)与全天候对话式交互,并在架构设计上允许开发者自托管后端,将数据处理保留在本地或私有环境中。这种 “屏幕理解 + 端侧部署” 的组合,使其在隐私敏感场景和开发者生态中具备独特价值。
屏幕内容读取的技术实现路径
Omi 实现屏幕理解的核心思路是将屏幕内容转化为结构化的文本或向量表征,再交由大语言模型进行推理。从工程实现角度来看,这一过程通常包含三个关键阶段:屏幕捕获、内容提取和语义嵌入。
在屏幕捕获层面,Omi 支持两种常见模式。第一种是定时帧捕获(frame capture),即每隔固定时间间隔(如 1-3 秒)截取屏幕区域并提取视觉信息;第二种是屏幕文本提取(screen text extraction),通过 OCR 或 Accessibility API 直接读取屏幕上的文本元素。后者对计算资源的消耗更低,且更适合需要快速响应用户查询的场景。两种模式可以共存,由上层控制器根据任务类型动态选择。
内容提取后,下一步是将屏幕信息转化为模型可理解的向量表征。Omi 使用 Pinecone 作为向量数据库存储屏幕内容的语义向量,这使得用户在后续对话中可以引用之前的屏幕上下文。例如,当用户询问 “刚才那个表格的第二行数据是多少” 时,系统可以通过向量相似度检索到对应的屏幕记忆,并结合当前上下文生成准确回答。
端侧部署的完整技术栈
Omi 后端采用 Python 构建,运行于 FastAPI 框架之上,支持通过 Docker 或直接运行的方式部署。与纯云端方案不同,Omi 明确支持自托管(self-hosted)模式,开发者可以在本地机器或私有服务器上运行完整的后端服务,从而实现数据不出网的隐私保护。
从服务依赖来看,Omi 后端的核心组件包括以下几个部分。语音转文本(STT)由 Deepgram 提供 API 支持,也可以替换为本地部署的 Whisper.cpp 或其他开源模型;大语言模型推理默认调用 OpenAI API,但文档明确指出可以集成 Ollama 等本地 LLM 方案;缓存与会话管理使用 Redis(推荐 Upstash 托管版本),用于存储实时的对话状态和临时数据;向量存储使用 Pinecone,用于持久化对话记忆和屏幕内容的语义索引;语音活性检测(VAD)使用 Hugging Face 上的模型,判断用户是否在说话。
除了核心服务外,Omi 还集成了若干可选组件以扩展功能。Pusher 用于 Webhook 推送和实时事件通知;Typesense 用于全文搜索;Firebase 用于用户认证和消息推送;Stripe 用于付费能力。这种模块化的设计允许开发者在入门阶段使用最小依赖集,随着产品演进逐步引入更多服务。
开发者入门的关键配置参数
对于希望本地部署 Omi 后端的开发者,以下是必须配置的核心环境变量清单,按功能域分组整理。
在必需服务方面,需要配置 OpenAI API Key 用于语言模型推理,Deepgram API Key 用于实时语音转写,Hugging Face Token 用于语音活性检测模型下载,Redis 主机地址与端口(REDIS_DB_HOST、REDIS_DB_PORT)以及可选的密码(REDIS_DB_PASSWORD),Pinecone API Key 与索引名称用于向量存储。此外,还需要设置 ENCRYPTION_SECRET(至少 32 字节)用于用户数据加密,ADMIN_KEY 用于本地开发环境的临时访问控制。
在认证配置方面,Google OAuth 需要 OAuth 2.0 Client ID 和 Client Secret,并在 Google Cloud Console 中配置 Authorized JavaScript Origins 和 Redirect URIs;Apple OAuth 需要 Services ID(APPLE_CLIENT_ID)、Team ID(APPLE_KEY_ID)、私钥文件内容(APPLE_PRIVATE_KEY),并且需要配备付费 Apple Developer 账户。认证回调地址通常格式为 /v1/auth/callback/google 和 /v1/auth/callback/apple,本地开发时通过 Ngrok 暴露临时域名。
在运行时配置方面,开发者需要启动 Ngrok 隧道将本地服务(默认端口 8000)暴露到公网,格式为 ngrok http --domain=your-domain.ngrok-free.app 8000,然后将生成的公开 URL 配置到 Omi 应用的 .dev.env 文件中的 API_BASE_URL,注意 URL 末尾必须携带斜杠。后端启动命令为 uvicorn main:app --reload --env-file .env --port 8000,其中 --reload 参数支持代码修改后自动重启,--env-file 指定环境变量文件位置。
工程化落地的实践要点
在生产环境中部署 Omi 屏幕理解与对话系统,有几个关键的技术决策需要提前规划。
首先是本地模型与云端服务的权衡。虽然 Omi 默认使用 Deepgram 和 OpenAI 等云服务,但文档明确支持替换为本地模型以满足隐私要求。如果选择本地部署方案,推荐使用 Whisper.cpp 进行语音转写(低延迟版本可在 CPU 上运行),Ollama 承载 7B-13B 参数的对话模型。对于屏幕内容理解,可以在本地运行轻量级的 OCR 服务(如 Tesseract)或直接通过操作系统 Accessibility API 提取文本。
其次是数据安全与加密。Omi 在存储层面使用 ENCRYPTION_SECRET 对用户对话和屏幕记忆进行加密,开发者务必在生产环境中替换默认的测试密钥。同时,由于涉及屏幕内容和麦克风输入,需要在应用层明确告知用户数据收集范围和使用目的,并提供便捷的关闭或删除数据的选项。
第三是延迟与功耗的平衡。屏幕内容实时读取对计算资源的消耗不可忽视,建议根据设备能力调整帧捕获频率。对于桌面端应用,每秒 1-2 帧通常足够满足语义理解需求;对于移动端或嵌入式设备,可以进一步降低到每 3-5 秒一帧,并通过 VAD 触发式的增量更新来补偿。
小结
Omi 为端侧 AI 助手提供了一条清晰的技术路径:通过屏幕内容读取与对话式交互的融合,实现 “看到屏幕、听到对话、给出建议” 的完整交互闭环。其架构设计支持从云端到纯本地的多种部署模式,开发者可以根据隐私要求和硬件条件灵活选择。对于有意深入端侧 AI 交互的团队而言,理解 Omi 的屏幕捕获机制、向量记忆系统和模块化服务架构,是构建同类产品的重要参考。
资料来源:Omi 官方 GitHub 仓库(https://github.com/BasedHardware/omi)及 Omi 后端部署文档(https://docs.omi.me/doc/developer/backend/Backend_Setup)。