Skip to content

MintCider/ai-interrupt

Repository files navigation

AI 插嘴插件

介绍

本插件工作于 海豹骰点核心,并基于其 TS 模板库 实现。

本插件通过接入大模型 API 并随机在群聊中发言,创造更为生动的骰子使用体验。

使用

安装

在本项目 Release 页面中,直接下载最新编译的 JS 文件,或 点击这里 下载。随后上传到海报核心即可。

命令

  • 可以使用 .interrupt on/off/status 来开启/关闭/查看 AI 插嘴功能.

  • 可以使用 .interrupt clear all/users/assistant 清除储存的全部历史记录,或分别清除储存的用户消息和骰子消息。

  • 可以使用 .interrupt clear memory 清除储存的全部长期记忆。

  • 可以使用 .interrupt show <num> 查看储存的特定消息。<num> 应为一个正整数,消息的编号由新到旧排列。

    例如:.interrupt show 1 将展示插件存储的倒数第一条消息,即为刚刚收到或发送的消息。展示消息时,将根据消息来源采用对应的 schema (关于 schema 请见下文「文本大模型」设置部分)。

  • 可以使用 .interrupt show memory <num> 查看储存的特定长期记忆。<num> 应为一个正整数,记忆的编号由旧到新排列。

    例如:.interrupt show memory 1 将展示插件存储的第一条长期记忆。

  • 可以使用 .interrupt delete <num> 删除储存的特定消息。与 show 命令相同,<num> 应为一个正整数,消息的编号由新到旧排列。

  • 可以使用 .interrupt delete memory <num> 删除储存的特定长期记忆。与 show memory 命令相同,<num> 应为一个正整数,记忆的编号由旧到新排列。

  • 可以使用 .interrupt set <property> <num> 在群内设定不同于默认配置的属性。<property> 有四种,分别为 possibilityhistory_lengthtrigger_lengthprivilege

    • possibility:对应下述配置项中的「插嘴的概率」。<num> 需为[0, 1] 的数字,最小值为 0,最大值为 1。

    • history_length:对应下述配置项中的「历史记录保存的最大长度」。<num> 需为正整数。

    • trigger_length:对应下述配置项中的「允许触发插嘴的最小历史记录长度」。<num> 需为正整数。

    • privilege:对应下述配置项中的「执行特定命令所需的权限等级」。<num> 需为正整数。

    使用 .interrupt set <property> <num> 在群内设定属性后,插件在本群将使用设定的属性运行,默认属性将被覆盖。

  • 可以使用 .interrupt unset <property> 将群内属性恢复默认配置。<property> 有五种,分别为 possibilityhistory_lengthtrigger_lengthprivilegeall

    使用 .interrupt unset all 后,群内全部属性都将恢复默认。

权限系统

权限等级数字的含义请见 海豹手册。只有高于或等于此权限等级的用户才可以正常触发部分命令。

  • statusshow 命令:不会对用户的权限等级进行校验,任何用户都可以正常触发。

  • onoffcleardeletesetunset 命令:会对用户的权限等级进行校验。如果群内设定了权限等级,则只有权限等级高于群内设定的用户才能触发。如果群内没有设定权限等级,则只有权限等级高于插件配置项中设定的用户才能触发。

  • set privilegeunset privilegeunset all 命令:需要特别注意的是,这三个命令将始终使用插件配置项中设定的权限等级进行校验,无论群内是否设定了权限等级。

一个合理的实际场景:在插件配置项中,设定较高的权限等级,例如 100 (「仅骰主」)。在需要开启插件的群聊中,使用 .interrupt set privilege 50 将权限等级下放到「管理员」。之后群内可以正常对插件进行各种设定,但只有骰主可以下放/回收权限。

配置

目前,本插件的配置项分为「基础设置」、「视觉大模型设置」、「文本大模型设置」三个部分。

基础设置

  • 插嘴的概率: 填入一个 [0, 1] 的数字。例如,0.5 意味着收到一条消息后,骰子有 50% 的概率进行回应。最小值为 0,最大值为 1。

  • 历史记录保存的最大长度: 插件会存储群聊的最新聊天记录,以保证回复的内容契合上下文。存储的聊天记录越长,AI 对上下文的理解越好,但 token 消耗也越多。

  • 允许触发插嘴的最小历史记录长度: 当存储的历史记录长度小于这一配置时,不会触发插嘴,以免生成的内容过于无关。

  • 执行特定命令所需的权限等级: 详见上文「权限系统」。

  • 骰子昵称: 如题,请务必填入。

  • 骰子 QQ 号: 如题,请务必填入。

  • 被 @ 时是否必定回复(无论历史记录长短): 开启此功能后,当骰子被提及(包括被回复),骰子必定会回复,无论存储的聊天记录长度如何。

  • 插嘴时是否回复触发消息: 开启此功能后,当骰子插嘴时,会「回复」触发插嘴的消息。当开启视觉大模型等功能后,插件的延迟可能会增大,此功能可以减少骰子延迟回复的突兀感。

  • 打印 prompt 日志: 开启此功能后,会在调用 API 前,将完整的 prompt 信息输出到日志中。开启后可以排查生成的 prompt 是否符合预期。

  • 打印 API Response 日志: 开启此功能后,会在调用 API 后,将完整的 response 信息输出到日志中;如果 API 调用失败,会将 HTTP 状态码输出到日志中。开启后可以排查 API 是否正确返回符合格式的信息。

