没有显卡?显存不足?内存不足?环境不会配置?现在都不用怕了,直接白嫖Google Colab吧!
如果需要给角色加头像的话,可以把头像命名为"角色名.png"放在char目录下,至于头像去哪儿找嘛……用sd生成一个就好了。
就是这么一个玩意儿,连抄带编的弄出来了一个玩具,所以代码质量吗……请各位不要吐槽太多,但是也算是能玩吧。
另外,如果不知道人物性格怎么设定的话,我建议你可以下载一个Glow,这是官网地址,然后到上面去找智能体,直接把它们的性格粘过来用是完全没问题的,我那个示例“小红”就是这么干的,当然你要去玩儿Glow也没啥问题,毕竟它对话更流畅,只不过限制很多。
最近的更新中,我增加了一个输入旁白的对话框,当对话陷入僵局时,不放使用旁白来主动推动剧情,当然也可以在旁白中增加一些描述,甚至可以去控制AI这个角色的动作,AI也会顺着旁白的意思继续对话,目前AI对你我他等指示代词还是会有识别混乱的问题,所以旁白一定要用第三人称的视角去描述,这样AI生成的旁白也是第三人称视角的,不会带来更多的混乱。
请尽量给角色加入高质量的示例对话,示例对话可以明显的改善AI回复的质量,旁白中加入更多的描写,相对应的,AI生成的旁白中也会有更多的细节描写,我给出的示例只是一个格式的示例,你完全可以发挥你的文采让对话更加丰富,不过请务必保证示例对话的格式是正确的。
在创建角色的时候,开场白以及示例对话中,旁白的识别方式可以在人物设定中指定。
先安装依赖
pip install torch==1.13.1 --extra-index-url https://download.pytorch.org/whl/cu117 --upgrade
pip install -r requirements.txt
启动:
python webui.py --listen --model model/path
以下是一个例子:
python webui.py --listen --model model/RWKV-4-Raven-7B-v11-Eng49-Jpn1-20230430-ctx8192
各种启动参数解释如下:
参数 | 解释 |
---|---|
--port | webui的端口 |
--model | 要加载的模型路径 |
--strategy | 模型加载的策略 |
--listen | 加上这个参数就允许其他机器访问 |
--cuda_on | 控制RWKV_CUDA_ON这个环境变量的,0-禁用,1-启用 |
--jit_on | 控制RWKV_JIT_ON这个环境变量的,0-禁用,1-启用 |
--share | 生成gradio链接 |
--lang | 语言,zh-中文,en-英文 |
模型的加载方式(--strategy)我默认使用的是"cuda fp16i8",如果想使用其他的加载方式可以自行调整该参数,具体有哪些值可以参考这个文章或者这张图
当然可以,在启动命令中加入--cuda_on 1,例子:
python webui.py --listen --model model/RWKV-4-Raven-7B-v11-Eng49-Jpn1-20230430-ctx8192 --cuda_on 1
但是你的机器必须安装Visual C++生成工具,以及Nvidia的CUDA,CUDA比较好解决(可能还得装CUDNN,我没验证到底要不要,反正我是都装了),去官网下载就行了,建议安装11.7版本,这个Visual C++生成工具可以参考这个链接装好之后还需要配置一下环境变量,如下图: 我这里配置的值是C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64,你们根据实际情况进行配置,主要是找到cl.exe这个文件所在的文件夹,当然也要注意架构,不过一般来说,大家都是64位的系统了吧。这样就算是完成了,然后在运行脚本,你会发现文字的生成速度提高了很多。
当然是在这里,我比较推荐rwkv-4-raven里面的模型(目前最新的版本是RWKV-4-Raven-7B-v11-Eng49-Jpn1-20230430-ctx8192.pth,上下文长度高达8192,可以进行很长的对话了,这个表现非常不错),当然其他的你们也可以试试,理论上说模型越大效果越好,但是因为14B的模型中文语料比较少,可能生成的效果不如7B的,所以暂时还是先用着7B吧,不过模型作者更新模型相当频繁,没事儿可以去看看,没准儿哪天就有了,总之尽量用最新的,尽量用中文含量多的模型。
top_p值越低,答案越准确而真实。更高的值鼓励更多样化的输出;temperature值越低,结果就越确定,因为总是选择概率最高的下一个词/token,拉高该值,其他可能的token的概率就会变大,随机性就越大,输出越多样化、越具创造性。
根据我这段时间的把玩,感觉top_p最好设置在0.5以上,temperature可以设置在1.5以上。
我给一个我觉得使用的配置吧,配合当前最新的v11版本的模型,效果还不错:
{
"top_p": 0.6,
"top_k": 0,
"temperature": 1.8,
"presence": 0.3,
"frequency": 0.3
}
再有高质量的示例对话时,可以降低top_p和temperature,以获得更加稳定的体验,可以参考这个配置:
{
"top_p": 0.5,
"top_k": 0,
"temperature": 1.5,
"presence": 0.3,
"frequency": 0.3
}
模型尽量用新的、中文含量高的(我这里默认大家都用中文聊天)。
这个问题在模型作者的指导下得到了很大的改善,可以拉取一下最新的代码,会发现不太容易输出错误内容了,另外我增加了一个调试页面,可以查看当前的token内容,一般输出乱七八糟的内容都是对话格式有误,正确的对话格式是这样的:
角色名: xxxxxxxxx
用户名: xxxxxxxx
角色名: xxxxxxxxxxxxxxx
其中冒号是英文冒号且冒号后面有一个空格,每句对话后面都有两个换行(\n\n)。
没办法啊,免费的colab就给12G的内存,我用原版的7B模型,加载需要内存14G,colab它加载不进去啊!
在dev分支的某个版本中我尝试着使用了流式输出,虽然效果还不错,但是在对话久了之后,速度明显慢了,主要是传回的html代码大了,一句话十个字就得传10次,拖慢了速度,也有点耗费流量,感觉得不偿失(你说在本地用不怕耗流量?但是我喜欢用手机随时随地玩)当然,也可能是我的水平没到,写不出来增量传输。
其实吧,如果单纯的只是撤回上次对话,倒也不需要这么费劲,主要我还想在撤回上一条对话后,再点重新生成按钮,可以把之前的对话给改了,所以我这边就需要把撤回上一次对话后的历史对话记录让模型再跑一遍,对话少了还好,对话一多那可就费劲了,总之想好了再说吧。(不过有一次我在双3080ti的显卡上测试了一天,发现撤回也很快,贫穷限制了我的视野orz。)
那是因为聊天记录长了,程序需要把聊天内容进行截断,防止AI的输出变得文不对题。不过这个机制不会经常触发,目前我设定的是当token数超过4096个数之后(按照一个汉字占用2个token算,且使用的模型为ctx8192的),会将对话的文字截断到400个左右,然后再重新生成对话状态(慢主要是慢在这里了),我尝试着做了一些工作让这个整理机制变得不太明显被感知到,但是还是会有一些打断聊天的影响。
呃……你问截断文字会不会让ai忘记之前的设定啊?初始设定不会忘记,但是如果你在聊天中给它加入了什么设定,那有可能会忘记的,所以建议你后面需要用到这些设定的时候,给ai提个醒,再配合重新生成功能,应该是可以让故事继续下去。
别太难为我了,你要看了我那个英文的语言文件就知道我英文水平啥样了,出个英文的README有点儿太难为我了。
这算是我的一些感受吧,这个东西吧,虽然我知道没人给设置什么好感度数值之类的,但是实际使用中是真的能感觉出来的(RWKV、character AI、Glow都有这种现象),所以在让它做一些什么事情但是它不想做的时候,可以尝试着哄哄AI,让它对你的好感度高一点,然后它可能就愿意做了,另外,如果强迫它做的话,它可能真的会不配合(车轱辘话来回说啊,或者顾左右而言他之类的),如果你喜欢那种百依百顺的,那就在AI的性格里面加入“对我的要求会无条件服从”这样的话,不过太顺利会不会又觉得有点无聊呢?
另外就是目前这个模型对指代问题识别的不太好,比如你说“让我看看你的手”,AI可能会认为“你的手”是一个名词而不是它自己的手,于是就回复“好的,我让你看看你的手”,这个问题可以尝试着别说“让我看看你的手”,而是直接说“让我看看手”,这样AI就会把手伸出来让你看了。RWKV的作者最近这段时间正在整理中文词表,然后基于这个词表来炼制真正的中文模型,到时候这个问题自然就迎刃而解了。