模型编辑器(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/19.1-model-editor
翻译时间:2026-06-09T16:12:31.987Z
翻译模型:deepseek-chat
原文字符数:9971
项目:Open WebUI (open-webui)
---
模型编辑器
相关源文件
以下文件为本 wiki 页面的生成提供了上下文:
src/lib/apis/knowledge/index.tssrc/lib/components/admin/Functions.sveltesrc/lib/components/admin/Settings/Evaluations/ArenaModelModal.sveltesrc/lib/components/admin/Settings/Evaluations/Model.sveltesrc/lib/components/workspace/Knowledge.sveltesrc/lib/components/workspace/Knowledge/CreateKnowledgeBase.sveltesrc/lib/components/workspace/Models.sveltesrc/lib/components/workspace/Models/Capabilities.sveltesrc/lib/components/workspace/Models/Knowledge.sveltesrc/lib/components/workspace/Models/ModelEditor.sveltesrc/lib/components/workspace/Prompts.sveltesrc/lib/components/workspace/Tools.sveltesrc/lib/components/workspace/common/AccessControl.sveltesrc/lib/components/workspace/common/AccessControlModal.svelte
模型编辑器是创建和配置自定义模型定义(在 Ollama 语境中常称为"Modelfiles",或"系统角色")的主要界面。它允许用户将基础 LLM 模型与特定的系统提示词、RAG(检索增强生成)知识库、工具集和能力标志进行封装。
组件概览
模型编辑器主要在 ModelEditor.svelte src/lib/components/workspace/Models/ModelEditor.svelte:1-264 中实现。它作为一个统一的表单,既可用于创建新模型,也可用于编辑现有模型。该组件协调多个子组件来管理模型元数据和行为的各个方面。
关键数据结构
编辑器管理一个复杂的 info 对象,该对象映射到后端模型模式:
| 字段 | 类型 | 描述 |
|---|---|---|
id | string | 模型的唯一标识符,自动从名称进行 slug 化处理 src/lib/components/workspace/Models/ModelEditor.svelte:59-71 |
name | string | 在 UI 中显示的人类可读名称 src/lib/components/workspace/Models/ModelEditor.svelte:60-60 |
params.system | string | 系统提示词/指令 src/lib/components/workspace/Models/ModelEditor.svelte:73-86 |
meta.knowledge | Array | 关联的知识库文档或集合 src/lib/components/workspace/Models/ModelEditor.svelte:147-153 |
meta.capabilities | Object | 功能标志布尔值,如 vision 或 web_search src/lib/components/workspace/Models/ModelEditor.svelte:100-100 |
meta.toolIds | Array | 关联的工具 ID 列表 src/lib/components/workspace/Models/ModelEditor.svelte:155-161 |
meta.skillIds | Array | 关联的技能 ID 列表 src/lib/components/workspace/Models/ModelEditor.svelte:163-169 |
meta.filterIds | Array | 关联的过滤器/函数 ID 列表 src/lib/components/workspace/Models/ModelEditor.svelte:171-177 |
access_grants | Array | 用户和组的权限列表 src/lib/components/workspace/Models/ModelEditor.svelte:105-105 |
来源:src/lib/components/workspace/Models/ModelEditor.svelte:59-241
数据流与逻辑
编辑器处理 UI 状态与 API 需求之间的数据转换。例如,在创建模型时,id 会自动从 name 进行 slug 化处理,将空格替换为连字符并移除非字母数字字符 src/lib/components/workspace/Models/ModelEditor.svelte:64-71。
模型配置流程
下图展示了模型编辑器如何将来自各个工作区实体的数据编排成一个统一的模型定义。
模型定义组装
graph TD
subgraph "工作区实体"
T["Tools.svelte"]
K["Knowledge.svelte"]
F["Functions.svelte"]
S["SkillsSelector.svelte"]
end
subgraph "模型编辑器逻辑"
ME["ModelEditor.svelte"]
SH["submitHandler()"]
AC["AccessControl.svelte"]
end
T -- "toolIds" --> ME
K -- "knowledge" --> ME
F -- "filterIds" --> ME
S -- "skillIds" --> ME
ME --> SH
AC -- "accessGrants" --> SH
SH --> API["onSubmit(info)"]
来源:src/lib/components/workspace/Models/ModelEditor.svelte:109-243、src/lib/components/workspace/Tools.svelte:159-162、src/lib/components/workspace/Knowledge.svelte:84-114、src/lib/components/workspace/Models/ModelEditor.svelte:93-97
界面组件
编辑器由多个专门的子组件组成:
1. 功能选择器
Capabilities.svelte 组件管理功能标志,这些标志告知前端和后端如何处理模型的请求。
- 视觉(Vision):模型接受图像输入
src/lib/components/workspace/Models/Capabilities.svelte:10-13 - 网络搜索(Web Search):启用网络搜索引擎集成
src/lib/components/workspace/Models/Capabilities.svelte:22-25 - 代码解释器(Code Interpreter):启用 Pyodide/Jupyter 执行
src/lib/components/workspace/Models/Capabilities.svelte:30-33 - 内置工具(Builtin Tools):在原生函数调用模式下自动注入系统工具
src/lib/components/workspace/Models/Capabilities.svelte:54-59
来源:src/lib/components/workspace/Models/Capabilities.svelte:9-60
2. 访问控制
通过 AccessControl.svelte 和 AccessControlModal.svelte 管理访问权限。该系统处理用户和组的 read 和 write 权限。
- 公共访问:由
principal_id为*且具有read权限的条目表示src/lib/components/workspace/common/AccessControl.svelte:157-161 - 旧版映射:将旧的
access_control对象转换为新的access_grants数组格式src/lib/components/workspace/common/AccessControl.svelte:63-98
来源:src/lib/components/workspace/common/AccessControl.svelte:17-134
3. 知识库集成
Knowledge.svelte 子组件允许用户通过 KnowledgeSelector 选择现有知识库,或直接上传新文件 src/lib/components/workspace/Models/Knowledge.svelte:194-224。在提交过程中,编辑器会验证所有文件是否已完成上传,然后才允许保存模型 src/lib/components/workspace/Models/ModelEditor.svelte:129-134。
技术实现
初始化与持久化
当编辑器挂载时,它会获取可用的工具和函数以填充选择存储。它还会通过 getModelsDefaults 检索管理员配置的默认元数据,以确保 UI 反映全局设置 src/lib/components/workspace/Models/ModelEditor.svelte:249-262。
onMount(async () => {
await tools.set(await getTools(localStorage.token));
await functions.set(await getFunctions(localStorage.token));
const modelsConfig = await getModelsDefaults(localStorage.token).catch(() => null);
const defaultMeta = modelsConfig?.DEFAULT_MODEL_METADATA ?? {};
capabilities = { ...DEFAULT_CAPABILITIES, ...(defaultMeta.capabilities ?? {}) };
// ... 填充其他默认值的逻辑
});
来源:src/lib/components/workspace/Models/ModelEditor.svelte:249-265
API 交互
编辑器通过模型 API 与后端通信。虽然 ModelEditor.svelte 接受一个 onSubmit 属性 src/lib/components/workspace/Models/ModelEditor.svelte:35,但父组件 Models.svelte 提供了调用以下方法的处理函数:
- 创建:
createNewModel(token, modelInfo)src/lib/components/workspace/Models.svelte:17-17 - 更新:
updateModelById(token, id, modelInfo)src/lib/components/workspace/Models.svelte:22-22
实体映射图
classDiagram
class ModelEditor {
+submitHandler()
+onMount()
-info: Object
-params: Object
}
class Models_svelte {
+createNewModel()
+updateModelById()
+deleteModelById()
}
class Knowledge_svelte {
+uploadFileHandler()
+inputFilesHandler()
}
class Capabilities_svelte {
+capabilities: Object
}
ModelEditor --> Models_svelte : "调用 onSubmit 属性"
ModelEditor *-- Knowledge_svelte : "包含"
ModelEditor *-- Capabilities_svelte : "包含"
Models_svelte --> createNewModel : "API 调用"
Models_svelte --> updateModelById : "API 调用"
来源:src/lib/components/workspace/Models/ModelEditor.svelte:1-247、src/lib/components/workspace/Models.svelte:16-23、src/lib/components/workspace/Models/Knowledge.svelte:1-137
参数处理
集成了 AdvancedParams.svelte 组件以允许微调 LLM 参数 src/lib/components/workspace/Models/ModelEditor.svelte:12-12。
- 停止序列(Stop Sequences):
submitHandler将params.stop从逗号分隔的字符串转换为过滤后的字符串数组src/lib/components/workspace/Models/ModelEditor.svelte:232-236 - 系统提示词:存储在
info.params.system中,并在提交前进行修剪src/lib/components/workspace/Models/ModelEditor.svelte:231-231
来源:src/lib/components/workspace/Models/ModelEditor.svelte:89-91、src/lib/components/workspace/Models/ModelEditor.svelte:231-241