你有一个 AI 智能体在某个地方运行着——也许是本地 LLM,也许是带记忆和工具的智能体,也许只是一个 OpenAI 的封装。你跟它交流的方式是打字。在浏览器里。像个原始人一样。
如果你能戴着 AirPods 走在路上,直接说"Siri,跟我的智能体聊聊"呢?手机锁屏,解放双手,完整对话?
事实证明,这只需要大约 50 行 JavaScript 和 45 分钟的时间。
架构
五个部分。一个是 Siri Shortcut。一个是 50 行代码。其余的你可能已经有了。
- Siri Shortcut — iPhone 上的语音转文字
- Voice API — 把所有东西粘在一起的小型 Node.js 服务器
- 你的 AI 智能体 — 任何 OpenAI 兼容的 chat completions 端点
- Edge TTS — 免费文字转语音(324 种声音,零成本)
- Cloudflare Tunnel — 为你的服务器提供免费 HTTPS 暴露
1. Siri 快捷指令
在你的 iPhone 上创建一个新的快捷指令,包含三个操作:
- Dictate Text — Siri 监听并转录
- Get Contents of URL — 将文本 POST 到你的 voice API
- Play Sound — 播放 MP3 响应
配置 URL 操作:
- 方法: POST
- Headers:
Content-Type: application/jsonAuthorization: Bearer your-secret-token
- Body (JSON):
text:Dictated Text(步骤 1 的魔法变量)
随便起个名字。"助手"、"Jarvis"、"电脑"——然后用 "Siri,[名字]" 来触发它。
看起来是这样的:

