Skip to content

Repository files navigation

Lingow

Coverage GitHub Actions Workflow Status Github repo GitHub go.mod Go version GitHub stars

Lingow 是面向 Web、移动端和硬件设备的 AI 语音助手与面对面同传系统。当前 dev 分支以 assistantinterpretation 两种后端权威模式复用同一条 WebRTC 会话:客户端只负责采集、 播放和交互,业务会话由 API 控制面管理,实时音频与运行状态由 realtime-audio 媒体面管理。

核心能力

  • 助手模式:客户端唤醒词检测、自然语言语义命令、助手问答与模式切换。
  • 同传模式:双语配置、自动语言识别、流式 ASR、翻译、句末 TTS 和抢话打断。
  • 实时链路:WebRTC 音频、可靠有序 DataChannel、运行状态与模式快照、弱网重连边界。
  • 记录与归属:Final Turn 持久化、临时说话人、后续归属修正和历史查询。
  • 账户与设备:匿名/注册账户、短期访问令牌、Ed25519 设备配对与受限设备会话。
  • 可选投递:用量事件、Email/企业微信消息,以及长句企业微信字幕与失败 TTS 回放。
  • 可观测性:结构化日志、模式和延迟指标,以及固定节点集合下的会话哈希网关示例。

长句投递和短语字幕默认关闭。启用长句投递后,去除首尾空白的原文超过 50 个 Unicode 字符, 或原声音频达到 20 秒时,译文跳过初始 TTS 并投递到企业微信;目标不可用或最终投递失败时回放 TTS。

架构

模块 职责 当前形态
apps/web 会话、语言设置、WebRTC、字幕、助手回复和 TTS 交互 Next.js 16 / React 19
apps/mobile 移动端控制面状态、模式命令和重连核心 TypeScript 库,尚未绑定 UI 与 WebRTC
services/api 账户、会话、语言配置、记录、用量、投递和设备身份 Go 控制面服务,默认 :8080
services/realtime-audio WebRTC、VAD、ASR、翻译、TTS、命令与运行状态机 Go 媒体面服务,默认 :8090
packages/contracts REST、实时事件、错误码和跨端类型 OpenAPI / AsyncAPI / Go / TypeScript
sdks/device 设备鉴权、会话、模式、唤醒事件和重连参考实现 Go 控制核心,媒体与 KWS 由平台适配
infra PostgreSQL、Redis/Valkey 和可选 realtime 网关 Docker Compose / Nginx
Web / Mobile / Device
  -> services/api: account / session / language config / realtime ticket
  -> services/realtime-audio: WebRTC signaling / audio / control events
  -> VAD -> ASR -> translation -> TTS or message delivery
  -> services/api: Final Turn / usage / history / asynchronous messages

跨模块数据必须先在 packages/contracts 定义。services/api 拥有长期业务状态, services/realtime-audio 是实时连接、播放和模式状态的事实来源。

当前边界

  • Web 是当前可运行的主要联调入口;本地 KWS 使用 sherpa-onnx,固定唤醒词为“小灵小灵”。
  • Mobile 当前只有可编译、可测试的控制面核心,不包含 UI、PeerConnection 或原生 KWS。
  • Device SDK 提供控制核心和接口边界,不包含具体芯片的音频 HAL、WebRTC 或 KWS 模型。
  • 默认 mock Provider 可离线验证普通音频编排,但不能验证真实语音命令;真实命令需要 ASR 和 Qwen 语义解释器配置。
  • REALTIME_TTS_DOWNLINK=pcm 可向浏览器发送 PCM;Opus 下行编码仍是待完成边界。
  • 当前不提供管理后台、订单、支付、发票、多人会议同传或硬件制造能力。

本地启动

建议准备 Go 1.26、Node.js 22、npm,以及 PostgreSQL 16 和 Redis/Valkey 7。需要容器化依赖时安装 Docker Desktop。

  1. 复制根配置并填写本地凭证:
cp .env.example .env

完整会话联调至少需要设置:

LINGOW_SESSION_RUNTIME=enabled
REALTIME_TICKET_SECRET=<至少 32 字节,API 与 realtime 共用>
LINGOW_COMMAND_SYSTEM_TOKEN=<至少 32 字节,API 与 realtime 共用>
COMMAND_LLM_API_KEY=<Qwen API key>
COMMAND_LLM_BASE_URL=<Qwen compatible API base URL>

真实麦克风语义命令还需要配置真实 ASR;ASR_PROVIDER=mock 只产生固定离线文本。全部变量和可选 delivery、TTS、数据库配置见 .env.example

  1. Windows 可从仓库根目录启动 API 与 realtime-audio:
.\start-local.ps1 -UseDocker

不传 -UseDocker 时脚本优先使用 .env 中可访问的本地 PostgreSQL 和 Redis,并在不可访问时询问 是否启动 Docker Compose。也可运行 start-local.bat,或通过 -Service api|realtime 单独启动服务。

  1. 启动 Web:
cd apps/web
cp .env.example .env.local
npm install
npm run dev

打开 http://localhost:3000。Web 默认以助手模式创建新会话;设置 NEXT_PUBLIC_LINGOW_INITIAL_MODE=interpretation 可回退为同传入口。

非 Windows 环境可以手动启动依赖和两个 Go 服务。go run 不会自动读取根 .env,请先把变量导入 当前 shell,再在两个终端分别运行服务:

set -a
. ./.env
set +a

docker compose -f infra/docker-compose.yml up -d

API 终端:

(cd services/api && go run .)

Realtime 终端:

(cd services/realtime-audio && go run .)

默认端口:

服务 地址
Web http://localhost:3000
API http://localhost:8080
Realtime Audio http://localhost:8090
PostgreSQL localhost:5432
Redis/Valkey localhost:6379

验证

Go 工作区:

go test ./packages/contracts/... ./services/api/... ./services/realtime-audio/... ./sdks/device/...

Web:

cd apps/web
npm run lint
npm run typecheck
npm test
npm run build

Mobile 控制核心:

cd apps/mobile
npm install
npm test
npm run typecheck
npm run build

文档

About

No description, website, or topics provided.

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages