Merge pull request 'fix: 修复 deploy 工作流缺少 Node.js 导致 checkout 失败的问题' #72

Merged
huanghaosheng merged 61 commits from develop into main 2026-06-14 14:37:27 +08:00
No description provided.
huanghaosheng added 61 commits 2026-06-14 14:28:48 +08:00
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/49
- 新增 MiMoService 实现 stt.Service 接口,通过 HTTP POST 调用 OpenAI 兼容的 /chat/completions 接口
- 自动将原始 PCM 数据封装为 WAV 格式(MiMo 仅支持 mp3/wav)
- 语言代码映射:zh-CN→zh、en-US→en、其他→auto
- main.go 添加 provider 选择逻辑(mimo/xiaomi → MiMo,其他 → Deepgram)
- 更新 config.yaml 使用正确的 model 名称 mimo-v2.5-asr
- 添加完整单元测试
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/50
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/51
config.yaml 中 endpoint 已包含 /chat/completions,而 mimo.go 会自动拼接该路径,
导致实际请求地址变为 .../chat/completions/chat/completions。

- config.yaml: endpoint 改为 base URL https://api.xiaomimimo.com/v1
- .env.example: STT endpoint 示例更新为 MiMo 地址
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/52
MiMo API 使用标准 Bearer Token 认证,而非自定义 api-key 头。
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/53
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/54
- 修复心跳 Bug:应用层 ping 不更新 lastPong,60 秒后连接会被错误断开
- 03-接口文档:audio/mpeg→audio/mp3、STTConfig/TTSConfig 补充 Model 字段、
  APP_ENV 环境变量名修正、配置搜索路径补充、.env 加载说明、Vite proxy 说明修正
- 02-系统架构:补充 ConfigPanel/Toast 组件、Model Router/Rate Limiter 标注规划中、
  补充 Gin 框架、MVP 存储改为 Memory、AI 服务 provider 更新、Orchestrator 伪代码对齐
