Files
st/docs/扩展功能模块开发文档.md
2026-02-14 06:20:05 +08:00

95 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

1. 系统架构概述本系统采用前后端分离架构,旨在支持高度自定义的角色扮演体验。
前端 (Vue 3):负责 UI 渲染、插件面板挂载、脚本沙箱执行及动态 HTML 处理。
后端 (Go)处理业务逻辑、Prompt 组装、插件权限校验及静态资源分发。
数据库 (PostgreSQL)存储用户数据、角色卡设定、对话历史及插件配置JSONB
2. 插件分类定义系统支持以下两类插件,并区分 公共 (Public) 与 私人 (Private) 权限:
插件类型实现技术核心功能设定集 (Lorebook)后端注入 + 数据库检索关键词触发知识点注入 Prompt。
功能扩展 (Extension)前端沙箱 (Iframe/JS)增加 UI 面板、导入脚本库、渲染自定义 HTML。
3. 数据库模型设计3.1 插件主表 (plugins)
```SQL
CREATE TABLE plugins (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(100) NOT NULL,
type VARCHAR(20) NOT NULL, -- 'lorebook' 或 'extension'
is_public BOOLEAN DEFAULT false,
owner_id UUID REFERENCES users(id),
manifest JSONB, -- 存储版本、作者、入口点等元数据
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
3.2 设定条目表 (lore_items)
```SQL
CREATE TABLE lore_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
plugin_id UUID REFERENCES plugins(id) ON DELETE CASCADE,
keywords TEXT[], -- 触发词:["魔法", "火球"]
content TEXT NOT NULL, -- 注入内容
priority INT DEFAULT 10 -- 插入顺序
);
```
3.3 用户配置表 (user_plugin_configs)
```SQL
CREATE TABLE user_plugin_configs (
user_id UUID REFERENCES users(id),
plugin_id UUID REFERENCES plugins(id),
is_enabled BOOLEAN DEFAULT true,
settings JSONB, -- 存储插件的个性化设置
PRIMARY KEY (user_id, plugin_id)
);
```
4. 后端开发:设定集注入逻辑 (Go)
4.1 Prompt 组装流程后端在向 LLM 发送请求前,需执行以下伪逻辑:
分词匹配:提取用户最新输入及其上下文,比对数据库中的 keywords。
内容提取:获取命中条目的 content。
模板拼接:
```Plaintext
{{System_Prompt}}
[相关设定注入区]
{{Injected_Lore_Content}}
----------------
{{Chat_History}}
{{User_Input}}
```
5. 前端开发:扩展功能实现 (Vue 3)
5.1 插件面板挂载参考 src/Panel.vue 的设计,利用动态组件加载插件配置:功能:读取插件的 manifest.settings_schema。交互通过 Vue 响应式表单实时预览设置效果,并保存至后端 JSONB 字段。
5.2 脚本沙箱与 HTML 渲染参考你提供的 Iframe.vue 逻辑为“酒馆助手”类插件提供运行环境A. 沙箱初始化使用不可见的 <iframe> 运行插件 JS防止污染主页面全局变量。通过 postMessage 实现主窗口与插件的通信。B. 动态 HTML 接管在聊天渲染组件中预留“渲染钩子”JavaScript
```
// 在消息渲染循环中
const renderMessage = (msg) => {
if (helperPlugin.enabled && helperPlugin.hasRenderer) {
// 调用插件提供的 HTML 渲染逻辑
return helperPlugin.process(msg.content);
}
return standardMarkdownRender(msg.content);
};
```
6. 目录结构规范后端存储 (Go 服务端)
```Plaintext
/storage/plugins
/public/ # 公共插件(如官方酒馆助手)
/tavern-helper/
manifest.json
index.js
/private/ # 用户上传
/{user_id}/
/my-custom-ui/
```
前端状态 (Pinia/Vuex)
```TypeScript
interface PluginState {
enabledPlugins: Plugin[];
activeLore: LoreItem[];
// 存储插件注入的自定义 HTML 元素
injectedUIElements: Map<string, HTMLElement>;
}
```
7. 开发路线图 (Roadmap)
阶段一 (核心):完成 Go 后端的关键词匹配算法,实现简单的设定集注入。
阶段二 (管理):开发 Vue 前端的插件管理列表,支持从 JSON 导入设定集。
阶段三 (高级):实现基于 Iframe 的脚本加载器,支持插件向侧边栏注入自定义 HTML 面板。
阶段四 (优化):引入 PostgreSQL 的向量搜索 (pgvector),取代简单的关键词匹配,实现语义级设定调取