自己动手搭建“接入 AI Agent 的数字人”

tonyjump 2024-10-08 13:31:01 阅读 58

前言

本文的实战案例来自于开源项目:https://github.com/wan-h/awesome-digital-human-live2d。该项目可以运用Dify编排框架和Live2D驱动模型搭建智能数字人,实现智能对话并动态交互,大家可以自行部署尝试,项目效果如下。

开源!数字人:awesome-digital-human-live2d

一、数字人简介

数字人,是指运用数字技术创造出来的人,虽然在现阶段不能做到像科幻作品中的人型机器人一样具备高度智能,但它已经在生活的各类场景中触手可及,而且随着AI技术的发展正在爆发

目前业界还没有一个关于数字人的准确定义,但一般可以根据技术栈的不同分为两类,一类是由真人驱动的数字人,另一类是由算法驱动的数字人。

1.1 真人驱动的数字人

这类数字人重在通过动捕设备或视觉算法还原真人动作表情,主要应用于影视行业以及现下很火热的直播带货,其表现质量与手动建模的精细程度及动捕设备的精密程度直接相关,不过随着视觉算法的不断进步,现在在没有昂贵动捕设备的情况下也可以通过摄像头捕捉到人体骨骼和人脸的关键点信息,从而做到不错的效果。

1.2 算法驱动的数字

这类数字人强调自驱动,人为干预更少,技术实现上更加复杂,一个最简单的算法驱动的数字人大致流程如下:

其中三个核心算法分别是:

ASR (Automatic Speech Recognition,语音识别):我们希望和数字人的交互跟人一样以对话为主,所以算法驱动的第一步就是语音识别,它能将用户的音频数据转化为文字,便于数字人理解和生成回应。

AI Agent(人工智能体):充当数字人的大脑,可以直接接入大语言模型,强调 Agent 的概念是为了让数字人拥有记忆模块等更加真实。

TTS (Text to Speech,文字转语音):数字人依靠LLM生成的输出是文字,为了保持语音交互一致性,需要将文字转换为语音,由数字人。

上述算法开源的代码有很多,这里列出一些仓库供大家参考:

ASR语音识别

openai的whisper: https://github.com/openai/whisper

wenet: https://github.com/wenet-e2e/wenet

speech_recognition(这是一个语音识别的接口集合,里面有不同实现的语音识别的接口): https://github.com/Uberi/speech_recognition

AI Agent

大模型部分就比较多了,包括ChatGPT、Claude、ChatGLM、文星一言、千帆大模型、通义千问等等。