视觉大模型设置

  • 是否解析图像: 开启此功能后,插件会试图调用视觉大模型,用文字描述聊天记录中的图像信息。需要注意流量、token 消耗,以及由此引入的延迟。

  • 视觉大模型的系统提示: 如题。

  • 视觉大模型的 API URL: 如题。

  • 视觉大模型的 API Key: 如题。

  • 视觉大模型的型号: 如题。需要保证此模型支持以 URL 的方式传入图片链接。例如,glm-4v 支持此种调用方式,但是 glm-4v-plus 不支持。

  • 视觉大模型的最大生成长度: 如题。

  • image_temperature: 默认为 -1,即使用模型的默认参数。如果你不确定这是什么,就不要修改。

  • image_top_p: 默认为 -1,即使用模型的默认参数。如果你不确定这是什么,就不要修改。

文本大模型设置

Note

v0.1.0 版本引入了 schema 机制,以增强调用大模型的灵活性。目前可在 schema 中使用的标签分别为:

  • <nickname>:用户的昵称或插件配置项中的骰子昵称。
  • <id>:用户的 QQ 号或插件配置项中的骰子 QQ 号。
  • <time>:当前时间。详细格式请见 Date.prototype.toString()
  • <message>:用户的消息或插件的回复。
  • <memory>:使用 Markdown 列表格式的长期记忆。当不存在长期记忆时,会被替换为「无」。

schema 可以被用于构建 prompt 以及从大模型回复中提取信息,两种场景下对 schema 的处理略有不同。

在构建 prompt 时,对于 system prompt、用户消息以及骰子产生的回复,会分别根据 system_schemauser_schema 以及 assistant_schema,替换标签后压入 prompt。上述五种标签都可以在构建 prompt 时使用,需要注意的是,只有在 user_schema 中,标签解析为用户相关信息,其他情况下解析为骰子相关信息。

在从大模型回复中提取信息时,只能使用 <nickname><id> 标签,分别对应骰子昵称和骰子 QQ 号(其实 <time> 也能用但是没任何意义)。retrieve_schemamemory_schemadelete_memory_schema 应是带一个捕获组的正则表达式,其内的 <nickname><id> 首先会被插件配置项中的数据替换。需要注意正则表达式的转义问题。

可以参考插件配置项中,关于 schema 的默认值进行理解。

  • 以多轮对话的形式请求 API: 插件默认将全部历史消息拼接为单个 user message,请求 API。开启此功能后,插件将每条历史消息作为一个 user/assistant message 请求 API,以模拟多轮对话的形式。可能改善部分模型的对话效果。

  • 是否为文本大模型提供系统提示: 此选项用于配合自定义请求体功能。部分模型通过在请求体中提供特定信息设定人设,此时再提供系统提示可能导致错误。关闭此开关后,插件请求 API 时,将不再提供系统提示。

  • 文本大模型的系统提示格式: 请认真阅读上面关于 schema 的描述后修改。

  • 文本大模型的用户消息 prompt 格式: 请认真阅读上面关于 schema 的描述后修改。

  • 文本大模型的骰子消息 prompt 格式: 请认真阅读上面关于 schema 的描述后修改。

  • 从大模型回复提取骰子消息的正则表达式: 请认真阅读上面关于 schema 的描述后修改。注意区分全角半角,注意要有捕获组。

  • 是否启用记忆功能: 开启此功能后,插件会尝试使用 memory_schemadelete_memory_schema 解析/删除长期记忆,并在构建 prompt 时,替换 <memory> 标签。关闭此功能后,插件不会尝试解析。

  • 从大模型回复提取记忆的正则表达式: 请认真阅读上面关于 schema 的描述后修改。注意区分全角半角,注意要有捕获组。

  • 从大模型回复删除记忆的正则表达式: 请认真阅读上面关于 schema 的描述后修改。注意区分全角半角,注意要有捕获组。

  • 提取回复时,处理多个匹配项: 开启此开关后,等价于为正则表达式开启 g 标志(参考通过标志进行高级搜索),即尝试捕获每个符合正则表达式的文本。此选项适用于以下格式的多行回复:

    <骰子昵称>(<骰子 ID>):第一行文本
    <骰子昵称>(<骰子 ID>):第二行文本
    <骰子昵称>(<骰子 ID>):第三行文本
    

    此时,插件会将

    第一行文本
    
    第二行文本
    
    第三行文本
    

    分别作为三条回复,并分为三条消息发送。

  • 文本大模型的 API URL: 如题。

  • 文本大模型的 API Key: 如题。

  • 文本大模型的型号: 如题。

  • 文本大模型的最大生成长度: 如题。

  • temperature: 默认为 -1,即使用模型的默认参数。如果你不确定这是什么,就不要修改。

  • top_p: 默认为 -1,即使用模型的默认参数。如果你不确定这是什么,就不要修改。

  • 是否使用自定义 API 请求体: 用于接入如 charglm 等,需要在请求体中提供额外信息的模型。开启此功能后,将使用下方的「自定义 API 请求体」作为请求体,除注入 message 外,不再注入其他参数。如有需要,可以关闭上述「是否为文本大模型提供系统提示」开关。

  • 自定义 API 请求体: 开启上面的功能后,在此配置项中使用 JSON 格式填入自定义请求体。请务必保证 JSON 格式的正确性,例如全角半角字符等。

  • 不再请求 API 并使用下方的测试文本作为 API 回复: 开启此功能后,将不再实际请求文本大模型 API,并将「假响应的回复文本」中填入的内容作为 API 回复,使用 retrieve_schema 进行解析。此功能可以在不消耗 token 的情况下对正则表达式进行调试。

  • 假响应的回复文本: 开启上面的功能后,在此配置项中填入假回复以进行正则表达式测试。直接填入期望的回复内容即可,不要填入 API 的原始响应(JSON)。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published