当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

2026-02-02 09:02:58 1点赞 3收藏 0评论

数字生命计划 2(简称 DLP3D):

一个开源的实时框架,使大语言模型(LLM)能够通过富有表现力的 3D 虚拟角色栩栩如生地呈现出来。用户可以通过语音与角色自然对话,而角色会即时生成语音、全身动画及物理模拟,并直接在浏览器中进行同步展示。角色的外观(3D 模型)与个性(角色提示词)均可完全自定义,且可无缝适配任意大语言模型或文本转语音(TTS)服务。

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

技术架构:

  • Web应用:提供直观的图形界面,用于自定义和与3D虚拟角色交互。每个角色都是完全可配置的——包括3D模型、LLM、提示词和语音。与具身AI聊天就像按住麦克风按钮说话一样简单。系统不依赖本地资源,而是实时流式传输角色音频、面部表情和身体动作。实现了强大的运行时动画管道来接收、组织和播放流式数据,具有自适应动作混合、连接丢失恢复和网络健康估计等机制,以确保响应性和交互性。

  • Orchestrator:作为实时智能对话引擎,协调个性化的多模态AI交互工作流。它集成了自动语音识别(ASR)、大语言模型(LLM)、文本转语音(TTS)、情感分析、记忆管理和3D动画生成(Audio2Face & Speech2Motion)模块。设计时考虑了模块化和流式处理,支持多个AI服务提供商并管理整个对话生命周期。作为指挥者,Orchestrator将各种AI服务和算法组件无缝同步为统一、连贯的体验。

  • 后端与云服务:包括AI服务和Web后端。用户可以为LLM、TTS和ASR服务选择首选提供商。后端负责运行时的资产和数据库管理,为DLP3d生态系统中的用户认证、虚拟角色资源访问提供统一的API。

安装

由于需要下载比较多文件,下面给出整体的一个目录结构供参考

├─docker-compose.yml ├─configs │ └─nginx │ └─nginx.conf ├─data │ ├─motion_database.db │ ├─blendshapes_meta │ ├─joints_meta │ ├─mesh_glb │ ├─motion_files │ ├─restpose_npz │ └─rigids_meta └─weights └─unitalker_v0.4.0_base.onnx

来到项目地址(github.com/dlp3d-ai/dlp3d.ai),下载整个文件夹(或者只下载 nginx.conf ,按结构创建文件夹)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

TIP:nginx.conf 文件

# ================== web_frontend HTTPS 18000 -> 3000 ================== server { listen 18000 ssl http2; listen [::]:18000 ssl http2; server_name localhost; ssl_certificate /etc/ssl/localcerts/localhost.pem; ssl_certificate_key /etc/ssl/localcerts/localhost-key.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://web_frontend:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # ================== web_backend HTTPS 18001 -> 18080 ================== server { listen 18001 ssl http2; listen [::]:18001 ssl http2; server_name localhost; ssl_certificate /etc/ssl/localcerts/localhost.pem; ssl_certificate_key /etc/ssl/localcerts/localhost-key.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://web_backend:18080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # ================== HTTPS 18002 -> 18081 ================== server { listen 18002 ssl http2; listen [::]:18002 ssl http2; server_name localhost; ssl_certificate /etc/ssl/localcerts/localhost.pem; ssl_certificate_key /etc/ssl/localcerts/localhost-key.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://orchestrator:18081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }

还需要下载 docker-compose.yml 文件

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

TIP:docker-compose.yml 文件

