Skip to main content

A Nonebot plugin, Multi-Model Chat System | Hybrid Scheduling·Search Augmented·Persona Customization

Project description

NoneBotPluginLogo

NoneBotPluginText

nonebot-plugin-moellmchats

✨ 混合专家模型调度LLM插件 | 混合调度·联网搜索·上下文优化·个性定制·Token节约·更加拟人 ✨

license pypi python

🚀 核心特性

  • MoE架构(混合专家模型调度):

    • 动态路由至最优模型,支持所有OpenAI兼容接口
    • 智能难度分级(简单/中等/复杂)自动匹配模型,Token消耗降低35%
  • 智能网络搜索整合:

    • 语义分析自动触发Tavily搜索,提供精准摘要
    • 支持任意LLM,大幅节约Token
  • 立体上下文管理:

    • 群组/用户双层级隔离存储,群组滑动窗口,用户滑动窗口+TTL过期机制
    • 支持上下文长度定制(默认群组10条/用户8条)
  • 个性化对话定制:

    • 用户级性格预设,支持动态切换与自定义模板
  • 工业级稳定性设计:

    • 对话冷却时间
    • 请求队列管理
    • 请求失败自动重试
  • 更加拟人的回复风格:

    • 分段发送回复
    • 每段根据回复内容长度增加延迟
    • 自定义发送表情包

📦 安装

使用 nb-cli 安装 在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装
nb plugin install nonebot-plugin-moellmchats
使用包管理器安装 在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令
pip
pip install nonebot-plugin-moellmchats
pdm
pdm add nonebot-plugin-moellmchats
poetry
poetry add nonebot-plugin-moellmchats
conda
conda install nonebot-plugin-moellmchats

打开 nonebot2 项目根目录下的 pyproject.toml 文件, 在 [tool.nonebot] 部分追加写入

plugins = ["nonebot_plugin_moellmchats"]

⚙️ 配置

.env 配置

在 nonebot2 项目的.env文件中添加下表中的必填配置

配置项 必填 默认值 说明
SUPERUSERS 超级用户,NoneBot自带配置项,本插件要求此项必填
NICKNAME 机器人昵称,NoneBot自带配置项,本插件要求此项必填
LOCALSTORE_USE_CWD 是否使用当前工作目录作为本地存储目录,如果为True,则会将本地存储目录设置为当前工作目录

例:

SUPERUSERS=["your qq"]  # 配置 NoneBot 超级用户
NICKNAME=["bot","机器人"]  # 配置机器人的昵称
#localstore配置
LOCALSTORE_USE_CWD=True #可选

本插件主要配置

由于文件较多,所以统一放在 nonebot_plugin_localstore.get_plugin_config_dir() 目录,具体参照NoneBot Plugin LocalStore
配置文件在首次运行时自动生成,可以先运行一下,再停止后手动修改。
注意:若是手动复制,因为json不能有注释,所以复制后记得删除注释以及末尾逗号。

基础配置 config.json(手动维护)

📌修改后需要重启。Tavily搜索: 获取API Key

{
  max_group_history: 10, // 群组上下文最大长度
  max_user_history: 8, // 每个用户上下文最大长度
  max_retry_times: 3, // 最大重试次数
  user_history_expire_seconds: 600, // 用户上下文过期时间
  cd_seconds: 0, // 每个用户冷却时间(秒)
  search_api: "Bearer your_tavily_key", //联网搜索tavily api key。开启搜索必填,且开启MoE才能使用
  fastai_enabled: false, // 快速AI助手开关。方便快速调用纯AI助手,无角色扮演。调用快速AI助手时,不会分段发送也不会发表情包。调用方法下文提到。
  emotions_enabled: false, // 是否开启表情包(只有stream和is_segmemt为true才会发送表情包,模型设置中设置)
  emotion_rate: 0.1, // 发送表情包概率(0-1)(经测试 LLM 几乎每句都会发送表情包,所以手动设置概率)
  emotions_dir: "absolute path", // 表情包目录,绝对路径
}

表情包目录结构示例:

your_absolute_path/
├── smile/
│   ├── smile1.jpg
│   ├── smile2.png
│   └── smile3.jpg
├── 滑稽/
│   ├── huaji001.png
│   ├── huaji002.jpg
│   └── huaji003.png
└── 阴险/
    ├── yinxian_a.jpg
    ├── yinxian_b.png
    └── yinxian_c.jpg

说明: 每个文件夹为表情包名字(中英皆可),用于LLM识别,每张图片名字任意。系统自动读取文件夹名字,不需要手动在prompt中添加说明。

模型管理 models.json(手动维护)

⚠️必填。其中url、model、key必填,其他可省略。只能手动修改,重启生效。

{
  "dpsk-chat": {
    "url": "https://api.deepseek.com/chat/completions",
    "key": "Bearer xxx",
    "model": "deepseek-chat",
    "temperature": 1.5,
    "max_tokens": 1024,
    "proxy": "http://127.0.0.1:7890",
    "stream": True, // 是否流式响应
    "is_segment": True // 是否开启分段发送(只有stream为true才会生效)
  },
  "dpsk-r1": {
    "url": "https://api.deepseek.com/chat/completions",
    "key": "Bearer xxxx",
    "model": "deepseek-reasoner",
    "stream": false,
    "top_k": 5,
    "top_p": 1.0
  }
}

智能调度配置 model_config.json(指令维护)

📌 默认不开启moe和网络搜索,支持QQ指令实时切换;若手动修改,重启生效。
模型名字必须为 medels.json 中的键值。

