Duix-Avatar 克隆数字人时 SQLite3 can only bind numbers 报错怎么办?一份新手的完整排查手册
【免费下载链接】Duix-Avatar🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning.项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar
当你在 Duix-Avatar 里用一段视频克隆数字人形象、点击新增模特时,客户端日志弹出 SQLite3 can only bind numbers, strings, bigints, buffers, and null。这篇文章带你先读懂报错原文、再定位真正根因,最后按三条路径把问题修掉。
一、问题长什么样
报错出现在「创建模特」环节,真正挂掉的是本地数据库写入,而不是显卡或视频本身。
点击创建后界面一直转圈,模特列表里没有新条目,客户端日志 main.log 里能看到这样一行:
SQLite3 can only bind numbers, strings, bigints, buffers, and null很多人的第一反应是本地 biz.db 数据库损坏了,想重装数据库或改文件权限,这个方向是错的。真相是:客户端往数据库插入新模特记录时,把一个布尔值 false 当作 voice_id 参数传了进去,SQLite3 拒绝绑定这个类型。
二、为什么会发生 🤔
说白了,声音克隆训练先失败了,训练失败返回的 false 被当成声音编号存进了数据库。
打个比方,SQLite3 的参数绑定(better-sqlite3 库的入参校验)就像小区门卫,只认五类“包裹”:数字、字符串、大整数、二进制缓冲和 null(空值)。布尔值不在名单上,递过去就被挡回来。
Duix-Avatar 创建形象要过三道工序:转码视频、分离音频并训练声音、写入模特记录。第二步会调用本地 TTS 服务(文本转语音服务),服务没就绪时返回失败码,src/main/service/voice.js 在失败时直接返回 false。这个 false 一路传到插入逻辑里当 voiceId 使用,写库那一刻就抛错。所以数据库是清白的,它只是被牵连的信使。
三、排查与修复
修复按「优先 → 备选 → 兜底」递进:先让声音训练成功,再核对素材,最后才考虑重置环境。
优先路径:把三个后台服务跑起来
- 到 deploy 目录重新执行 docker-compose up -d,按 doc/常见问题.md 的自查步骤确认三个服务都是 Running。为什么有效:训练失败的三种情形都源于服务未就绪。
- 服务启动后 ASR(语音识别)模块启动较慢,等两三分钟再创建数字人。为什么有效:低内存机器上直接操作会拿到连接拒绝。
- 仍失败就打开 TTS 服务的 Docker 日志,点“复制”查看具体报错。为什么有效:具体报错能区分是连接拒绝还是文件问题。
如果修复后新建模特不再报错,可跳过后续;若仍报同样的错,进入备选路径。
备选路径:核对输入视频
- 确认模特视频里有清晰的人声说话音轨。为什么有效:声音克隆依赖视频音轨,无声视频必然训练失败。
- 把客户端升到最新版本重新构建。为什么有效:新版修复了训练失败返回 false 的旧逻辑。
兜底路径:重置部署环境
- 重新拉取镜像部署服务端,再重新构建客户端。为什么有效:一次排除版本错位与依赖异常。
四、如何不再踩这个坑
三个习惯,防止这个坑复现。
- 创建数字人前先确认三个服务 Running
- 看客户端日志 SQL Run 一行核对绑定参数
- 拿不准就先把客户端与服务端升到最新版
五、一句话记住
声音训练先失败了,数据库报错只是下游症状,修好服务报错就消失。
【免费下载链接】Duix-Avatar🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning.项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考