https://github.com/elflare/nonebot-plugin-moellmchats
✨ 混合专家模型调度LLM插件 | 混合调度·联网搜索·上下文优化·个性定制·Token节约 ✨
https://github.com/elflare/nonebot-plugin-moellmchats
chatgpt llm nonebot-plugin nonebot2 openai
Last synced: 3 months ago
JSON representation
✨ 混合专家模型调度LLM插件 | 混合调度·联网搜索·上下文优化·个性定制·Token节约 ✨
- Host: GitHub
- URL: https://github.com/elflare/nonebot-plugin-moellmchats
- Owner: Elflare
- License: gpl-3.0
- Created: 2025-03-03T04:28:53.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2025-03-03T10:43:26.000Z (3 months ago)
- Last Synced: 2025-03-03T10:46:51.317Z (3 months ago)
- Topics: chatgpt, llm, nonebot-plugin, nonebot2, openai
- Language: Python
- Homepage:
- Size: 239 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
- [🚀 核心特性](#-核心特性)
- [📦 安装](#-安装)
- [⚙️ 配置](#️-配置)
- [基础配置](#基础配置-configjson手动维护)
- [模型管理](#模型管理-modelsjson手动维护)
- [智能调度配置](#智能调度配置-model_configjson指令维护)
- [性格设定](#性格设定-temperamentsjson-手动维护)
- [用户性格设定](#用户性格设定-user_temperamentsjson-指令维护)
- [🎮 使用](#-使用)
- [指令表](#指令表)
- [效果图](#效果图)
- [🔄 处理流程](#-处理流程)
- [鸣谢](#鸣谢)## 🚀 核心特性
- MoE架构(混合专家模型调度):
- 动态路由至最优模型,支持所有OpenAI兼容接口
- 智能难度分级(简单/中等/复杂)自动匹配模型,Token消耗降低35%- 智能网络搜索整合:
- 语义分析自动触发Tavily搜索,提供精准摘要
- 立体上下文管理:
- 群组/用户双层级隔离存储,群组滑动窗口,用户滑动窗口+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_llmchat"]
## ⚙️ 配置
由于文件较多,所以统一放在 `data/moe_llm_chats/` 目录。
配置文件在首次运行时自动生成,可以先运行一下,再停止后手动修改。
**注意**:若是手动复制,因为json不能有注释,所以复制后记得删除。### 基础配置 `config.json`(手动维护)
📌修改后需要重启。Tavily搜索: [获取API Key](https://tavily.com/)。
```json5
{
max_group_history: 10, // 群组上下文最大长度
max_user_history: 8, // 每个用户上下文最大长度
user_history_expire_seconds: 600, // 用户上下文过期时间
cd_seconds: 0, // 每个用户冷却时间(秒)
search_api: "Bearer your_tavily_key", //联网搜索tavily api key。开启搜索必填
fastai_enabled: false, // 快速AI助手开关
max_retry_times: 3, // 最大重试次数
}
```### 模型管理 `models.json`(手动维护)
⚠️**必填**。其中**url、model、key**必填,其他可省略。只能手动修改,重启生效。
```json
{
"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"
},
"dpsk-r1": {
"url": "https://api.deepseek.com/chat/completions",
"key": "Bearer xxxx",
"model": "deepseek-reasoner",
"top_k": 5,
"top_p": 1.0
}
}
```### 智能调度配置 `model_config.json`(指令维护)
📌 默认不开启moe和网络搜索,支持QQ指令实时切换;若手动修改,重启生效。
**模型名字必须为 `medels.json` 中的键值。**```json5
{
use_moe: false, // 启用混合专家模式
moe_models: {
// 问题难度分级模型映射
"0": "dpsk-chat", // 简单问题
"1": "dpsk-chat", // 中等问题
"2": "dpsk-r1", // 复杂问题
},
selected_model: "dpsk-r1", // 单一模式默认模型
category_model: "glm-4-flash", // 问题分类模型(建议用免费或较小的模型)
use_web_search: false, // 启用网络搜索
}
```### 性格设定 `temperaments.json` (手动维护)
📌 不用写“你在群组”等设定,系统自动补全 | 修改后需重启生效
```json
{
"默认": "你是xx角色。回答像真人且尽量简短,回复格式为@id content",
"ai助手": "你是ai助手。回答像真人且尽量简短,回复格式为@id content"
"雌小鬼": "你是一个雌小鬼"
}
```### 用户性格设定 `user_temperaments.json` (指令维护)
📌 全自动生成和命令配置,无需手动复制或修改 | 若手动修改,需重启生效
```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` |### 效果图
冷却与队列

联网搜索
## 🔄 处理流程
```mermaid
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%,同时保障高并发场景下的系统稳定性。## 鸣谢
- [Nonebot](https://nonebot.dev/) 项目所发布的高品质机器人框架
- [nonebot-plugin-template](https://github.com/A-kirami/nonebot-plugin-template) 所发布的插件模板
- [nonebot-plugin-llmchat](https://github.com/FuQuan233/nonebot-plugin-llmchat) 部分参考
- [deepseek-r1](https://deepseek.com/) 我和共同创作README
- 以及所有LLM开发者