{
  use_moe: false, // 启用混合专家模式。若开启联网搜索,则需开启此项
  moe_models: {
    // 问题难度分级模型映射
    "0": "dpsk-chat", // 简单问题
    "1": "dpsk-chat", // 中等问题
    "2": "dpsk-r1", // 复杂问题
  },
  selected_model: "dpsk-r1", // 不启用MoE时的模型。最好填写上,在难度分级失败时也会回滚至此模型
  category_model: "glm-4-flash", // 问题分类模型(建议用免费或较小的模型)
  use_web_search: false, // 启用网络搜索
}

性格设定 temperaments.json (手动维护)

📌 不用写“你在群组”等设定,系统自动补全 | 修改后需重启生效

{
  "默认": "你是ai助手。回答像真人且尽量简短,回复格式为@id content", //性格默认值,可以不填,但是最好填上,没设置过性格的群友默认调用该性格
  "ai助手": "你是ai助手。回复格式为@id content", // ai助手,若开启快速调用纯ai助手,则需要填写
  "艾拉": "你是《可塑性记忆》中的角色“艾拉”,不怎么表现出感情的少女型Giftia。性格傲娇,当听到不想听的话语时,会说:'ERROR,没听清楚'。回答尽量简短"
}

用户性格设定 temperament_config.json (指令维护)

📌 全自动生成和命令配置,无需手动复制或修改 | 若手动修改,需重启生效

{
  "用户1的qq号": "ai助手",
  "用户2的qq号": "默认"
}

🎮 使用

指令表

指令 权限 范围 参数 说明
@Bot或以nickname开头 群聊 对话内容 聊天对话
性格切换 群聊 性格名称 发送切换性格、切换人格、人格切换 均可
查看性格 群聊 发送 查看性格、查看人格 均可
查看模型 群聊 查看当前 model_config 配置
ai 群聊 对话内容 若已开启和配置,快速调用纯ai助手。如 ai 你好
切换模型 超级管理员 群聊 模型名字 不使用moe时指定的模型
设置moe 超级管理员 群聊 0、1、开、关 是否开启混合专家调度模式
切换moe 超级管理员 群聊 难度 模型名字 难度为0、1、2,如:切换moe 0 dpsk-r1
设置联网 超级管理员 群聊 0、1、开、关 是否开启网络搜索,如:设置联网 0

效果图

冷却与队列

冷却与队列

联网搜索

联网搜索

一个ai驯服另一个ai的实录

橙色头像为本插件的bot,使用了qwq-32b模型

一个ai驯服另一个ai的实录

分段发送与表情包

分段发送与表情包

🔄 处理流程

graph TD
    A[用户提问] --> B{冷却检测}
    B -->|冷却中| C[进入等待队列]
    B -->|可响应| D{难度与联网评估}
    C -->|冷却结束| D
    D -->|需搜索| E[Tavily搜索]
    E --> F[搜索结果摘要]
    D -->|无需搜索| G[原始问题]
    F & G --> H{难度分级}
    H -->|简单| I[基础模型]
    H -->|中等| J[进阶模型]
    H -->|复杂| K[专家模型]
    I & J & K --> L[生成响应]
    L --> M[上下文存储]
    L --> N{API状态}
    N -->|成功| O[发送响应]
    N -->|失败| P{重试次数}
    P -->|未达上限| Q[延迟重试]
    P -->|已达上限| R[错误提示与上下文回滚]

核心机制说明

  1. 智能冷却系统

    • 独立计时:每个用户拥有独立冷却计时器(通过cd_seconds配置)

    • 队列管理:冷却期间的新消息进入队列,冷却结束自动处理

  2. 容错重试机制

    • 多级重试:网络错误时自动触发阶梯式重试(间隔:2s → 4s → 8s)
  3. 混合调度流程

    • 预检阶段:优先执行冷却状态检测和队列管理

    • 双评估层:并行分析「问题复杂度」与「实时信息需求」

    • 分级路由:简单问题直连轻量模型(响应速度提升40%),复杂问题调用专家模型(准确度提升60%)

  4. Token消耗降低

    • 大致可降低API调用失败率78%,Token浪费减少63%,同时保障高并发场景下的系统稳定性。

更新日志

2025-04-12

  • 新增:支持分段发送与表情包
  • 修复一些bug,优化性能和提升容错

鸣谢

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot_plugin_moellmchats-0.15.0.tar.gz (35.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nonebot_plugin_moellmchats-0.15.0-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file nonebot_plugin_moellmchats-0.15.0.tar.gz.

File metadata

File hashes

Hashes for nonebot_plugin_moellmchats-0.15.0.tar.gz
Algorithm Hash digest
SHA256 b319790fd3a5129aaf2db314b2e6421713ef6b9f716275062a6ad3d4b4f1336f
MD5 408076680435a111b427736ff25f48a7
BLAKE2b-256 6fdd2d0372106edbe0120f61dd506ffbcdeec4a3d5869dbdf58f7879d1ab1a46

See more details on using hashes here.

File details

Details for the file nonebot_plugin_moellmchats-0.15.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_moellmchats-0.15.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c9486be526133ecc0fce15f41b234c5894201e22daf85f8cecdc894e2f7bf803
MD5 596b2fc43c59dc5f98977e61c1be8d9d
BLAKE2b-256 e61a22ca1581949d9e22235762f0620505e484024391f17f6d2f1ed0ad62ef97

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page