Agent部分可以使用LangChain的模块去做自定义,里面基本包含了Agent实现的几个组件(https://www.langchain.com/)

TTS

微软的edge-tts:https://github.com/rany2/edge-tts,只能使用里面预设的人物声音,目前接口免费。

VITS:https://github.com/jaywalnut310/vits,还有很多的分支版本,可以去搜索一下,vits系列可以自己训练出想要的人声。

so-vits-svc: https://github.com/svc-develop-team/so-vits-svc,专注到唱歌上面,前段时间很火的AI孙燕姿。

除了算法,人物建模模型可以通过手动建模(音频驱动)或者AIGC的方式生成人物的动态效果(例如wav2lip模型)实现,这样就完成了一个最简单的数字人。

当然这种简单的构建方式还存在很多的问题,例如:

如何生成指定人物的声音?

TTS生成的音频如何精确驱动数字人口型以及做出相应的动作?

数字人如何使用知识库,做出某个领域的专业性回答?

...

二、如何构建高质量的 AI 数字人

首先我们需要参考“真正的人”,赋予数字人躯壳和灵魂:

数字人的躯壳就像我们的身体一样,有一个好看的皮囊,能够跟人进行可视化的,带有神态动作的动态互动;

数字人的灵魂就像我们的大脑,具备一定的智能水平,能够理解交互对象的信息,并给予有效的,符合预期的回应。

2.1 构建数字人躯壳

数字人的躯壳就是建模过程,有多种构建方式:

2D引擎

风格偏向二次元,亲和力强,定制化成本低,在日本、东南亚等国家比较受欢迎,也深受年轻人喜欢,毕竟能将喜欢的动漫人物变成数字人的躯壳,是一件很棒的事情。2D引擎的代表就是Live2D Cubism(https://www.live2d.com/)。

3D引擎

风格偏向超写实的人物建模,拟真程度高,定制化成本高,目前有很多公司都在做这个方向的创业,已经可以实现用户通过手机摄像头快速创建一个自己的虚拟人身体(如下图,NextHuman(https://nexthuman.cn/))。3D引擎的代表是UE(Unreal Engine)、Unity,虚幻引擎MetaHuman等(个人学习在电脑配置和学习难度上有一定门槛。

AIGC

​​​​​​虽然AIGC的方式相比前两者省去了建模流程,直接生成数字人的展示图片,但弊端也明显,算法生成的数字人很难保持ID一致性,帧与帧的连贯性上会让人有虚假的感觉。如果项目对人物模型真实度要求没有那么高,可以使用这种方案(算法发展非常快,可能不久就会有连贯度很高的生成方式),典型的项目有wav2lip(https://github.com/Rudrabha/Wav2Lip)、video-retalking(https://github.com/OpenTalker/video-retalking)等。

AIGC还有一个方向是直接生成2d/3d引擎的模型,而不是直接生成数字人的最终展示部分,但该方向还在探索中。

        得益于现有各类技术方案的成熟度,以往建模往往都是由专业的建模师完成工作,不久之后相信大家就可以通过一些生成算法快速生成自己的人物模型了。

        建好的模型可以使用web前端页面(Live2D就提供了web端的SDK)或者Native的可执行程序进行部署,最后呈现在用户面前的是一个GUI。

        笔者的开源数字人项目(项目地址:https://github.com/wan-h/awesome-digital-human-live2d)选择了 live2d 作为数字人躯壳,因为这类 SDK 的驱动方式相比现在的 AI 生成式的方式更加可控和自然,相比虚幻引擎这些驱动方式又更加轻量和简单;另外超写实的数字人风格在目前的技术能力下,处理不好一致性问题,容易带来虚假的感觉或者产生恐怖谷效应,而卡通二次元的形象给人的接受度更高。关于 live2d 的 SDK 驱动方式可以参考官方示例:https://github.com/Live2D。

2.2 构建数字人灵魂

        有了数字人躯壳,我们就需要构建数字人的灵魂,让数字人具备各种智能,比如记得你的个人信息,充当你的个人助手;在某个领域具备更专业的知识;能处理复杂的任务等等。这些能力实现有以下几个需要注意的工程关键点:

AI Agent:我们要想数字人像人一样思考就需要写一个像人一样的Agent,工程实现所需的记忆模块,工作流模块、各种工具调用模块的构建都是挑战;

驱动躯壳的实现:灵魂部分怎样去驱动躯壳部分,我们可以将灵魂部分的所有接口定义出来,然后躯壳部分通过API调用,调用方式可以是HTTP、webSocket等等,视躯壳部分的实现而定。但包含情绪的语音表达以及如何保证躯壳的口型、表情、动作和语音的同步及匹配,目前主流方案只能做到预设一些表情动作,再做一些逻辑判断来播放预设,语音驱动口型相对来说成熟一些,但都是闭源的,效果可以参考Nvidia的Audio2Face(https://www.nvidia.cn/omniverse/apps/audio2face/)或则Live Link Face(Iphone APP) + Face AR Sample(UE);

实时性:由于整个数字人的算法部分组成庞大,几乎不能实现单机部署,特别是大模型部分,所以算法一般会部署到额外的集群或者调用提供出来的API,这里面就会涉及到网络耗时和模型推理耗时,如果响应太慢就会体验很差,所以低延时也是亟需解决的一个问题。

多元跨模态:仅仅是语音交互的数字人是远远不够的,人有五感(听觉、视觉、嗅觉、触觉、味觉),听觉只是其中一种,其他的感官可以根据实际需求来做,比如视觉我们可以通过添加摄像头数据来获取数据,再通过系列CV算法做图像解析等;

拟人化场景:我们正常和人交流的时候不是线性对话,会有插话、转移话题等情况,这些情景如何通过工程丝滑处理。

        上述种种,如果都要自建代码实现各模块,开发工作量巨大,迭代难度也很高,对于个人开发者来讲不现实。因此我们推荐借助开源社区的力量,现在开源社区已经有了像dify、fastgpt等等成熟的高质量 AI 编排框架,它们有大量的开源工作者维护,集成各种主流的模型供应商、工具以及算法实现等等。我们可以通过这些框架快速编排出自己的 AI Agent ,赋予数字人灵魂。

        在笔者的开源项目中,使用了dify的框架,利用其编排和可视化交互任意修改流程,构造不同的AI Agent,并且实现相对复杂的功能,比如知识库的搭建、工具的使用等都无需任何的编码和重新部署工作。同时Dify的API暴露了audio-to-texttext-to-audio两个接口,基于这个两个接口就可以将数字人的语音识别和语音生成都交由Dify控制,从而低门槛做出来自己高度定制化的数字人(如下图),具体的部署过程参考B站视频:https://www.bilibili.com/video/BV1kZWvesE25。

        如果有更加高度定制的模型,也可以在Dify中接入XInference等模型管理平台,然后部署自己的模型。此外,数字人GUI工程中仍然保留了LLM、ASR、TTS、Agent等多个模块,能够保持更好的扩展,比如实现更加真实性感的语音转换、或者如果有更加Geek的Agent实现也可以选择直接后端编码扩展实现。

上述 Dify 接口使用注意事项:

使必须在应用编排功能中打开文字转语音语音转文字功能,否则接口会返回未使能的错误。

只有接入了支持TTSSPEECH2TEXT的模型供应商,才会在功能板块中展示出来,Dify的模型供应商图标下标签有展示该供应商支持哪些功能,这里可以自行选择自己方便使用的。对于TTS,不同的模型供应商支持的语音人物不同,可以根据个人喜好添加。

三、写在最后

数字人在未来肯定会有很多的应用场景,比如家庭中有数字人管家,全面接管智能家居或其他设备;学校中有数字人老师,孜孜不倦的为学生答疑解惑;商场里有数字人导购,为顾客提供指路、托管个人物品等悉心服务...

数字人在未来肯定还有很多的技术突破,比如可以将五感数据作为输入(例如声音、图像、气味、震动等等),将所有可以控制躯壳的参数也作为输入(例如躯壳骨骼节点,面部混合形状参数等);次世代的算法可以自我迭代升级,也可以拿到感官输入以及躯壳控制方法后,自行演化躯壳控制方式...

笔者希望通过 Dify 搭建数字人的开源项目,给大家展现低门槛高度定制数字人的基本思路,但数字人的核心还是在于我们的Agent,也就是数字人的灵魂,怎样在Dify上面去编排专属自己的数字人灵魂是值得大家自己亲自体验的。

真诚的希望看到,随着数字人的多模态能力接入、智能化水平升级、模型互动控制更精确,用户在需要使用AI的能力时,AI 既可以给你提供高质量的信息,也能关注到你的情绪,给你一个大大的微笑,也许到了那时,数字世界也开始有了温度。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。