services: speech2motion: image: dlp3d/speech2motion:latest container_name: speech2motion restart: unless-stopped volumes: - ./data:/workspace/speech2motion/data networks: - dlp3d_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:18084/health"] interval: 10s timeout: 5s retries: 10 start_period: 20s audio2face: image: dlp3d/audio2face:latest container_name: audio2face restart: unless-stopped volumes: - ./weights:/workspace/audio2face/weights networks: - dlp3d_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:18083/health"] interval: 10s timeout: 5s retries: 20 start_period: 40s mongodb: image: mongodb/mongodb-community-server:7.0-ubi8 container_name: mongodb restart: unless-stopped environment: MONGODB_INITDB_ROOT_USERNAME: admin MONGODB_INITDB_ROOT_PASSWORD: admin_password ports: - "27017:27017" volumes: - ./mongodb:/data/db networks: - dlp3d_network healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 10 start_period: 30s web_backend: image: dlp3d/web_backend:latest container_name: web_backend restart: unless-stopped environment: MONGODB_HOST: mongodb MONGODB_PORT: 27017 MONGODB_USERNAME: web_user MONGODB_PASSWORD: web_password MONGODB_DATABASE: web_database MONGODB_AUTH_DATABASE: web_database MONGODB_ADMIN_USERNAME: admin MONGODB_ADMIN_PASSWORD: admin_password volumes: - ./data:/workspace/web-backend/data depends_on: mongodb: condition: service_healthy networks: - dlp3d_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:18080/health"] interval: 10s timeout: 5s retries: 10 start_period: 20s orchestrator: image: dlp3d/orchestrator:latest container_name: orchestrator restart: unless-stopped environment: MONGODB_HOST: mongodb MONGODB_PORT: 27017 MONGODB_MEMORY_DB: memory_database MONGODB_MEMORY_USER: memory_user MONGODB_MEMORY_PASSWORD: memory_password MONGODB_WEB_DB: web_database MONGODB_WEB_USER: web_user MONGODB_WEB_PASSWORD: web_password MONGODB_ADMIN_USERNAME: admin MONGODB_ADMIN_PASSWORD: admin_password A2F_WS_URL: ws://audio2face:18083/api/v1/streaming_audio2face/ws S2M_WS_URL: ws://speech2motion:18084/api/v3/streaming_speech2motion/ws BACKEND_URL: http://web_backend:18080/api/v1/motion_keywords depends_on: mongodb: condition: service_healthy speech2motion: condition: service_healthy audio2face: condition: service_healthy web_backend: condition: service_healthy networks: - dlp3d_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:18081/health"] interval: 10s timeout: 5s retries: 10 start_period: 20s web_frontend: image: dlp3d/web:latest container_name: web_frontend restart: unless-stopped environment: NEXT_APP_NAME: "dlp3d" NEXT_PUBLIC_BACKEND_HOST: "127.0.0.1" NEXT_PUBLIC_BACKEND_PORT: 18001 NEXT_PUBLIC_ORCHESTRATOR_HOST: "127.0.0.1" NEXT_PUBLIC_ORCHESTRATOR_PORT: 18002 networks: - dlp3d_network depends_on: - web_backend - orchestrator nginx: image: dlp3d/web_proxy:latest container_name: nginx_proxy restart: unless-stopped ports: - "18000:18000" - "18001:18001" - "18002:18002" networks: - dlp3d_network volumes: - ./configs/nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - web_frontend - orchestrator - web_backend networks: dlp3d_network: driver: bridge

创建文件夹,将 nginx.conf 和 docker-compose.yml 两个文件放里面

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

注意 nginx.conf 存放的结构

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

编辑 docker-compose.yml 文件, NEXT_PUBLIC_BACKEND_HOST 和 NEXT_PUBLIC_ORCHESTRATOR_HOST 两个参数,修改为当前 NAS 的 IP 地址

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