锁屏状态下可用。戴着 AirPods 可用。遛狗的时候也可用。
2. Voice API
这就是整个服务器:
const express = require('express');const { execSync } = require('child_process');const fs = require('fs');const app = express();app.use(express.json());const AUTH_TOKEN = process.env.AUTH_TOKEN || 'your-secret-token';const AI_URL = process.env.AI_URL || 'https://api.openai.com/v1/chat/completions';const AI_TOKEN = process.env.AI_TOKEN || 'your-ai-api-key';const AI_MODEL = process.env.AI_MODEL || 'gpt-4o';const TTS_VOICE = process.env.TTS_VOICE || 'en-US-AndrewNeural';app.post('/voice', async (req, res) => {try {const token = (req.headers['authorization'] || '').replace('Bearer ', '').trim();if (token !== AUTH_TOKEN)return res.status(401).json({ error: 'unauthorized' });const text = req.body?.text;if (!text)return res.status(400).json({ error: 'no text' });// 1. Ask your AI agentconst r = await fetch(AI_URL, {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + AI_TOKEN,},body: JSON.stringify({model: AI_MODEL,max_tokens: 300,user: 'voice-user', // persistent session across callsmessages: [{role: 'system',content: 'User is speaking via voice. Keep responses '+ 'SHORT (2-3 sentences). Spoken aloud. '+ 'No markdown, bullets, code, or URLs.'},{ role: 'user', content: text }],}),});const data = await r.json();let reply = data.choices?.[0]?.message?.content || 'No response.';// 2. Convert to speech (free!)const tmp = '/tmp/voice-' + Date.now() + '.mp3';execSync(`edge-tts --voice ${TTS_VOICE} ` +`--text '${reply.replace(/'/g, "'\\''")}' ` +`--write-media ${tmp} 2>/dev/null`,{ timeout: 15000 });const audio = fs.readFileSync(tmp);fs.unlinkSync(tmp);res.set('Content-Type', 'audio/mpeg');res.send(audio);} catch (err) {if (!res.headersSent)res.status(500).json({ error: err.message });}});app.get('/health', (req, res) => res.json({ ok: true }));app.listen(3456, () => console.log('Voice API on :3456'));
安装依赖并运行:
npm init -ynpm install expresspip install edge-ttsnode server.js
就这样。API 接收文本,询问你的 AI 智能体,将回复转换为语音,然后发回一个 MP3。
3. 你的 AI 智能体
Voice API 调用任何 OpenAI 兼容的 /v1/chat/completions 端点。这意味着它可以配合以下使用:
- OpenAI 直连(
https://api.openai.com/v1/chat/completions) - 本地 LLM 通过 Ollama、LM Studio、vLLM 等(
http://localhost:11434/v1/chat/completions) - AI 智能体 如 OpenClaw、LangServe,或任何暴露 OpenAI 格式的服务
- Anthropic 通过代理或兼容封装
如果你的 AI 智能体有记忆、工具和持久会话——你现在拥有了一个连接到完整智能体的语音接口,而不仅仅是一个聊天机器人。请求体中的 user 字段直接提供会话持久性——你的智能体会记住之前的语音对话。
设置环境变量:
export AI_URL="http://localhost:11434/v1/chat/completions" # ollama exampleexport AI_TOKEN="not-needed-for-local"export AI_MODEL="llama3"
system prompt 的技巧
让这一切运作良好的关键是 system prompt:
User is speaking via voice. Keep responses SHORT (2-3 sentences).Spoken aloud. No markdown, bullets, code, or URLs.
没有这个,你的 AI 智能体会用格式化文本、代码块、项目符号来回复——这些通过 TTS 播放出来简直难以忍受。这个 prompt 强制使用对话模式,同时保持所有能力不变。
4. Edge TTS — 免费的声音
Edge TTS 是微软从 Edge 浏览器的"大声朗读"功能中提取的文字转语音引擎。免费,有 324 种声音,质量确实不错。
pip install edge-tts# list all voicesedge-tts --list-voices# generate speechedge-tts --voice en-US-AndrewNeural \--text "Hello from your AI assistant" \--write-media output.mp3
一些值得尝试的声音:
en-US-AndrewNeural— 自然、对话式(我的默认选择)en-US-JennyNeural— 清晰、专业en-GB-SoniaNeural— 英式、温暖zh-CN-XiaoxiaoNeural— 中文普通话de-DE-ConradNeural— 德语
免费。快速。不需要 API 密钥。没有配额限制。相比 OpenAI TTS 每百万字符 15 美元的价格,对于个人项目来说这毫无疑问是最佳选择。
5. Cloudflare Tunnel
Siri Shortcuts 需要 HTTPS。如果你的服务器没有,Cloudflare Quick Tunnels 一条命令就能给你一个公共 URL:
# installcurl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 \-o /usr/local/bin/cloudflaredchmod +x /usr/local/bin/cloudflared# runcloudflared tunnel --url http://localhost:3456
你会得到一个类似 https://random-words.trycloudflare.com 的 URL。把它放到你的 Siri Shortcut 中,设为 https://random-words.trycloudflare.com/voice。
Quick tunnels 是免费但临时的——重启后 URL 会变。要永久使用,请用你自己的域名配置 named tunnel。
总成本
除了 AI 本身,一切都是免费的:
- Siri Shortcut — 免费
- Voice API — 免费(Node.js)
- Edge TTS — 免费(324 种声音,无需 API 密钥)
- Cloudflare Tunnel — 免费
- 你的 AI 智能体 — 视情况而定(本地 LLM = 免费,OpenAI = 仅 token 费用)
没有 TTS 费用。没有语音识别费用。Siri 负责转录,Edge TTS 负责语音合成。你只需要为 chat completion tokens 付费——如果需要的话。
延迟
典型的端到端延迟:从说完话到听到回复 3-5 秒。
- Siri 转录:~500ms
- 网络到服务器:~200ms
- AI 响应:~1-2s(因模型而异)
- Edge TTS 生成:~500ms
- 网络返回 + 音频开始:~200ms
快到足以感觉像在对话。慢到不会互相打断。这大概刚刚好。
OpenClaw 快速上手
如果你在运行 OpenClaw,这里是一键复制的配置。OpenClaw 在你的网关上暴露一个 OpenAI 兼容的端点,所以 voice API 直接跟你的智能体通信——拥有完整的记忆、工具和会话上下文。
1. 启用 chat completions 端点:
openclaw config patch '{"http": {"endpoints": {"chatCompletions": { "enabled": true }}}}'
2. 获取你的 gateway token:
cat ~/.openclaw/gateway.json | jq -r '.auth.bearerTokens[0]'
3. 设置环境变量:
export AI_URL="http://127.0.0.1:18789/v1/chat/completions"export AI_TOKEN="your-gateway-bearer-token"export AI_MODEL="openclaw:main"export AUTH_TOKEN="pick-a-secret-for-siri"export TTS_VOICE="en-US-AndrewNeural"
4. 运行语音服务器 + tunnel:
node server.js &cloudflared tunnel --url http://localhost:3456
5. 创建 Siri Shortcut,填入 tunnel URL + 你的 auth token。
搞定了。你现在可以通过 AirPods 和你完整的 OpenClaw 智能体对话了——同一个处理你的消息、邮件、文件和工具的智能体。不是一个功能缩水的语音封装。
小技巧:操作按钮
如果你有 iPhone 15 Pro 或更新的机型,完全跳过语音激活。把你的操作按钮映射到 Siri Shortcut:
设置 → 操作按钮 → 快捷指令 → 选择你的语音快捷指令
按一下。说话。完成。不需要"Siri,..."前缀。这是触发它的最快方式。
进一步优化
如果你想更进一步,这里有一些升级方向:
- 流式 TTS — 将 AI 输出分块,增量生成 TTS,将感知延迟减半
- Named tunnel + 自定义域名 — 让你的 Siri Shortcut URL 不会在重启时失效
- 多语言声音 — 检测回复中的语言,自动切换 TTS 声音(Edge TTS 支持 40+ 种语言)
- 无需 Siri 的唤醒词 — 在 Raspberry Pi 上运行唤醒词检测器,实现持续监听
总结
"Siri,助手"→ iPhone 转录语音→ POST 到你的服务器→ 服务器询问你的 AI 智能体→ 智能体回复(2-3 句话)→ Edge TTS 转换为 MP3→ MP3 通过 AirPods 播放← 总共 3-5 秒
50 行 JavaScript。免费 TTS。兼容任何 AI 后端。解放双手,手机锁屏,AirPods 戴上。
有时候最好的 hack 就是最简单的那种。
Stay Updated
Get notified about new posts on automation, productivity tips, indie hacking, and web3.
No spam, ever. Unsubscribe anytime.



