feat: load configuration from dotenv
This commit is contained in:
@@ -5,11 +5,33 @@ Chrome 麦克风 → 实时 ASR(可选多模型)→ LLM 客服人设回答
|
||||
## 运行
|
||||
|
||||
```bash
|
||||
source ~/.zshenv # BAILIAN_* 环境变量
|
||||
cp .env.example .env # 按注释填写百炼/火山凭证及地域地址
|
||||
go build -o voicetest . && ./voicetest
|
||||
# 打开 http://localhost:8090 (Chrome,需允许麦克风;仅 localhost/https 可用 getUserMedia)
|
||||
# 程序启动时自动加载当前目录的 .env;系统环境变量优先
|
||||
```
|
||||
|
||||
`.env.example` 已注明 API Key、Workspace ID、复刻音色及火山语音凭证的控制台获取入口;`.env` 已加入 `.gitignore`,不要提交真实密钥。
|
||||
|
||||
## Chrome 在 HTTP 地址授权麦克风
|
||||
|
||||
`http://localhost:8090` 默认可以使用麦克风。通过局域网 IP 或域名访问 HTTP 服务时,Chrome 默认禁止 `getUserMedia`,开发测试可这样放行:
|
||||
|
||||
1. 打开 `chrome://flags/#unsafely-treat-insecure-origin-as-secure`。
|
||||
2. 将 **Insecure origins treated as secure** 设置为 **Enabled**。
|
||||
3. 填入完整来源,例如 `http://192.168.1.10:8090`,不能省略协议或端口。
|
||||
4. 点击 **Relaunch** 重启 Chrome。
|
||||
5. 重新打开页面,点击地址栏左侧站点图标 → **网站设置** → **麦克风** → **允许**。
|
||||
|
||||
也可使用独立测试配置启动 Chrome:
|
||||
|
||||
```bash
|
||||
google-chrome \
|
||||
--user-data-dir=/tmp/voice-test-chrome \
|
||||
--unsafely-treat-insecure-origin-as-secure=http://192.168.1.10:8090
|
||||
```
|
||||
|
||||
该选项仅用于受信任的开发网络;正式部署应使用 HTTPS。也可以通过 `ssh -L 8090:localhost:8090 user@server` 转发后访问 `http://localhost:8090`,无需放宽 Chrome 安全策略。
|
||||
|
||||
## 可选 ASR 模型
|
||||
|
||||
| 模型 | 厂商 | 已验证 |
|
||||
@@ -34,12 +56,14 @@ export VOLC_ASR_RESOURCE_ID=volc.bigasr.sauc.duration # 2.0 用 volc.seedasr.sa
|
||||
|
||||
## 环境变量
|
||||
|
||||
完整模板与参数获取方式见 [`.env.example`](.env.example)。
|
||||
|
||||
| 变量 | 默认 | 说明 |
|
||||
|---|---|---|
|
||||
| `BAILIAN_BASE_URL` / `BAILIAN_API_KEY` / `BAILIAN_WSS_BASE_URL` | - | 阿里百炼(zshenv 已有) |
|
||||
| `BAILIAN_BASE_URL` / `BAILIAN_API_KEY` / `BAILIAN_WSS_BASE_URL` | - | 阿里百炼地址与 API Key |
|
||||
| `BAILIAN_LLM_MODEL` | `qwen3.8-flash` | 客服回答模型(OpenAI 兼容流式) |
|
||||
| `BAILIAN_TTS_MODEL` | `cosyvoice-v3.5-plus` | 语音合成模型 |
|
||||
| `BAILIAN_TTS_VOICE` | zshenv 音色 | 默认音色或百炼复刻/设计生成的 `voice_id` |
|
||||
| `BAILIAN_TTS_VOICE` | 空 | 默认音色或百炼复刻/设计生成的 `voice_id` |
|
||||
| `BAILIAN_TTS_INSTRUCTION` | 空 | 默认声音表达指令,网页可覆盖 |
|
||||
| `BAILIAN_VOICE_API_URL` | DashScope 声音管理接口 | 查询当前账号的复刻/设计音色下拉列表 |
|
||||
| `PORT` | `:8090` | 监听地址 |
|
||||
@@ -72,11 +96,12 @@ ASR 尾静音实测:语音结束→final 判定 ≈ 0.5s(qwen 0.6s),`max
|
||||
- `llm.go` — OpenAI 兼容流式对话 + 客服 system prompt
|
||||
- `tts.go` — CosyVoice 流式合成(PCM16/16k)
|
||||
- `voices.go` — TTS 模型、预置音色与百炼复刻音色列表
|
||||
- `.env.example` — 环境变量模板及各参数获取方式
|
||||
- `web/index.html` — 测试页(AudioWorklet 采集 PCM16/16k、WAV 样本录制、音量条、双栏转录)
|
||||
|
||||
## 已知简化
|
||||
|
||||
- 无打断(barge-in):TTS 播报期间 ASR 仍在识别,建议戴耳机测试避免回声。
|
||||
- 打断依赖 ASR 产生 partial 事件;外放回声可能误触发,建议戴耳机测试。
|
||||
- 会话历史仅存内存、每连接独立;刷新页面即重置。
|
||||
|
||||
## 验证清单
|
||||
@@ -86,7 +111,7 @@ ASR 尾静音实测:语音结束→final 判定 ≈ 0.5s(qwen 0.6s),`max
|
||||
- [x] 百炼 ASR 三模型协议全通:run-task → task-started → 音频流 → finish-task → task-finished
|
||||
- [x] 识别正确性:同一句“你好,我想查询一下我的订单什么时候发货。”三模型 100% 准确
|
||||
- [x] LLM `qwen3.8-flash` 流式回答,客服人设生效(口语化、无 markdown、主动要订单号)
|
||||
- [x] TTS `cosyvoice-v3.5-plus` + zshenv 复刻音色:PCM16/16k 音频正常返回(cosyvoice-v2 会报 418,勿用)
|
||||
- [x] TTS `cosyvoice-v3.5-plus` + 百炼复刻音色:PCM16/16k 音频正常返回(cosyvoice-v2 会报 418,勿用)
|
||||
- [x] E2E 指标见上表;多轮对话 finals=2 replies=2 无错误,ASR 上下文注入生效
|
||||
- [x] `fun-asr-flash` 不支持 continue-task → 已加模型守卫自动跳过
|
||||
- [x] 火山 sauc 二进制帧协议:新版 X-Api-Key 鉴权、句级 utterance definite 判定 final、负包(flags=2/3)结束,真实凭证 E2E 验证通过(含多轮)
|
||||
@@ -94,8 +119,7 @@ ASR 尾静音实测:语音结束→final 判定 ≈ 0.5s(qwen 0.6s),`max
|
||||
### 👤 需人工在 Chrome 验证
|
||||
|
||||
```bash
|
||||
source ~/.zshenv
|
||||
cd ~/Workspace/voice_test && go build -o voicetest . && ./voicetest
|
||||
go build -o voicetest . && ./voicetest
|
||||
```
|
||||
|
||||
1. [ ] Chrome 打开 `http://localhost:8090`,ASR/TTS 模型及预置/复刻音色均显示为下拉框
|
||||
|
||||
Reference in New Issue
Block a user