agentic_huge_data_base / wiki
页面 Open WebUI · 19.4 技能系统·DeepWiki 中文全文译文

19.4 · 技能系统(Skills System)

多模型对话工作台与知识应用入口 · 本章是 Open WebUI DeepWiki 中文译文的独立章节页,保留原始链接、源码锚点、模块标签和章节层级。

项目Open WebUI 章节19.4 状态全文译文 模块工具、记忆与模型调用、接口与服务契约、系统架构、界面与交互
源码线索
  • backend/open_webui/tools/builtin.py
  • backend/open_webui/utils/middleware.py
  • backend/open_webui/utils/tools.py
  • scripts/prepare-pyodide.js
  • src/lib/components/ImportModal.svelte
  • src/lib/components/admin/Functions/FunctionEditor.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase/Files.svelte
  • src/lib/components/workspace/Models/BuiltinTools.svelte
  • src/lib/components/workspace/Prompts/PromptEditor.svelte
模块标签
  • 工具、记忆与模型调用
  • 接口与服务契约
  • 系统架构
  • 界面与交互
  • 检索、召回与知识系统

中文译文

技能系统(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/19.4-skills-system
翻译时间:2026-06-09T16:12:35.389Z
翻译模型:deepseek-chat
原文字符数:9180
项目:Open WebUI (open-webui)

---

技能系统

相关源文件

以下文件为本 Wiki 页面的生成提供了上下文:

  • backend/open_webui/tools/builtin.py
  • backend/open_webui/utils/middleware.py
  • backend/open_webui/utils/tools.py
  • scripts/prepare-pyodide.js
  • src/lib/components/ImportModal.svelte
  • src/lib/components/admin/Functions/FunctionEditor.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase/Files.svelte
  • src/lib/components/workspace/Models/BuiltinTools.svelte
  • src/lib/components/workspace/Prompts/PromptEditor.svelte
  • src/lib/components/workspace/Skills/SkillEditor.svelte
  • src/lib/components/workspace/Tools/ToolkitEditor.svelte
  • static/pyodide/pyodide-lock.json

Open WebUI 中的技能系统是一个工作区功能,用于创建、管理和共享可复用的 AI 能力。技能与标准系统提示词不同;它们被定义为模块化的逻辑块——包括工具函数提示词——可以附加到模型上或在聊天会话中触发,以扩展 AI 的基础能力。

系统概述

该系统在工作区中运行,提供统一的界面来管理生命周期,包括创建、克隆、导出和社区共享。它利用基于 frontmatter 的元数据系统来定义技能属性,如标题、版本和作者信息。

关键组件
组件角色文件路径
工具工作区编排基于 Python 的工具的列表、筛选和管理。src/lib/components/workspace/Tools.svelte:1-40
工具包编辑器基于 Web 的 IDE,提供 Python 样板代码用于编写自定义工具。src/lib/components/workspace/Tools/ToolkitEditor.svelte:1-52
技能编辑器专用编辑器,用于创建可复用的 AI 技能定义,支持 frontmatter 检测。src/lib/components/workspace/Skills/SkillEditor.svelte:1-30
函数工作区管理员级界面,用于管理全局过滤器和操作管道。src/lib/components/admin/Functions.svelte:1-73
提示词工作区管理可复用的系统提示词模板,支持命令触发。src/lib/components/workspace/Prompts.svelte:1-50

技术架构

技能系统将用户定义的逻辑(自然语言和 Python)桥接到执行环境中。基于 Python 的技能(工具和函数)在持久化之前,使用 Pyodide 进行浏览器端验证、处理和格式化。

技能数据流:从创建到执行

此图展示了用户定义的技能(工具)如何从 UI 编辑器移动到后端存储,最终进入执行上下文。

技能定义与存储流程

graph TD
    User["用户界面 (Svelte)"] -- "编写 Python 代码" --> Editor["ToolkitEditor.svelte"]
    Editor -- "formatPythonCodeHandler()" --> Pyodide["Pyodide (WASM)"]
    Pyodide -- "格式化后的代码" --> Editor
    Editor -- "onSave(toolData)" --> API["tools.ts: createNewTool"]
    API -- "POST /api/v1/tools/create" --> Backend["FastAPI 后端"]
    Backend -- "SQL 持久化" --> DB[("数据库")]

    subgraph "自然语言空间"
        User
    end

    subgraph "代码实体空间"
        Editor
        Pyodide
        API
        Backend
        DB
    end

来源:src/lib/components/workspace/Tools/ToolkitEditor.svelte:160-188scripts/prepare-pyodide.js:1-25backend/open_webui/utils/tools.py:164-175

工具实现与执行

工具是使用自定义 Python 逻辑扩展模型功能的主要机制。每个工具被定义为一个名为 Tools 的类,其中包含带有类型提示和文档字符串的方法。

样板代码与结构

标准工具包含从 pydantic 导入的模式定义和从 requests 导入的外部 API 交互。文档字符串被解析以生成用于 LLM 函数调用的 JSON 模式。

class Tools:
    def __init__(self):
        pass

    def get_user_name_and_email_and_id(self, __user__: dict = {}) -> str:
        """
        从用户对象中获取用户名、电子邮件和 ID。
        """
        # 会话用户对象作为参数自动传入
        return f"用户: {__user__.get('name')} (ID: {__user__.get('id')})"

来源:src/lib/components/workspace/Tools/ToolkitEditor.svelte:53-98

后端处理管道

后端通过动态加载工具模块并注入必要的参数(如阀门配置和用户上下文)来处理工具执行。

工具执行管道

graph TD
    Request["FastAPI 请求"] --> GetTools["tools.py: get_tools()"]
    GetTools --> LoadModule["plugin.py: load_tool_module_by_id()"]
    LoadModule --> SetValves["tools.py: get_tool_valves_by_id()"]
    SetValves --> ApplyParams["tools.py: get_async_tool_function_and_apply_extra_params()"]
    ApplyParams --> Execute["函数调用"]

    subgraph "代码实体空间"
        GetTools
        LoadModule
        SetValves
        ApplyParams
        Execute
    end

来源:backend/open_webui/utils/tools.py:111-147backend/open_webui/utils/tools.py:164-210backend/open_webui/utils/middleware.py:172-218

技能编辑器与 Frontmatter

SkillEditor.svelte 组件为依赖 frontmatter 元数据的技能提供了专用界面。它会自动从内容块中类似 YAML 的头部检测 namedescription

  • 自动检测:在创建模式下使用 parseFrontmatter(content) 填充字段 src/lib/components/workspace/Skills/SkillEditor.svelte:39-57
  • 格式化:应用 formatSkillName(fm.name) 来规范化用户提供的标题 src/lib/components/workspace/Skills/SkillEditor.svelte:44
  • 持久化:将 idnamedescriptioncontent 提交到 skills API src/lib/components/workspace/Skills/SkillEditor.svelte:82-90

来源:src/lib/components/workspace/Skills/SkillEditor.svelte:39-93src/lib/utils/index.ts:11-13

提示词与命令系统

提示词允许用户定义可通过 / 命令触发的可复用模板。

  • 命令标识:名称会自动转换为 URL 友好的标识,用于聊天命令 src/lib/components/workspace/Prompts/PromptEditor.svelte:69-71
  • 历史与版本管理:支持版本管理,用户可以将特定快照提升为"生产"版本 src/lib/components/workspace/Prompts/PromptEditor.svelte:172-186
  • 元数据管理:标签和命令字符串等元数据可以独立于提示词内容进行更新 src/lib/components/workspace/Prompts/PromptEditor.svelte:213-250

提示词命令关联

graph LR
    subgraph "自然语言空间"
        Input["用户输入 '/translate'"]
    end

    subgraph "代码实体空间"
        Editor["PromptEditor.svelte"]
        Slugify["utils.ts: slugify()"]
        PromptAPI["prompts.py: update_prompt_metadata"]

        Editor -- "调用" --> Slugify
        Slugify -- "生成" --> CommandID["prompt.command"]
        CommandID -- "匹配" --> Input
    end

来源:src/lib/components/workspace/Prompts/PromptEditor.svelte:69-75src/lib/components/workspace/Prompts/PromptEditor.svelte:230-240

访问控制与共享

技能使用统一的 AccessControlModal 通过 AccessGrants 系统管理可见性和执行权限。

角色权限代码引用
管理员如果启用了 BYPASS_ADMIN_ACCESS_CONTROL,可以绕过访问控制。backend/open_webui/utils/tools.py:45
用户可以创建个人技能;共享受 permissions.sharing.skills 限制。src/lib/components/workspace/Skills/SkillEditor.svelte:115-117
授权针对特定用户或组的细粒度"读取"/"写入"权限。backend/open_webui/utils/tools.py:181-187
社区集成

shareHandler 函数通过安全的跨域消息将技能的 JSON 定义发布到 openwebui.com,从而促进社区共享 src/lib/components/workspace/Tools.svelte:93-115

来源:backend/open_webui/utils/tools.py:172-190src/lib/components/workspace/Tools/ToolkitEditor.svelte:191-208src/lib/components/workspace/Skills/SkillEditor.svelte:111-128