- 04-技术选型:新增 AI 服务栈选型章节(STT/LLM/TTS)、PostgreSQL 标注规划中
- 06-语音交互:VAD 参数名修正、STT 改为一次性识别描述、音频编码格式补充
- 07-视觉理解:关键帧检测代码改为 TypeScript、分辨率修正、阈值逻辑统一
- 08-成本控制:变量名修正、未实现功能标注规划中、对话历史裁剪策略补充
- CLAUDE.md:同步更新技术栈、模块结构、存储策略描述
- .gitignore 添加 .env,防止密钥泄露
- 删除误提交的 backend/.env
- TTS 模型名修正为 mimo-v2.5-tts
- 功能创意.md 移至 docs/10-功能创意.md
- 项目简介与三层架构图
- 技术栈、项目结构树
- 快速开始指南(前端/后端启动、配置说明)
- WebSocket 协议概览与文档索引
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/55
Reviewed-by: cfy777 <3087823110@qq.com>
实现基于 Xiaomi MiMo TTS API 的语音合成 provider,使用冰糖音色。
- 新增 MiMoService 实现 tts.Service 接口
- 使用 chat/completions 格式,与 MiMo STT 保持一致
- 在 main.go 添加 TTS provider 切换逻辑(mimo/xiaomi)
- 配置文件默认音色设为冰糖
- 包含完整测试覆盖(9 个测试用例)
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/56
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/57
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/58
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/59
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/60
- 版本号支持 -ldflags 构建时注入
- Session TTL/maxHistory 从配置读取
- 优雅关闭超时从配置读取
- AI 服务构造函数传入 HTTP Client 超时参数
- 心跳间隔和超时从 config.Server 读取
- ServerVersion 从 config.App.Version 读取
- CheckOrigin 通过 config.Server.AllowedOrigins 控制
- GetHistory limit 从 config.Session.MaxHistory 读取
- Deepgram/MiMo STT 超时从 config 传入
- 去除 model/endpoint 的 fallback 默认值,由 config 层保证
- 去除 model/endpoint 的 fallback 默认值
- HTTP Client 超时从 config 传入
- 去除 model/voice/endpoint 的 fallback 默认值
- HTTP Client 超时从 config 传入
- New() 改为接收 *config.Config 参数
- OutputFmt/SampleRate 从 config.AI.TTS 读取
- TTSPlayer 新增 stopCurrentAudio() 方法,play() 开始前先停止旧音频
- onSpeechEnd 发送新 query 前停止上一轮 TTS 播放
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/61
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/62
- 后端 WsQuery 添加 text 字段,支持文本输入模式
- Pipeline 支持文本查询时跳过 STT 直接使用输入文本
- 前端 ChatPanel 添加文字输入框,连接状态下可用
- useVisionSession 添加 sendTextMessage 方法
- 更新接口文档,添加文本输入模式说明
- 关闭麦克风时同时停止 VAD
- 打开麦克风时重新初始化 VAD
- websocket.ts: 移除硬编码 localhost:8080,基于 window.location 动态构建 WS URL
- vite.config.ts: 添加 /ws 和 /api 的 server.proxy 配置
- 同步更新 02-系统架构.md 和 03-接口文档.md 中的开发环境说明
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/63
- 移除 contentPart.Text 的 omitempty 标签
- 确保 text 字段始终存在于 JSON 请求中
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/64
- 修改 startSession 逻辑,摄像头和麦克风为可选
- 连接成功后始终显示聊天输入框
- 更新 UI 提示文字,引导用户打字对话
- 重构 ChatPanel 逻辑,连接后始终显示输入框
- 将欢迎消息移入消息容器内
- 确保输入框在任何状态下都可见
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/65
- 多阶段构建:node:22-alpine 构建,nginx:stable-alpine 运行
- Nginx 配置:静态文件服务 + /api /ws 反代到后端
- 多阶段构建:golang:1.24-alpine 编译,alpine:3.20 运行
- CGO_ENABLED=0 静态链接,包含 ca-certificates 和时区数据
- frontend 和 backend 两个服务,共享 camtalk-net 网络
- backend 通过 .env 注入 API Key,不对外暴露端口
- frontend 通过 Nginx 反代对外暴露 80 端口
- 支持 build / up / down / restart / logs / status 命令
- 首次运行自动从 .env.example 生成 .env 模板
- PR 到 main 时验证 Docker 镜像构建
- push 到 main 时自动构建并部署,含健康检查
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/66
之前前端 TTSPlayer 攒齐所有音频片段后才播放,导致文字全部显示后才开始语音。
改为后端每句 TTS 发送 is_last: true,前端收到每句即加入播放队列,第一句到达即开始播放。

- 后端 Chunk 结构体新增 Final 字段,区分句子结束和整轮结束
- 前端 TTSPlayer 重写为队列式播放,onended 回调自动衔接下一句
- 同步更新接口文档和测试用例
Merge pull request 'fix: 修复语音与文字不同步的问题,改为句子级流式播放' (#67) from frontend-12 into develop
Some checks failed
Backend CI / ci (pull_request) Failing after 2m14s
Deploy / verify (pull_request) Failing after 1s
Deploy / deploy (pull_request) Has been skipped
Frontend CI / ci (pull_request) Successful in 56s
d8bbdb1744
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/67
Merge pull request 'chore: 删除 deepgram_test.go 测试文件' (#69) from refactor/ai-model-refact into develop
Some checks failed
Backend CI / ci (pull_request) Successful in 1m51s
Deploy / verify (pull_request) Failing after 1s
Deploy / deploy (pull_request) Has been skipped
Frontend CI / ci (pull_request) Successful in 1m10s
1a6325698a
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/69
Merge pull request 'fix: 修复 deploy 工作流缺少 Node.js 导致 checkout 失败的问题' (#71) from fix/actions into develop
Some checks failed
Backend CI / ci (pull_request) Successful in 1m52s
Deploy / verify (pull_request) Failing after 17s
Deploy / deploy (pull_request) Has been skipped
Frontend CI / ci (pull_request) Successful in 34s
7153a7adf6
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/71
huanghaosheng merged commit 2f05b5fa2b into main 2026-06-14 14:37:27 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: XEngineers/CamTalk#72