使用《署名—非商业性使用—相同方式共享 4.0 协议国际版》(CC BY-NC-SA 4.0)进行授权。
https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.zh-Hans


一. 基本信息

  • 作者: 地窖上的松
  • 联系方式:QQ: 602380092
  • 文件版本:v1.3.0
  • 更新日期:2025/2/28
  • 关键词:bert deepseek

二. 介绍

相关帖:【抛砖引玉】如何给骰娘完整的一生

接入 BERT 模型判断是否回复,接入 deepseekapi 生成回复。

插件分不同模块,可以随需求修改reply/reply.lua以实现模块的增删。

部分模块配置使用有一定门槛,建议有修改 lua 与 python 代码的能力。

不懂的也可以直接问我 有空的话会回的

插件代码仓库在此

效果展示:


三.模块介绍与使用方法

只要把reply/reply.lua中对应模块的触发配置直接删去就能够关掉对应模块了

早晚安模块

对应触发配置

msg_reply.aibot_good_mn = {
    keyword = {
        Match = {
            "早安",
            "早",
            "早上好",
            "晚安",
            "晚安安",
            "晚上好",
            "下午好",
            "中午好",
            "上午好",
            "午安"
        }
    },
    type = "order",
    limit = {
        cd = 180,
    },
    echo = {
        lua = "aibot_good_mn"
    }
}

此模块监听设置的道安消息,记录此时时间,直接调用 deepseekapi 生成回复。

其实就是 deepseekapi 版的分时段回复,心血来潮加上的

需要配置:

  • deepseek api key

  • 符合骰娘人设的 prompt

开关模块

对应触发配置

msg_reply.aibot_switch = {
    keyword = {
        Prefix = {
            ".aibot"
        }
    },
    type = "order",
    echo = {
        lua = "aibot_switch"
    }
}

此模块控制除早晚安模块之外模块的开关,同时可以发送帮助信息

aibot 主模块

对应触发配置

msg_reply.aibot0 = {
    keyword = {
        Regex = {
            "^[^%.。r](.*)" -- 匹配所有不以指令前缀开头的消息
        }
    },

    type = "order",
    limit = {},
    echo = {
        lua = "aibot"
    }
}

主模块监听所有不以指令开头或字母r的消息,所以会使所有type = reply的回复词失效,解决方法见第 7 节

主模块监听消息,以经过检测的消息调用 BERT 模型判断是否回复,若是则调用 deepseekapi 生成回复。

将排除以下类型的消息:

  • 插件关闭状态群聊的消息

  • 全词匹配设定的回复词的

  • 以设定的前缀为开头的消息

  • 开启了日志记录的群聊消息

  • 包含违禁词与屏蔽词的消息

一层层检测都是为了不影响跑团和插件安全写的(

启用此模块比较麻烦,需要配置:

  • deepseek api key

  • 符合骰娘人设的 prompt

  • 训练一个适合自己骰娘的 BERT 模型并部署推理服务

  • 调整一下关键词列表、无关词列表

  • 如果有需要,调整一下其他的列表如白名单列表

aibot reply 模块

对应触发配置

msg_reply.aibot_reply = {
    keyword = {
        Prefix = {
            "[CQ:reply,id=" -- 匹配所有回复消息
        }
    },
    type = "order",
    limit = {},
    echo = {
        lua = "aibot_reply"
    }
}

此模块可以实现用户回复 aibot 生成的发言时,可以保持记忆继续聊天。

模块监听所有回复消息

暂时想不到什么好的记忆上下文方法,所以姑且先写了这个模块

比起主模块需要多配置一个骰子框架 http 端口。


四. 训练自己的 BERT 模型

训练过程见此博客

数据集可以参考 github 中的。

五. 获取 deepseek api key


推荐 coreshub,现在注册送 50 元额度

大模型服务 - API 密钥管理 - 创建 API 密钥 即可

随后将插件中的 deepseek_api_token 配置项修改为自己的 token

如果用其他平台的 api,还需要修改deepseek_apimodel


六. 写一份适合自己骰娘的 prompt

可以让 deepseek 帮忙写

然后根据自己需求改改就好。

prompt 建议分段加入prompt_list中,代码中的prompt_list即为例子


七. 如何与回复词共存

aibot主模块会自动读取data/reply_list.json文件作为回复词列表,如果全词匹配到回复此列表中的内容,会返回并自动构造一条消息reply_[回复词].

算是绕了个圈子

同时,aibot插件不会监听以字母r开头的发言,所以如果将DiceQQ/conf/CustomMsgReply.json中的回复词存入data/reply_list.json文件作为回复词列表,同时在所有的回复触发词前加上reply_即可实现共存。

示例reply_list.json

{
    "reply_list": [
        "七海千秋",
        "苗木诚",
        "希望",
        "18年夏天",
    ]
}

全词匹配之外的回复词建议设为type=order,也可实现共存。

插件代码仓库中的tools文件夹内有一个python文件可以帮助实现。

get_reply_list.py可以自动读取同目录下的CustomMsgReply.json文件,获取其中的全词匹配回复词存入reply_list.json中,同时为所有的全词匹配回复词加上reply_的前缀,将新的CustomMsgReply.json覆盖掉旧的,重启即可生效。


八. 测试建议

建议先将bert_debug设为 true,如此,骰娘会先监听包含关键词的消息调用 BERT 模型,但只有白名单中的群聊或用户私聊才会生成回复,可以以此来测试 BERT 模型效果。

2 个月 后

如果放在服务器上的话,硬件需求大概要多少,一般的1核2g服务器感觉支持不了俄

说点什么吧...