echoOLlama
用本地 Ollama 模型实现类 OpenAI Realtime API 的实时语音对话,数据完全私有,支持 WebSocket 流式交互
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用本地 Ollama 模型实现类 OpenAI Realtime API 的实时语音对话,数据完全私有,支持 WebSocket 流式交互
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景: 深夜,你对着电脑随口说出一句英文想测试 AI 助手的翻译效果,屏幕上的终端里,Ollama 驱动的本地 Llama 模型正在飞速运转——而你的麦克风捕捉到了你的声音,Whisper 实时转写,LLM 推理生成回答,TTS 引擎直接把文字"说"出来。全程无需联网、无需注册 API Key、所有数据留在本地。
这就是 echoOLlama 正在构建的体验。
2024 年中,OpenAI 推出了 Realtime API,让开发者可以基于 GPT-4o 实现低延迟的语音对话功能。然而这一能力被绑定在 OpenAI 的云服务上——你需要 API Key、需要联网、需要把语音数据传到第三方服务器。对于企业内网、隐私敏感场景或者想用本地开源模型的人来说,这道墙无法逾越。
echoOLlama 的作者(GitHub 用户 theboringhumane)决定打破这道墙。项目名中的"echo"既呼应了回声(语音往返)的概念,也隐含了对 OpenAI 的"致敬"——README 直接写明这是对 OpenAI Realtime API 的逆向工程。目标是:用本地 Ollama 模型复现同样的实时语音交互体验,数据完全私有,运行在自家 GPU 上。
echoOLlama 的系统架构清晰分为四层:
接入层(WebSocket):核心通信基于 WebSocket 协议,位于 /realtime 端点。项目参考 OpenAI 的协议设计,支持子协议协商,客户端连接时传入期望的模型名称(query 参数 ?model=xxx)。WebSocket 层由 app/websocket/ 模块处理,包含连接管理(connection.py)、消息处理器(handlers/)、Redis 会话存储(redis.py)等组件。
业务逻辑层(Services):
llm.py:调用 Ollama API 执行 LLM 推理,支持流式响应(streaming)。配置中 OLLAMA_MODEL=llama2 作为默认模型,可切换为任何 Ollama 支持的模型(Llama 3、Mistral、Qwen 等)。audio.py:语音处理服务。接入 faster-whisper 实现语音转文字(STT),接入 openedai-speech(TTS)实现文字转语音,形成完整的语音 I/O 闭环。chat_state.py:对话状态管理,跟踪多轮对话上下文。数据持久层(PostgreSQL + Redis):PostgreSQL 16 存储结构化数据(用户配置、对话历史),Redis 5.2 管理会话缓存和实时状态。docker-compose 中配置了 healthcheck,确保服务可用性。
观测层(Prometheus + Grafana):集成 Prometheus 指标收集和 Grafana 可视化仪表板,提供 API 延迟、请求量、模型响应时间等关键指标的实时监控。

echoOLlama 并不是简单调用 Ollama——它在 Ollama 之上构建了一层 OpenAI API 兼容接口。docker-compose 配置中同时设置了 OPENAI_API_KEY 和 OLLAMA_API_BASE_URL,说明项目支持两种后端切换。这意味着:如果你有 OpenAI Key,系统走 OpenAI;如果你想用本地模型,换成 Ollama 地址即可。对开发者而言,切换成本极低。
docker-compose.yml 定义了 7 个服务(api、redis、ollama、prometheus、grafana、postgres、openedai-speech),且 api 服务和 ollama 服务均配置了 NVIDIA GPU 设备预留:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
这意味着在安装 nvidia-container-toolkit 的 Linux 机器上,docker-compose up -d 即可启动完整的语音 AI 流水线,无需手动配置任何依赖。
项目使用 Python 的 websockets 库(v13.1)实现全双工通信。与传统 HTTP 请求-响应模式不同,WebSocket 允许服务器在推理过程中持续推送 token,实现"打字机效果"(streaming response)。这对语音助手场景至关重要——用户需要实时听到 AI 的回答,而不是等待完整响应。
GPU 是硬性要求。Ollama 需要 GPU 加速才能提供可接受的推理延迟,docker-compose 中明确配置了 nvidia 设备。CPU 部署在技术上是可能的,但响应延迟会严重影响语音交互体验。推荐配置:NVIDIA GPU(8GB+ 显存)+ 16GB RAM + Ubuntu 20.04+。
git clone https://github.com/theboringhumane/echoOLlama.git
cd echoOLlama
cp .env.example .env
make migrate # 创建数据库 + 应用迁移
docker-compose up -d # 启动所有服务
uvicorn app.main:app --reload # 启动 API
服务启动后,访问 http://localhost:9009/api/docs 查看 FastAPI 交互式文档,通过 WebSocket 客户端连接 ws://localhost:9009/realtime?model=llama2 开始实时对话。
README 中明确标注项目处于"Active Development"状态。功能状态看板显示:
对于一个 126 stars 的个人项目来说,这种坦诚是合理的,但也意味着生产环境使用存在不确定性。
README 中引用的两张项目 banner 图片托管在 GitHub user-attachments 服务上,经实测均返回 403 Forbidden,图片无法展示。这不影响功能,但影响文档可读性。
虽然 LLM 推理完全本地化,但语音识别(Whisper)和语音合成(TTS)部分在 docker-compose 中仍然指向 OpenAI 服务(TTS_ENGINE=openai)。本地化语音 I/O 的集成工作尚未完成。
echoOLlama 代表了一个重要趋势:将 AI 能力从云端下沉到本地。随着 Ollama、llama.cpp 等工具的成熟,本地运行 7B-70B 参数模型变得越来越容易。echoOLlama 在此基础上叠加了实时语音交互层,降低了"私有语音助手"的构建门槛。
对于企业用户,这意味着数据合规无忧;对于开发者,这意味着可以自由定制模型行为、Prompt 策略和交互逻辑;对于 AI 爱好者,这意味着零成本实验各种开源模型。
项目目前 126 stars,活跃开发中,值得关注其 STT/TTS 本地化集成的进展。
分析基于 2026-08-01 GitHub 仓库状态,仓库默认分支为 openai