poc-realtime-ai-assistant
基于 OpenAI Realtime API 的端到端语音 AI 助手,通过 WebSocket 实
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 OpenAI Realtime API 的端到端语音 AI 助手,通过 WebSocket 实
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:深夜写代码,鼠标悬停在某个陌生的 API 参数上犹豫不决——这时无需切换窗口,你的 AI 助手已经通过麦克风听到了你的困惑,用语音直接给出解释。这种「动动嘴就能让 AI 替你干活」的体验,正是 disler/poc-realtime-ai-assistant 正在探索的方向。
该项目由独立开发者 Dan Disler 构建,核心是一个名为 Ada 的个人 AI 助手,基于 OpenAI Realtime API 实现实时语音对话加工具调用能力。与传统 ChatGPT 对话不同,Ada 实现了端到端的语音交互:用户说话、实时音频流、OpenAI 处理、AI 回复音频流、播放给用户,整个过程延迟更低、交互更自然。
图1:Ada 助手运行界面
2024 年中,OpenAI 正式开放了 Realtime API,这是一个支持 WebSocket 长连接的多模态接口。与标准的 Chat Completions API 相比,它最大的区别在于支持音频流式传输:客户端可以一边录麦克风一边把音频 chunk 发送给服务器,服务器也可以边生成边返回语音响应,无需等待完整文本生成完毕。
这一能力对 AI 助手赛道意义重大——它让「AI 实时语音助手」从需要复杂工程(录音、ASR、LLM、TTS、播放)简化为一个 WebSocket 连接。Dan Disler 的项目正是这一能力早期探索的产物,代码注释中自称 v0.3 poc(概念验证),但已包含了许多核心想法。
项目采用 Python 3.12 加 asyncio 全异步架构,核心技术栈如下:
| 组件 | 技术选型 | 作用 |
|---|---|---|
| 实时通信 | websockets >= 13.1 | 维持与 OpenAI 的长连接 |
| 麦克风采集 | pyaudio + numpy | 音频录制与实时处理 |
| 音频播放 | numpy | AI 响应音频回放 |
| LLM 接口 | openai >= 1.51.0 | 结构化输出 + Chat Completions |
| 数据验证 | pydantic >= 2.9.2 | 函数调用参数校验 |
| 爬虫 | firecrawl-py | 网页内容抓取供 AI 参考 |
main.py 中的 RealtimeAPI 类是核心引擎。它使用 websockets.connect() 建立到 wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01 的长连接,通过 asyncio 任务同时处理:麦克风音频采集、音频播放、WebSocket 消息循环。
模块结构清晰:
图2:AI工程师与AI助手的协作规划
Ada 的真正能力在于它的工具集。TOOLS.md 详细列出了 20 加多个工具函数,覆盖:
文件操作:创建、更新、删除文件,读取文件到记忆,剪贴板内容保存到文件。
浏览器控制:通过 open_browser 函数,根据用户描述自动打开最合适的 URL,整合了 personalization.json 中预配置的网站列表。
数据库查询:支持 SQLite、PostgreSQL、DuckDB 三种 SQL 方言,可以加载表定义到记忆、用自然语言生成 SQL、执行查询并保存结果为 CSV、JSONL、JSON。
Python 执行:通过 runnable_code_check 检查代码可运行性,通过 run_python 执行 scratch_pad 中的 Python 脚本。
记忆管理:记忆以 JSON 文件持久化(active_memory.json),支持增删改查和 XML 导出,供 AI 在 prompt 中读取上下文。
信息抓取:firecrawl-py 驱动网页抓取,配合剪贴板自动获取 URL 并保存内容。
数据可视化:调用 Matplotlib 生成图表,通过 create_python_chart 读取 CSV 并生成图表代码。
这些工具通过 OpenAI 的函数调用(Function Calling)机制注册到 Realtime API,AI 可以在对话过程中自主决定调用哪些工具。
项目不提供 Web UI,完全以 CLI 方式运行:
# 安装
cp .env.sample .env # 填入 OPENAI_API_KEY
uv sync
# 交互模式(语音)
uv run main
# 批处理模式(文本)
uv run main --prompts "Hello|What time is it?"
personalization.json 是核心配置文件,可以自定义 AI 名称、主人名、默认网站列表、SQL 方言、系统指令后缀等。项目默认的 AI 名称是「Ada」(致敬 Ada Lovelace)。
图3:面向工程师的 AI 助手完整架构
亮点:
局限:
从 716 stars 和 214 forks 的数据来看,这个项目已经引起了开发者社区的广泛关注。它代表了一个重要趋势:AI 助手正从「对话窗口」向「命令行伙伴」演进。
Dan Disler 在 README 中引用了 YouTube 视频,展示用 Ada 进行 SQL 编程、AI 工程讨论、浏览器自动化等场景。这种「语音驱动加工具调用」的范式,与 Anthropic 的 Computer Use、OpenAI 的 Agent SDK 方向一致,但实现更轻量、更专注个人使用场景。
AI_DOCS 目录包含 3 个 Markdown 文档(event_docs.md、realtime_api_docs.md、js_implementation.md),详细记录了 Realtime API 的事件类型和 JS 实现参考,为后续开发者提供了宝贵的文档资源。
这个项目的增长曲线值得关注——作为 OpenAI Realtime API 的早期探索,它为「实时语音 AI 助手」这一新兴赛道提供了可参考的实现模板。对于想构建类似能力的开发者,它是一个值得研究的学习样本。