前两天在知乎上刷到一个问题,挺有意思的:“一个人能做出什么开源项目?”
看到这个话题,我感触很深。今年我刚好也做了一个开源项目(不是那种“awesome xxx”或者纯教程类的项目),深切体会到单枪匹马做开源有多不容易——就算有AI帮忙,该踩的坑一个不少。项目上线两个多月,目前在GitHub上拿到了1.3K star。如果你也有做开源的想法,不妨听听这段经历。
一句话讲清楚这个项目:我写了一个开源实时数字人Agent框架——只需要一张照片,就能生成一个可以和你视频聊天的数字人。
我知道很多人对“数字人”这个词有点过敏。但我这里说的数字人,可能跟你想象的不太一样。
缘起:为什么想做实时数字人
2026年初,AI视频生成迎来一波大爆发。当时我随手用小云雀生成了一段“蒂法”的视频,效果惊艳得不行。我心里冒出一个念头:要是哪天能打破第四面墙,和蒂法视频通话就好了——她能理解我生活的世界,我也能听她聊聊最终幻想设定之外的内容。为此我还发了条朋友圈纪念这个愿望。
开始动手
转机出现在2月份。机缘巧合下,我发现了一个开源数字人模型——FlashTalk。这是一个音频驱动的数字人模型,最吸引人的地方在于:它比主流数字人模型效果更好,同时还能做到实时推理。当然,代价也不小——想要实时跑起来,需要5块H200显卡。巧的是,我当时正好认识一个能借到H200显卡的朋友。于是花了一段时间研究这个模型,渐渐觉得,那个愿望说不定真能实现。
朋友的显卡终究是要还的。正当我为显卡发愁时,开源界又甩出一个新模型——FlashHead(还是FlashTalk团队的作品)。这是一个1.3B参数的小模型,这次不需要专业级显卡了,5090就能跑。虽然效果比不上FlashTalk,但至少我玩得起了。
于是我开始动手,在FlashHead之上构建一个应用。这个项目最核心的功能,就是实现全双工端到端的实时视频通话。围绕这个核心玩法,我拓展了一些更实用的功能:好看的UI界面、角色管理、角色定义。整体采用模块化设计——数字人底座、TTS、ASR、LLM全部通过插件化方式实现,这样用户可以根据需要定制数字人形象。还加上了记忆模块,让定制的角色更生动、更有个性、更有“活人感”。
推进:从模型Demo做成完整应用
经过将近3个月的迭代,CyberVerse现在集成了FlashHead、LiveAct两个本地数字人模型,以及百度曦灵、讯飞数字人。这四个模型是目前开源和商用方案里效果最好的那一批。同时,CyberVerse也集成了OpenAI、千问、豆包等大模型,作为数字人的耳朵、大脑和声音。
受到OpenClaw和Hermes Agent的启发,我开始尝试将数字人与Agent结合起来。这样一来,数字人就不再只是一个陪你聊天的纸片人,而是能帮你干活的工具。在Agent架构上,我采用了主Agent + SubAgent的两层设计:主Agent负责响应用户,SubAgent负责执行更复杂的任务。目前使用pi Agent作为SubAgent的核心——我喜欢它简洁且高扩展性的风格。
最近又加上了离线视频生成功能,让CyberVerse更像一个一站式数字人工作台:角色选择、角色编辑、离线生成和实时通话都整合在同一个系统里。只需要一张参考图,就能创建自己的角色;如果不需要数字人形象,也可以关闭数字人模块,把它当作纯语音Agent来用。
我一个人把它做到了什么程度
角色选择
进入CyberVerse后,能看到一个角色库。每张卡片对应一个数字人角色。
注:这里的角色仅用于Demo演示,不会随CyberVerse内置提供,也不用于商业用途。
角色编辑
角色编辑页可以设置形象来源、角色名称、角色描述、语音模型、人设风格等。
Workspace / 离线生成
CyberVerse支持离线视频生成,方便用户制作一些口播视频。离线视频生成最大的优势是不用考虑实时性,可以生成更高画质的视频,支持文本驱动和语音驱动。
实时通话
最后,也是这个项目最重要的功能——实时视频通话!这部分花费了大量精力处理WebRTC、音画同步、待机视频与说话片段衔接,以及主Agent与SubAgent的协调。
一个人做开源的真实体感
项目更新了两个多月,基本是一个人做,目前收到社区贡献的2个PR。
一个人做项目是什么感觉呢?就像一个人安静地弹一首钢琴曲,偶尔有人路过驻足聆听,不用急着赶下一首曲子,一切随心。以前我也会在推文里说“欢迎大家提PR、提issue”,现在不再说这句话了——就这么慢慢悠悠地一个人开发也挺好。定个小目标:把这个项目坚持更新一年。
