/GoATuber

Quickly create your own AI VTuber that's ready to use out of the box(快速构建属于你的AI vtuber,开箱即用)

Primary LanguageGoMIT LicenseMIT

公告

2.0版本已release。

请移步GoAtuber

同时开发者可以访问前端代码GoATuber-frontend

2.0版本配备了GUI控制器。这是控制器的源码页:GoAtuber-Control

最后,关注、加入Fun AI研究中心谢谢喵。


GO!Atuber

重构中,预计会开新仓库。但是重构完成之前,本项目会持续维护。重构大概和前端无关,只是重构后端的逻辑。

后端停止维护。(我把branch弄太乱了,不过2.0即将放出)

快速构建属于你的AI主播。

你要问这个项目有什么优势?大概就是快速部署了。项目核心全部采用go和js编写,而go编译好之后并不需要专门的golang环境。即开即用——除了配置文件得自己写一下。

此外,项目有一部分拓展空间。预计未来能够加入更多功能。

快速开始

  • 修改 config/CHAT/config.cfg 中的room_id,填入直播间的房间号。
  • 修改 config/NLP/GPTConfig/gptConfig.cfg 中的相关信息,完善gpt的配置。
  • 把live2d模型文件拖入 dist/model 中。具体参考这里的README.md
  • 配置代理。请修改config/proxy/proxyConfig.cfg。不配置代理,可能无法正常调用OpenAI等服务。
  • 运行 GoTuber.exe。如遇闪退,请检查配置是否正常。
  • 浏览器打开 http://127.0.0.1:9000/
  • Enjoy!

关于记忆

本项目在gpt模块中有一个短期记忆的流程,目前支持500个token上下的的连续短期记忆。暂时不可手动更改模式,未来规划加入。(不难,只是我懒了)

本项目的长期记忆目前通过pinecone向量数据库实现,依赖openai的function call进行调用。现目前要实现长期记忆,必须拥有一个OpenAI的api-key以获取embedding(其实还是我懒了,这个月底就更新azure openai的)(什么嘛,这不还是得要key)

要想实现长期记忆,应该进行以下步骤:

  • 1.注册一个pinecone账号。现目前免费账户大概要过几天才能使用。
  • 2.在能够使用之后,创建一个index。Index Name随便填,但是Dimensions要填1536。Metric用默认的,其他的我没试过。pod type可以随便选,默认的就行。
  • 3.在index创建完毕之后,进入创建的index的详情页,会有一个以io结尾的url。复制它,然后填入pineconeConfig.cfg的url字段的引号里面。
  • 4.右侧导航栏。点击API Keys,把api-key复制下来,填到刚刚那个配置文件的对应字段上。
  • 5.把MemoryConfig.cfg里唯一的那个变量改成true。
  • 6.没有然后了。老实说我不太推荐你使用长期记忆,因为我现在还没摸出来怎么去建构一个合适的长期记忆。但是如果你要帮忙的话,我会很感激的(

违禁词审查

这是碰都不能碰的滑梯.jpg

但是假如不小心碰了,责任在谁呢?我不好说。轻则直播间封禁,重则

所以本项目有一个默认开启的基于sensitive(基于MIT license引用,目前本项目的情感判断也使用该项目)的过滤器。过滤在流程中会有两次:第一次在用户发言传入时,第二次在AI生成回应时。但是基于一般字典的误杀率有点太高了。

在以前过滤器是不能关闭的。但是考虑到误杀率太高的问题,现在用户可以选择打开还是关闭过滤器,也可以使用其他过滤器。具体在filter.cfg中。如果所有字段全部设置成false,那么过滤器将关闭。

如果将use_other_filter设置成true(当然,use_dict(也就是本项目的默认过滤选项)得设置成false),那么请填写request_url字段。其他过滤器统统独立于本项目,使用http协议通信。传入字符串,传出“0”或者“1”。其中“0”代表审查未通过,“1”代表审查通过。

本项目的官方独立过滤器:filter。这是一个基于配置文件运行的综合过滤平台,(大饼内容->)能够提供多个平台和本地过滤器的过滤服务的支持,且能在docker容器内运行。运行之后,将在本地1919端口上进行监听。如果你使用这个过滤器(并且是小白),上文的request_url字段你可以直接填写http://127.0.0.1:1919

一些小说明

已实现GPT的函数调用功能。

我花了一晚上搓了个go语言的函数调用的轮子,函数调用可以不用很麻烦地去改动代码了。目前的问题在于函数调用可能导致整个进程的响应时间变慢——因为要多发一次请求。而且我实现的效果也不是特别好。

不保证没有bug。

2023.07.22:现在azure openai模块也已经实现了函数调用功能。


写给开发者

GPT函数调用

基于golang的GPT的函数调用已经在NLP/service/gpt/function下实现。其中,logic.go是封装好的函数处理模块,能够让开发者方便地将自己的函数添加在发送给GPT的请求当中。

使用方法:在该目录下的list.go中的InitFunction函数中使用addFunc函数将自己编写的函数进行添加操作。在json.go中编写request所需的json格式的对函数的说明。

完成后即可实现将自己编写的函数纳入GPT函数调用选择的一部分。使用函数调用可以实现诸多功能,例如网页爬取等操作。

使用自定义语言模型

基于http协议,本项目现在允许开发者使用自定义的语言模型。

首先更改NLOConfig.cfg的配置,将use_local_model设置为true,其他设置为false。

再在localConfig.cfg中填写通信的请求地址。请事先暴露出要使用模型的API地址。将以GET请求发送以下结构体。

请求发送的body结构如下:

{
  "message": "你好",
  "username": "lvyonghuan"
}

message为弹幕或聊天信息,username为该信息发送者的用户名。

请构造如下格式的返回体:

{
	"type": 1,
	"message": "你好,有什么可以帮助你的吗?"
}

type为int字段。type为0代表生成过程出现错误,可以将错误信息写入message字段,项目将在cmd窗口中输出错误信息。

type为1时,代表生成成功。message字段为AI生成的回应。

请自行实现记忆等功能。


目前项目维护者都在修炼当中,更新暂停一段时间。但是如果使用中产生了问题要提issue或者想提pull request都是欢迎的。

关于这个项目最开始的背景可以参看old_README.md。目前项目的主要维护者都是大一在读,笔者开始写代码也就一年前不到的时间,有些地方可能(绝对)会写得很丑陋。

如果有人能够pull requests,为这个项目做优化或者添加功能,我会很感激的。

目前正在进行的项目:

  • 一个可视化的配置界面
  • 优化记忆模块
  • 优化提示词架构

TODO:

  • 语音转文字功能——也就是说可以对话了
  • 支持VRM模型