Skip to content

插件编写指南

这份指南是一份循序渐进的 Neo-MoFox 插件开发教程。它围绕同一个示例插件(echo_demo)从最小可运行版本逐步演化到包含多组件、能调用 LLM、能查发消息、能持久化存储的完整实现。

指南不假设你已经熟悉 Bot 框架、组件化设计或事件驱动系统——所有概念都会在第一次用到时引入。但你需要具备基础的 Python 能力(类、函数、异步、导入)。

阅读方式

建议顺序阅读,因为后续章节会沿用前面章节的代码与概念。如果你想直接跳到某一章,请至少先读完 第 1 章第 3 章,确保环境与最小插件结构已建立。

指南地图

整份指南可以粗略压成六个阶段。每一步都建立在前一步的基础上:

text
第一阶段  最小落地       让插件真的能跑起来

第二阶段  配置与组件     给插件加上 Config / Command / Service / Tool

第三阶段  LLM 调用链     把 prompt 组织好,真正调模型

第四阶段  对话与编排     用 Chatter / Agent / Action / EventHandler 组织完整流程

第五阶段  系统入口与消息 Router / Adapter / MessageEnvelope 接通外部

第六阶段  公共入口层     plugin_system.api:适配器命令、存储、消息 API

下面按阶段列出全部章节。每章都附了一句话摘要,方便你按需回查。


第一阶段 · 最小落地

目标:理解插件是什么,写出一个能被系统识别和加载的最小插件。

章节标题摘要
1写在前面这份指南为谁而写、需要什么基础、读完后能做什么
2最小概念一个 Neo-MoFox 插件最少需要哪些东西
3第一个插件echo_demo 真正跑起来
4运行机制系统是怎么发现、加载、注册插件的
5插件结构规范的目录组织与文件分工

第二阶段 · 配置与第一组组件

目标:给插件接上 Config / Command / Service / Tool,理解“组件边界”这件事。

章节标题摘要
6配置系统BaseConfig / Field / TOML 配置与热重载
7Command 与 Service命令路由 + 跨组件复用的服务层
8第一个 Tool让 LLM 能调用的查询工具

第三阶段 · LLM 调用链

目标:从“组织 prompt”到“真正调一次模型”,把请求链跑通。

章节标题摘要
9Prompt APIPromptTemplate 注册、渲染、system reminder
10LLM API模型集合、LLMPayload、请求对象、非流式调用
11Tool 与 LLM让模型在对话中真正调用你的 Tool

第四阶段 · 对话与编排

目标:理解完整对话是怎么被组织出来的,以及各类组件在这一流程里的分工。

章节标题摘要
12Default Chatter 与 FSM内置 Chatter 的有限状态机模型
13Agent 编排Agent 怎样用私有工具集做局部任务
14Action 组件LLM 调用的“主动作”,负责执行有副作用的操作
15事件系统EventHandler 在系统时刻介入,拦截或扩展流程
15.5内置事件参考所有系统事件的 params 字段与可回写字段速查
16Chatter 组件自己写一个完整对话器(生成器模式)
16.5Stream(聊天流)聊天流是什么:stream_id / ChatStream / StreamContext 四层概念与可读字段

第五阶段 · 系统入口与消息链路

目标:把插件和外部世界接通——HTTP 入口、平台桥接、统一消息模型。

章节标题摘要
17Router 组件给插件开一个 FastAPI HTTP 子应用
18Adapter 组件平台与核心之间的双向翻译层
19消息模型MessageEnvelope / message_info / message_segment 三层

第六阶段 · 公共入口层

目标:从“认识组件”转向“插件作者真正日常使用的公共入口”——plugin_system.api

章节标题摘要
20总览与下一步回溯前面走过的路,引出 base / api / types 公共入口
21适配器命令adapter_api:生命周期管理 + send_adapter_command 请求/响应机制
22存储框架storage_api:JSON 存储 + PluginDatabase(独立 SQLite + CRUD/QueryBuilder)
23消息 APImessage_api 查历史消息 + send_api 发送新消息
24Stream APIstream_api:聊天流的创建、查询、上下文加载与清空
25Service APIservice_api:按签名查询 / 取得跨插件 Service 实例

三层公共入口速览

第六阶段会反复用到下面三层入口。如果你只想快速记住“东西从哪里拿”,可以直接看这张表:

入口路径角色
plugin_system.basesrc.app.plugin_system.base组件骨架基类(BasePlugin / BaseTool / BaseChatter 等)
plugin_system.apisrc.app.plugin_system.api运行时能力入口(adapter_api / storage_api / message_api / send_api / prompt_api / llm_api 等)
plugin_system.typessrc.app.plugin_system.types常用公共类型(Message / MessageType / PromptTemplate / LLMPayload / TaskType 等)

聚合入口:

python
from src.app.plugin_system import api, base, types

一条贯穿全指南的学习线

如果你把整份指南压成一条主线,它大致是这样的:

  1. 让插件能跑起来(第 1–5 章)
  2. 给插件加上组件(第 6–8 章)
  3. 接上模型(第 9–11 章)
  4. 组织完整对话(第 12–16 章)
  5. 接通外部(第 17–19 章)
  6. 回到日常入口(第 20–25 章)

走到第 6 阶段,你已经能独立写出:查历史消息 → 组织上下文 → 调模型 → 把结果发回去 → 顺便调平台 API → 把状态存进自己的 SQLite → 按需清空聊天流上下文 → 跨插件复用别人暴露的 Service 能力 的完整插件。

下一步去哪

读完本指南后,推荐继续看以下内容:

如果在阅读过程中遇到问题,可以先回到对应阶段的总览表,确认自己处在学习路径的哪个位置,再决定是继续往下读还是回头补基础。

贡献者

The avatar of contributor named as micraft1024a micraft1024a
The avatar of contributor named as minecraft1024a minecraft1024a

页面历史

Released under the GPL-3.0 License.