Files
st/docs/扩展模块修复说明.md
2026-02-11 23:44:09 +08:00

6.4 KiB
Raw Blame History

扩展模块修复说明

问题描述

  1. 数据库错误:点击扩展配置时报错 ERROR: relation "ai_extension_settings" does not exist
  2. UI 不符合预期:原来是表格式,用户希望是折叠面板式(类似原版 SillyTavern

修复内容

1. 简化数据库设计

问题:原设计使用独立的 ai_extension_settings 表存储用户配置,导致表不存在时报错。

解决方案:取消 ai_extension_settings 表,直接将配置存储在 ai_extensions 表的 settings 字段中。

修改文件

  • server/model/app/ai_extension.go - 注释掉 AIExtensionSettings 结构体
  • server/initialize/gorm.go - 移除 AIExtensionSettings 表注册
  • server/service/app/extension.go - 简化配置获取和更新逻辑

2. 重新设计 UI 为折叠面板式

新界面特点

  • 折叠面板布局(类似原版 SillyTavern
  • 每个扩展可展开查看详情和配置
  • 启用/禁用开关在标题栏
  • 配置项根据 manifest.json 动态生成
  • 支持多种配置类型:
    • 文本输入text/string
    • 数字输入number
    • 布尔开关boolean/checkbox
    • 下拉选择select
    • 文本域textarea
    • 滑块slider

新文件

  • web-app-vue/src/views/extension/ExtensionListNew.vue - 全新的折叠面板式界面

修改文件

  • web-app-vue/src/router/index.ts - 更新路由指向新界面

3. 优化配置处理逻辑

后端改进

// GetExtensionSettings - 改进版
func (es *ExtensionService) GetExtensionSettings(userID, extensionID uint) (map[string]interface{}, error) {
    // 1. 验证扩展存在
    // 2. 返回扩展的 settings 字段
    // 3. 如果为空,从 manifestData 中提取默认配置
    // 4. 确保总是返回有效的配置对象(至少是空对象)
}

// UpdateExtensionSettings - 简化版
func (es *ExtensionService) UpdateExtensionSettings(userID, extensionID uint, settings map[string]interface{}) error {
    // 直接更新扩展表的 settings 字段
}

使用说明

安装扩展

支持三种安装方式:

  1. 从文件导入:上传 manifest.json 文件
  2. 从 Git 安装:输入 Git 仓库 URL支持 GitHub、GitLab、Gitee 等)
  3. 从 URL 安装:直接输入 manifest.json 文件的 URL

管理扩展

  1. 启用/禁用:点击扩展标题栏的开关
  2. 查看详情:点击扩展面板展开
  3. 配置扩展:展开后直接编辑配置项,自动保存
  4. 导出扩展:点击"导出"按钮下载 manifest.json
  5. 卸载扩展:点击删除按钮(系统扩展不可卸载)

配置项说明

扩展的配置项根据 manifest.json 中的 settings 定义自动生成。例如:

{
  "name": "example-extension",
  "settings": {
    "apiKey": {
      "type": "text",
      "label": "API 密钥",
      "description": "请输入您的 API 密钥",
      "placeholder": "sk-..."
    },
    "maxRetries": {
      "type": "number",
      "label": "最大重试次数",
      "min": 1,
      "max": 10,
      "step": 1
    },
    "enabled": {
      "type": "boolean",
      "label": "启用此功能"
    }
  }
}

manifest.json 配置项类型

支持的配置项类型:

类型 说明 示例
text / string 文本输入框 API 密钥、URL 等
number 数字输入框 重试次数、超时时间等
boolean / checkbox 开关 启用/禁用功能
select 下拉选择 选择模型、语言等
textarea 多行文本 提示词、说明文字等
slider 滑块 温度、概率等

测试步骤

  1. 重启后端服务:确保新的代码生效
  2. 访问扩展管理页面/extension
  3. 安装一个测试扩展
    • 创建一个简单的 manifest.json
    • 从文件导入或 Git URL 安装
  4. 测试配置功能
    • 点击扩展面板展开
    • 修改配置项
    • 刷新页面确认配置已保存
  5. 测试启用/禁用
    • 点击开关切换状态
    • 确认状态已保存

示例 manifest.json

{
  "name": "example-extension",
  "display_name": "示例扩展",
  "version": "1.0.0",
  "description": "这是一个示例扩展",
  "author": "Your Name",
  "type": "ui",
  "category": "utilities",
  "settings": {
    "enabled": {
      "type": "boolean",
      "label": "启用扩展",
      "description": "是否启用此扩展的功能",
      "default": true
    },
    "apiEndpoint": {
      "type": "text",
      "label": "API 端点",
      "description": "API 服务器地址",
      "placeholder": "https://api.example.com"
    },
    "timeout": {
      "type": "number",
      "label": "超时时间(秒)",
      "min": 1,
      "max": 300,
      "step": 1,
      "default": 30
    },
    "model": {
      "type": "select",
      "label": "选择模型",
      "options": [
        { "label": "GPT-4", "value": "gpt-4" },
        { "label": "GPT-3.5", "value": "gpt-3.5-turbo" }
      ],
      "default": "gpt-3.5-turbo"
    },
    "prompt": {
      "type": "textarea",
      "label": "系统提示词",
      "rows": 5,
      "placeholder": "输入系统提示词..."
    },
    "temperature": {
      "type": "slider",
      "label": "温度",
      "min": 0,
      "max": 2,
      "step": 0.1,
      "default": 1.0
    }
  }
}

技术细节

数据库字段

扩展配置存储在 ai_extensions 表的以下字段:

  • manifest_data (JSONB):完整的 manifest.json 内容,包含 settings 定义
  • settings (JSONB):用户的实际配置值

配置加载顺序

  1. ai_extensions.settings 读取用户配置
  2. 如果为空,从 ai_extensions.manifest_data.settings 提取默认值
  3. 合并配置,用户配置优先

配置保存

用户修改配置后,直接更新 ai_extensions.settings 字段。

注意事项

  1. 配置格式manifest.json 中的 settings 字段是配置项的定义schema而不是配置值
  2. 默认值:可以在配置项定义中指定 default 字段
  3. 验证:前端会根据类型自动验证(如 minmaxstep 等)
  4. 自动保存:修改配置后会自动保存,无需手动点击保存按钮

未来改进

  • 支持更多配置项类型(颜色选择器、文件选择器等)
  • 配置项分组和标签页
  • 配置导入/导出
  • 配置重置到默认值
  • 配置历史记录
  • 扩展依赖检查和冲突提示