state 是 RWKV 这类 RNN 大模型特有的状态。微调 RWKV 的初始 state,就相当于最彻底的 prompt tuning 。通过挂载不同的 state 文件,又可以使 RWKV 模型遵循特定的风格进行回答。
目前 RWKV 发布了中英文单轮对话、小说扩写、文言文对话、打油诗等多种 state 文件,其中打油诗和文言文 state 的效果兼顾了文学性和趣味性,强烈建议大家体验:
state 效果预览
中英文单轮对话
搭载中文单轮对话增强 state 之后,RWKV 模型的回复更符合人类语言习惯,而且带丰富的 Emoji 表情,无论是多奇怪的问题它都会幽默而巧妙地进行作答。
中文小说扩写
搭载中文小说扩写 state 之后,RWKV 模型会根据用户输入的大纲或情节去扩写一段短文,效果非常棒:
打油诗
打油诗 state 可以根据用户输入的 prompt 输出一段诗,非常适合在朋友圈打造文人墨客形象。
想象一下,妈妈去庐山游玩拍了一堆美照,正在苦苦构思朋友圈文案,这时你突然送上诗词一首:
又或者中了五千万彩票,打算在朋友圈发表获奖感言:
一些不着调的幻想也能作诗一首:
文言文对话
文言文 state 分为纯文言文 state 和文言文+名著混合训练的 state ,更建议使用后者,因为它更具文采:
文言文在辅助文案创作上可谓独具一格,无论是给朋友结婚的贺词,还是在朋友圈发布获奖感言:
写景区描述,写段子,都不在话下:
又或是写一段周年庆文案(拍马屁):
我要从哪里下载 state 文件 ?
可以在 官方 HF 仓库下载 pth 格式的 state 文件。
Ai00 需要使用 st/state 格式的 state 文件,可以从 此 HF 仓库下载 st/state 格式的 state 文件。
国内可以访问的 HF 镜像网站:
.pth
格式 state 文件:https://hf-mirror.com/BlinkDL/temp-latest-training-models/tree/main
.st/.state
格式 state 文件:https://hf-mirror.com/cgisky/ai00_rwkv_x060/tree/main
现在有什么 state 文件 ?
✨ 受训练语料影响,目前发布的 state 文件仅支持单轮问答,暂不支持多轮问答。未来我们会推出支持多轮问答的 state 文件。
目前 RWKV 官方发布了以下 state 文件:
chn_single_round:中文单轮对话增强,更符合人类语言习惯,带丰富的 Emoji 表情 eng_single_round:英文单轮对话增强,更符合人类语言习惯,带丰富的 Emoji 表情 chn_小说扩写_single_round:中文单轮对话,会根据用户输入进行小说扩写 chn_打油诗_single_round:中文单轮对话,会根据用户输入创作打油诗 chn_文言文_single_round:中文单轮对话,回答的风格会偏向文言文 chn_文言文和古典名著_single_round:中文单轮对话,回答的风格会偏向文言文和古典名著下一步发布网文 state 和名著 state。
如何使用 state 文件 ?
state 文件需要配合基底 RWKV 模型,才能发挥其效果。
你可以在 RWKV Runner 或者 Ai00 中搭载 state 文件,二者搭载 state 文件的方法略有不同。
RWKV Runner 挂载 state 文件
在 RWKV Runner 中,你可以按照以下步骤使用 state 文件:
启动一个 RWKV 模型 在配置页面选择对应的 state 点击保存配置
按钮。
点击保存后即可实时更新 state ,无需重新启动 RWKV 模型。
在下图的示例中,我们已经启动了 RWKV-6-7B-World 模型。那么我们只需在 RWKV Runner 的配置页面,选择基于 RWKV-6 7B 的 state 文件(名称中带有 x060 * 7B
字段),然后点击 保存配置
按钮。
Ai00 挂载 state 文件
在 Ai00 中,你可以按照以下步骤使用 state 文件:
修改 config.toml
配置文件,开启 state
选项,并指定对应的 state 文件路径。
[[state]] # 开启 state 挂载功能
# default = false # 这条保留 `#` 注释符
# # 非开发环境一般不指定 UUID,因此保留 `#` 注释符
name = "x060-7B-Chinese" # 为此 state 文件命名为“x060-7B-Chinese”,方便在 WebUI 选择
path = "rwkv-x060-chn_single_round_qa-7B-20240516-ctx2048.state" # 存放在 model 文件夹的 state 文件名称
Ai00 支持在 config.toml
配置文件中添加多个 [[state]]
块,一次配置多个 state 文件,然后在 WebUI 中动态切换 state 文件。
在下面的 Ai00 示例中,我们一次性加载三个基于 RWKV-6-7B 模型的 state 文件,在 config.toml
中添加如下配置:
[[state]] # 挂载 state
# default = false # 保持注释
# # 非开发环境一般不指定 UUID,因此保留 `#` 注释符
name = "x060-7B-打油诗" # 为此 state 文件命名为“x060-7B-打油诗”,方便在 WebUI 选择
path = "x060-打油诗-7B.state" # 存放在 model 文件夹的 state 文件名称
[[state]] # 挂载第二个 state
name = "x060-7B-文言文+古典名著" # 为此 state 文件命名为“x060-7B-打油诗”,方便在 WebUI 选择
path = "x060-文言文和古典名著-7B.state" # 存放在 model 文件夹的 state 文件名称
[[state]] # 挂载第三个 state
name = "x060-7B-小说扩写" # 为此 state 文件命名为“x060-7B-小说扩写”,方便在 WebUI 选择
path = "x060-小说扩写-7B.state" # 存放在 model 文件夹的 state 文件名称
保存配置文件并启动 Ai00-server
,在 Ai00 WebUI 右上角可以动态切换 state 。
在 Ai00 WebUI 切换 state 时,建议新建一个聊天会话或清除上一个 state 的聊天内容,以确保新的 state 文件生效。
未来会发布更多类型的 state 文件,也会发布基于 RWKV 模型训练 state 文件的教程,敬请期待!
彩蛋
实际上,现在这篇文章的标题,也是由搭载文言文 state 的 RWKV-6 7B 模型提供灵感: