shuziren/README.md

69 lines
3.6 KiB
Markdown
Raw Normal View History

2026-10-20 16:32:45 +08:00
# DeepSeek 数字人助手
这是一个“语音提问 → 百度短语音识别极速版 → DeepSeek 回答 → 数字人口播”的 Vue 项目。数字人在待机时默认断开,避免持续占用云渲染交互资源;DeepSeek 返回答案后会自动连接并播报。
## 项目结构
```text
src/ Vue 前端源码
src/assets/media/ 会随前端一起构建的运行时媒体
server/ 百度语音识别、DeepSeek 和日志服务
resources/reference/ 不参与构建的原始、参考素材
public/ 原样复制到发布目录的公共文件
dist/ 前端构建产物(不提交 Git)
dist-server/ 服务端构建产物(不提交 Git)
logs/ 本地问答日志(不提交 Git)
```
所有视频统一存放在 `src/assets/media/`,当前运行时使用 `standby.mp4`,旧版未连接视频为 `disconnected.mp4`。音色样本和采访音频放在 `resources/reference/`,用途详见 `resources/README.md`。
## 本地开发
```bash
corepack enable
corepack yarn install --frozen-lockfile
corepack yarn dev
```
打开 `http://127.0.0.1:5173/` 后,浏览器会请求麦克风权限。允许后即可直接说话,无需点击提问按钮。页面在检测到用户停止说话2秒后,将16kHz单声道PCM录音提交给服务端,再由服务端调用百度短语音识别极速版;这套流程不依赖浏览器内置的 `SpeechRecognition` 服务。数字人播报结束后会继续监听下一句。DeepSeek 30 秒未返回会取消请求并自动销毁数字人 iframe。
成功问答会按日期保存到 `logs/conversation-YYYY-MM-DD.log`,其中包含 UTC 时间、用户语音转写文字与数字人回答。生产部署时该目录会映射到服务器的 `/home/shuziren/logs/`。
## 本地构建与生产运行
要求 Node.js 18 或更高版本。首次拉取代码后执行:
```bash
corepack enable
corepack yarn install --frozen-lockfile
corepack yarn build
corepack yarn start
```
`build` 会同时生成 `dist/` 和 `dist-server/`。生产服务默认监听 `9000` 端口。
## 发布到 Linux 服务器
项目包含独立 Node 生产服务,会同时提供网页、`/api/baidu/asr`、`/api/deepseek/chat` 和 `/healthz`,监听 `9000` 端口;不需要额外安装 Nginx 或 Node。
1. 将整个项目目录上传到服务器 `/home/shuziren/`。
2. 在服务器上进入该目录:`cd /home/shuziren`
3. 执行:`sh deploy.sh`
4. 直接访问服务:`http://服务器IP:9000/`;通过 Nginx HTTPS 子路径访问:`https://www.v8.中国/shuziren/`
`deploy.sh` 会构建并启动 Docker 容器 `shuziren`,并等待健康检查通过。停止服务使用 `docker compose down`;查看日志使用 `docker compose logs -f`。
2026-10-20 17:21:57 +08:00
如果 Nginx 直接从 `/data/nginx/www/shuziren/` 提供静态页面,而不是把整个站点反向代理到 9000 端口,请使用:
```bash
STATIC_DIRECTORY=/data/nginx/www/shuziren sh deploy.sh
```
发布脚本会强制重建容器,并将容器中的最新 `dist` 同步到该 Nginx 静态目录,避免继续显示旧视频。
2026-10-20 16:32:45 +08:00
服务器需要安装 Docker Engine 和 Docker Compose v2,并放行 TCP `9000` 入站端口。服务端必须能够访问 `https://api.deepseek.com`。
## 安全提示
根据当前项目要求,DeepSeek API Key 和百度语音应用密钥位于 `server/` 的服务端代码中,不会进入浏览器前端构建产物,但会包含在服务器镜像内。请勿将项目或镜像上传到公开位置;公网部署建议额外使用反向代理鉴权或 IP 白名单,避免 API 被滥用。