前端和后端现在是彻底分离的两套进程:
- 前端:Next.js,只负责页面、交互、录音采集和调用后端。
- 后端:Go,独立提供
/api/chat、/api/stt、/api/stt/ws、/api/tts。
密钥只允许存在于 Go 后端环境变量中。前端只持有后端地址,不再包含任何第三方服务代理逻辑。
src/:前端 UIbackend/:Go 原生后端.env.example:前端环境变量模板backend/.env.example:后端环境变量模板
- Next.js
src/app/api已移除,前端仓库不再提供业务 API。 - 豆包/阿里云/chat 的密钥只给 Go 后端。
- 前端通过
NEXT_PUBLIC_API_BASE_URL和NEXT_PUBLIC_WS_BASE_URL访问后端。 - 流式语音识别走 Go 后端的 WebSocket,再由 Go 后端代理到豆包。
- 安装前端依赖
npm install后端需要 Go 1.25.8 或更高版本;仓库已在 backend/go.mod 中锁定该版本,旧版本 Go 在执行 go run、go build、go test 时会继续触发标准库漏洞告警。
- 配置前端环境变量
根目录创建 .env.local:
NEXT_PUBLIC_API_BASE_URL=http://localhost:8080
# 可选;不填时默认从 NEXT_PUBLIC_API_BASE_URL 推导
NEXT_PUBLIC_WS_BASE_URL=- 配置后端环境变量
复制backend/.env.example 为 backend/.env
Go backend 启动时会自动读取这个文件;如果你已经在 shell 里显式导出同名环境变量,显式值优先,不会被 backend/.env 覆盖。
最小配置通常至少包括:
BACKEND_PORT=8080
CORS_ALLOWED_ORIGINS=http://localhost:3000,https://localhost:3000
LOG_LEVEL=log
CHAT_PROVIDER=fastgpt
CHAT_API_URL=https://your-fastgpt-host/api/v1/chat/completions
CHAT_API_KEY=fastgpt-app-key
CHAT_REQUEST_TIMEOUT_MS=300000
FASTGPT_STREAM_DETAIL=false
STT_PROVIDER=doubao
TTS_PROVIDER=doubao
DOUBAO_STT_APP_ID=...
DOUBAO_STT_ACCESS_KEY=...
DOUBAO_TTS_APP_ID=...
DOUBAO_TTS_ACCESS_KEY=...
DOUBAO_TTS_SPEAKER=...如果 chat 上游是 FastGPT:
CHAT_PROVIDER=fastgptCHAT_API_URL使用 FastGPT 文档里的/api/v1/chat/completions- 前端会自动把当前会话 ID 作为
chatId传给后端,后端再转发给 FastGPT FASTGPT_STREAM_DETAIL=false时,返回的是 OpenAI 风格 SSE,当前前端可直接解析- 如果你后续要接 FastGPT 的工作流节点事件,再把
FASTGPT_STREAM_DETAIL=true LOG_LEVEL=log只输出常规日志;LOG_LEVEL=debug会额外输出上游握手、SSE/STT WebSocket 细节和请求调试信息
- 启动后端
npm run dev:backend- 启动前端
npm run dev如需 HTTPS 前端开发环境:
npm run certs
npm run dev:https前端构建:
npm run build后端构建:
npm run build:backend前端生产启动:
npm start后端生产启动:
go run ./backend/cmd/server前端:
npm run lint
npx tsc --noEmit后端:
npm run test:backend
cd backend && go build ./cmd/server