{"id":25921838,"url":"https://github.com/elflare/nonebot-plugin-moellmchats","last_synced_at":"2026-05-11T17:35:59.134Z","repository":{"id":280421986,"uuid":"941801748","full_name":"Elflare/nonebot-plugin-moellmchats","owner":"Elflare","description":"✨ 混合专家模型调度LLM插件 | 混合调度·联网搜索·上下文优化·个性定制·Token节约 ✨","archived":false,"fork":false,"pushed_at":"2025-03-03T10:43:26.000Z","size":245,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-03T10:46:51.317Z","etag":null,"topics":["chatgpt","llm","nonebot-plugin","nonebot2","openai"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Elflare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-03T04:28:53.000Z","updated_at":"2025-03-03T10:42:42.000Z","dependencies_parsed_at":"2025-03-03T10:46:53.028Z","dependency_job_id":"597ba749-de9a-4f67-bb8c-184a5310b8b9","html_url":"https://github.com/Elflare/nonebot-plugin-moellmchats","commit_stats":null,"previous_names":["elflare/nonebot-plugin-moellmchats"],"tags_count":1,"template":false,"template_full_name":"A-kirami/nonebot-plugin-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elflare%2Fnonebot-plugin-moellmchats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elflare%2Fnonebot-plugin-moellmchats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elflare%2Fnonebot-plugin-moellmchats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elflare%2Fnonebot-plugin-moellmchats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Elflare","download_url":"https://codeload.github.com/Elflare/nonebot-plugin-moellmchats/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241696182,"owners_count":20004748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatgpt","llm","nonebot-plugin","nonebot2","openai"],"created_at":"2025-03-03T16:16:21.352Z","updated_at":"2026-05-11T17:35:59.126Z","avatar_url":"https://github.com/Elflare.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e \u003ca href=\"https://v2.nonebot.dev/store\"\u003e\u003cimg src=\"https://github.com/A-kirami/nonebot-plugin-template/blob/resources/nbp_logo.png\" width=\"180\" height=\"180\" alt=\"NoneBotPluginLogo\"\u003e\u003c/a\u003e \u003cbr\u003e \u003cp\u003e\u003cimg src=\"https://github.com/A-kirami/nonebot-plugin-template/blob/resources/NoneBotPlugin.svg\" width=\"240\" alt=\"NoneBotPluginText\"\u003e\u003c/p\u003e \u003c/div\u003e\u003cdiv align=\"center\"\u003e\n\n# nonebot-plugin-moellmchats\n\n✨ 混合专家模型调度LLM插件 | 混合调度·联网搜索·上下文优化·个性定制·Token节约·更加拟人 ✨\n\n\u003ca href=\"./LICENSE\"\u003e \u003cimg src=\"https://img.shields.io/github/license/Elflare/nonebot-plugin-moellmchats.svg\" alt=\"license\"\u003e \u003c/a\u003e \u003ca href=\"https://pypi.python.org/pypi/nonebot-plugin-moellmchats\"\u003e \u003cimg src=\"https://img.shields.io/pypi/v/nonebot-plugin-moellmchats.svg\" alt=\"pypi\"\u003e \u003c/a\u003e \u003cimg src=\"https://img.shields.io/badge/python-3.10+-blue.svg\" alt=\"python\"\u003e\u003c/div\u003e\n\n- [🚀 核心特性](#-核心特性)\n- [📦 安装](#-安装)\n- [⚙️ 配置](#️-配置)\n- [🎮 使用](#-使用)\n- [🔄 处理流程](#-处理流程)\n- [更新日志](#更新日志)\n- [鸣谢](#鸣谢)\n\n## 🚀 核心特性\n\n- **MoE架构（混合专家模型调度）**：动态路由至最优模型，支持所有OpenAI兼容接口；智能难度分级（简单/中等/复杂）自动匹配模型，Token消耗降低35%\n\n- **智能网络搜索整合**：语义分析自动触发Tavily搜索，提供精准摘要，支持任意LLM\n\n- **立体上下文管理**：群组/用户双层级隔离存储，群组滑动窗口，用户滑动窗口+TTL过期机制\n\n- **个性化对话定制**：用户级性格预设，支持动态切换与自定义模板\n\n- **工业级稳定性设计**：对话冷却时间 / 请求队列管理 / 请求失败自动重试\n\n- **更加拟人的回复风格**：分段发送回复，每段根据内容长度增加延迟，支持自定义发送表情包\n\n- **多模态视觉支持**：支持识别用户发送/引用的图片，以及工具调用中插件返回的图片（需配置视觉模型如GPT-4o）；双轨路由机制：判定无需看图时自动回退至普通文本模型以节省成本；历史记录自动回退为纯文本，大幅节省Token\n\n- **极省Token的工具调用架构（Function Calling）**：预分类-后注入两阶段设计，仅在需要时将对应Tool Schema注入主模型；支持编写原生Python工具（`custom_tools/`）；支持覆写NoneBot插件描述（`custom_plugin_info.json`）\n\n## 📦 安装\n\n\u003cdetails\u003e\n\u003csummary\u003e使用 nb-cli 安装\u003c/summary\u003e\n在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装\n\n    nb plugin install nonebot-plugin-moellmchats\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e使用包管理器安装\u003c/summary\u003e\n在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令\n\n\u003cdetails\u003e\n\u003csummary\u003epip\u003c/summary\u003e\n\n    pip install nonebot-plugin-moellmchats\n\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003euv\u003c/summary\u003e\n\n    uv add nonebot-plugin-moellmchats\n\n\u003c/details\u003e\n\n\u003c/details\u003e\n\n## ⚙️ 配置\n\n### `.env` 配置\n\n在 nonebot2 项目的`.env`文件中添加下表中的必填配置\n\n|       配置项       | 必填 | 默认值 |                                          说明                                          |\n| :----------------: | :--: | :----: | :------------------------------------------------------------------------------------: |\n|     SUPERUSERS     |  是  |   无   |                    超级用户，NoneBot自带配置项，本插件要求此项必填                     |\n|      NICKNAME      |  是  |   无   |                   机器人昵称，NoneBot自带配置项，本插件要求此项必填                    |\n| LOCALSTORE_USE_CWD |  否  |   无   | 是否使用当前工作目录作为本地存储目录 |\n|   COMMAND_START    |  否  |   /    |                           命令前缀                           |\n\n例：\n\n```.env\nSUPERUSERS=[\"your qq\"]\nNICKNAME=[\"bot\",\"机器人\"]\nLOCALSTORE_USE_CWD=True  # 可选\nCOMMAND_START=[\"/\",\"\"]   # 可选\n```\n\n### 本插件主要配置\n\n配置文件统一放在 `nonebot_plugin_localstore.get_plugin_config_dir()` 目录（参照 [NoneBot Plugin LocalStore](https://github.com/nonebot/plugin-localstore)），**首次运行时自动生成**。\n\n| 文件 | 维护方式 | 说明 | 修改后是否需重启 |\n| :--: | :------: | ---- | :--------------: |\n| `providers.toml` | 手动 | **核心**：服务商/API密钥/模型参数，支持四级参数继承 | 否（`刷新模型`指令） |\n| `config.json` | 手动 | 基础行为（历史长度、冷却、表情包等） | 是 |\n| `model_config.json` | 指令/手动 | MoE调度、视觉/工具开关，支持指令实时切换 | 指令实时；手动需重启 |\n| `temperaments.json` | 手动 | 性格预设的system prompt | 是 |\n| `custom_plugin_info.json` | 手动 | 覆写NoneBot插件描述以提升LLM调用精准度 | 是 |\n| `custom_tools/` | 手动 | 原生Python函数，供LLM直接调用 | 否（`刷新工具`指令） |\n\n**[→ 完整配置参考（含所有字段说明与示例）请见 Wiki](docs/configuration.md)**\n\n其他Wiki页面：[自定义工具开发](docs/custom-tools.md) · [插件集成](docs/plugin-integration.md) · [性格系统](docs/personality.md)\n\n## 🎮 使用\n\n### 指令表\n\n|            指令             |    权限    |    范围     |        参数        |                                   说明                                    |\n| :-------------------------: | :--------: | :---------: | :----------------: | :-----------------------------------------------------------------------: |\n|    @Bot或以nickname开头     |     无     |    群聊     |      对话内容      |                                 聊天对话                                  |\n|          性格切换           |     无     |    群聊     |      性格名称      |                  发送`切换性格、切换人格、人格切换` 均可                  |\n|          查看性格           |     无     |    群聊     |         无         |                      发送 `查看性格、查看人格` 均可                       |\n|             ai              |     无     |    群聊     |      对话内容      |              若已开启和配置，快速调用纯ai助手。如 `ai 你好`               |\n|          查看模型           | 超级管理员 | 私聊 / 群聊 | 搜索关键词（选填） |      列出可用模型，支持多关键词模糊搜索（如：`查看模型 openai 4o`）       |\n|          查看配置           | 超级管理员 | 私聊 / 群聊 |         无         |               可视化展示当前大模型各项运行状态与绑定的模型                |\n|          刷新模型           | 超级管理员 | 私聊 / 群聊 |         无         |               重新读取 TOML 并自动拉取各服务商最新模型列表                |\n|           设置moe           | 超级管理员 | 私聊 / 群聊 |    0、1、开、关    |                         是否开启混合专家调度模式                          |\n|          设置联网           | 超级管理员 | 私聊 / 群聊 |    0、1、开、关    |                    是否开启网络搜索，如：`设置联网 开`                    |\n|          切换模型           | 超级管理员 | 私聊 / 群聊 |    模型名或编号    |                不使用moe时指定的默认模型，如：`切换模型 1`                |\n|           切换moe           | 超级管理员 | 私聊 / 群聊 | 难度 模型名或编号  |         难度为0、1、2，如：`切换moe 0 dpsk-chat` 或 `切换moe 0 2`         |\n|        设置视觉模型         | 超级管理员 | 私聊 / 群聊 |    模型名或编号    |                    设置视觉模型，如：`设置视觉模型 3`                     |\n|        设置分类模型         | 超级管理员 | 私聊 / 群聊 |    模型名或编号    |                    设置分类模型，如：`设置分类模型 1`                     |\n|      设置工具/函数调用      | 超级管理员 | 私聊 / 群聊 |    0、1、开、关    |              控制是否开启函数调用机制，如：`设置工具调用 开`              |\n|          刷新工具           | 超级管理员 | 私聊 / 群聊 |         无         |                              热重载工具函数                               |\n|         插件黑名单          | 超级管理员 | 私聊 / 群聊 |         无         |                     查看当前禁止大模型调用的插件列表                      |\n|        添加插件黑名单        | 超级管理员 | 私聊 / 群聊 |      插件标识      |                   将插件加入黑名单，禁止大模型代为调用                    |\n|        移除插件黑名单        | 超级管理员 | 私聊 / 群聊 |      插件标识      |                     从大模型调用黑名单中释放特定插件                      |\n|          设置私聊           | 超级管理员 | 私聊 / 群聊 |    0、1、开、关    |                         是否开启超级管理员私聊bot                         |\n|    重置我的 / 清空上下文    |     无     | 私聊 / 群聊 |         无         |          清空自己的上下文对话记忆及CD状态（群聊中需要@Bot触发）           |\n|        重置全部对话         | 超级管理员 | 私聊 / 群聊 |         无         |        清空所有用户的个人上下文及所有群聊环境记忆（群聊中需@Bot）         |\n|   查看常驻插件 / 常驻插件   | 超级管理员 | 私聊 / 群聊 |         无         |         查看当前无视分类模型、强制注入给大模型的常驻插件/函数列表         |\n| 添加常驻插件 / 添加常驻函数 | 超级管理员 | 私聊 / 群聊 |   插件/函数标识    | 将指定插件或函数设为常驻，强制大模型加载（如：`添加常驻插件 web_search`） |\n| 移除常驻插件 / 移除常驻函数 | 超级管理员 | 私聊 / 群聊 |   插件/函数标识    |                   从常驻插件列表中移除指定的插件或函数                    |\n|    查看消耗 / 查询token     | 超级管理员 | 私聊 / 群聊 | 数量或范围（选填） | 查看API Token消耗记录。支持数量(如:`5`)、区间(如:`10-15`)、倒数(如:`-50`) |\n\n### 效果图\n\n**冷却与队列**\n\n![冷却与队列](./imgs/cd.png)\n\n**联网搜索**\n\n![联网搜索](./imgs/search.png)\n\n**一个ai驯服另一个ai的实录**\n\n\u003e 橙色头像为本插件的bot，使用了qwq-32b模型。（注：为了防止上下文干扰，新版的快速AI助手不再有群聊上下文，只保留用户上下文）\n\n![一个ai驯服另一个ai的实录](./imgs/aivsai.jpg)\n\n**分段发送与表情包**\n\n![分段发送与表情包](./imgs/segment_and_emotion.jpg)\n\n**连续工具调用**\n\n![连续工具调用](./imgs/function_call.jpg)\n\n**调用其他插件**\n\n![调用其他插件](./imgs/call_other_plugins.jpg)\n\n## 🔄 处理流程\n\n```mermaid\nflowchart TD\n    A[用户提问] --\u003e B{冷却/队列检测}\n    B --\u003e|通过| C[分类模型 Categorizer]\n\n    C --\u003e C_Cond(一次性综合判定：\u003cbr\u003e筛选所需插件 + 视觉需求 + 难度级别)\n    C_Cond --\u003e D[只组装所需工具信息\u003cbr\u003e并动态路由至最优模型]\n\n    D --\u003e E((大模型生成回复))\n\n    E --\u003e F{是否触发工具调用?}\n\n    F --\u003e|是| G[执行：原生Python函数\u003cbr\u003e / 本地指令 / 联网搜索]\n    G --\u003e H[工具结果追加至临时上下文]\n    H --\u003e|携带执行结果闭环重试| E\n\n    F --\u003e|否| I[发送最终响应文本]\n```\n\n**核心机制说明**\n\n1. **智能冷却系统**：每个用户拥有独立冷却计时器（`cd_seconds`配置）；冷却期间的新消息进入队列，冷却结束自动处理\n\n2. **容错重试机制**：网络错误时自动触发阶梯式重试（间隔：2s → 4s → 8s）\n\n3. **混合调度流程**：预检阶段执行冷却状态检测；并行分析「问题复杂度」与「实时信息需求」；简单问题直连轻量模型，复杂问题调用专家模型\n\n4. **Token消耗降低**：动态Schema注入，日常聊天不携带工具说明，仅在触发特定任务时按需加载对应插件的Schema\n\n## 更新日志\n\n\u003e **📢 完整历史更新日志请移步 [CHANGELOG.md](./CHANGELOG.md) 查看。**\n\n## 鸣谢\n\n- [Nonebot](https://nonebot.dev/) 项目所发布的高品质机器人框架\n- [nonebot-plugin-template](https://github.com/A-kirami/nonebot-plugin-template) 所发布的插件模板\n- [nonebot-plugin-llmchat](https://github.com/FuQuan233/nonebot-plugin-llmchat) 部分参考\n- [deepseek-r1](https://deepseek.com/) 我和共同创作README\n- 以及所有LLM开发者\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felflare%2Fnonebot-plugin-moellmchats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felflare%2Fnonebot-plugin-moellmchats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felflare%2Fnonebot-plugin-moellmchats/lists"}