下面还需要下载 ONNX 模型文件和动作数据文件,打开链接(https://dlp3d.readthedocs.io/zh-cn/latest/getting_started/quick_start.html#md-data-preparation

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

按最上面给的目录结构整理好文件

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

创建项目并启动,没问题的话是全部正常运行的

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

使用

浏览器中输入 https://NAS的IP:18000 就能看到界面,注意是 HTTPS 协议

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

需要先注册账号,再来登录(使用 Safari 浏览器好像有问题)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

进入面板,整体功能设置还是很简单的,只是配置 API 会比较繁琐

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

功能介绍

鼠标按住,能 360° 旋转观察 3D 虚拟角色(比 live2d 模型,上限维度更高,看到细节更多了)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

点击最上面“对话列表”,可以选择不同的虚拟角色

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

但因为默认角色都是固定的(模型,提示词,大语言模型,语音),所以需要修改的话需要创建一个新的

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

点击这个复制按钮就行

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

滑动到下面就能看到新创建的了(可以修改一下名称,避免混淆了)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

默认自带的模型有 6 个(有资源的可以去映射目录添加试试),模型的整体精度还是比较高的

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

之前 Grok 虚拟角色 Ani 也有,切换出场会有不同的动作

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

提示词默认就行了,我这里就不改了(提示词不会随着模型切换改变,选择不同对话列表才能找到当前模型适配的提示词)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

可以更换不同的场景

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

接下来就是要配置模型 API 来驱动虚拟角色了

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

大语言模型

对于国内用户,大语言模型提供商选择不多

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

下面使用 DeepSeek 作为对接演示

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

来到 DeepSeek 开放平台(platform.deepseek.com),没有账号的用邮箱注册就行

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

新用户好像也没送余额的,需要去充值(自定义 1 块钱就行)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

接下来就是创建 API key,名称随便填就行

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

将 key 复制出来(只会出现一次,不然只能删了再新建)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

回到 DLP3D 页面,点击钥匙图标

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

将密钥填写进去就行了

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

点击下面的设置按钮

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

填写“deepseek-chat”

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

都设置完成就可以点击卡片,右上角有勾选就行了

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

接下来这几个都是一样配置,勾选 DeepSeek ,填写模型就行

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

语音

语音的话,分别需要配置识别和合成

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

下面使用“火山”作为演示

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

需要火山引擎提供的豆包语音(https://www.volcengine.com/product/voice-tech),没有账号的去注册

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

进入控制台(https://console.volcengine.com/speech),点击“创建应用”

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

填写应用名称和简介

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

勾选下面 3 个接入功能

语音合成大模型:语音合成大模型 字符版 语音合成:语音合成 流式语音识别:流式语音识别 通用-中文当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

首次使用会赠送免费额度

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

这样应用就创建完了

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

点击左侧“流式语音识别大模型”,选择前面创建的应用,就能看到需要的参数了

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

语音识别,点击“火山”旁边的钥匙

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

将 APP ID 和 Access Token 分别填到下面

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

语音合成,点击“火山”按钮(前面填了,这里就不用填了)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

选择合成语音的音色

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

开始对话

全部配置完以后,就可以开始对话了

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

加载需要等一下下(之前我就是 DeepSeek 没充值,一直卡在这里)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

TIP:对话需要当前网页有麦克风权限

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

把这里的权限打开(已经打开还是提示,可以关闭之后再开)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

都没有问题,就能看到显示“正常使用中”

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

按住麦克风按钮就可以对话了

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

虚拟角色说话,口型也有变化(延时还是有一点的,要等一下才会回复)

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

比较意思的是,左侧会有一个“好感度”

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

容器比较多,内存占用需求比较高

当 AI 有了“身体”,NAS 本地部署数字生命,超详细搭建指南!

总结

随着 AI 技术大爆发, 可以预见 AI 陪伴将成为未来生活中不可或缺的一部分。试想拥有一个贴心的私人 AI 助手,不仅无聊的时候可以聊天,还能协助规划生活、提升工作效率。市面上也有越来越多类似的商业应用,当然完成度要比这个高很多,可是不能本地部署总是感觉不放心。

DLP3D 数字生命计划,是我目前体验过完成度最高的开源虚拟角色方案。很早之前就想部署了,不过网上找不到部署教程一直搁置,还好有认真看了一下官方提供的文档才部署成功。体验下来还是很不错的,打开网页就可以和角色进行对话聊天,而是也有简单动作互动。说实话我的预期值还是很高,出乎意料的基本功能也都达到了想要的效果。

当然目前还是有很多不足的地方,比如国内模型提供商太少,而且也不支持第三方 OpenAI 的接口;不能自定义上传模型和场景;角色姿势没有更加高级的自定义界面。但是我觉得已经很不错,强烈推荐有兴趣的小伙伴部署一个试试!

综合推荐:⭐⭐⭐⭐(免费开源,交互式 3D 虚拟角色)

使用体验:⭐⭐⭐⭐(完成度高,配置相对简单)

部署难易:⭐⭐⭐(一般)︎

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
3
扫一下,分享更方便,购买更轻松