提示词与工具管理(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/19.3-prompts-and-tools-management
翻译时间:2026-06-09T16:12:38.290Z
翻译模型:deepseek-chat
原文字符数:10513
项目:Open WebUI (open-webui)
---
提示词与工具管理
相关源文件
以下文件用于生成此 Wiki 页面:
backend/open_webui/models/files.pybackend/open_webui/models/knowledge.pybackend/open_webui/models/prompt_history.pybackend/open_webui/models/prompts.pybackend/open_webui/models/tools.pyscripts/prepare-pyodide.jssrc/lib/apis/prompts/index.tssrc/lib/components/ImportModal.sveltesrc/lib/components/admin/Functions.sveltesrc/lib/components/admin/Functions/FunctionEditor.sveltesrc/lib/components/workspace/Knowledge.sveltesrc/lib/components/workspace/Knowledge/KnowledgeBase.sveltesrc/lib/components/workspace/Knowledge/KnowledgeBase/Files.sveltesrc/lib/components/workspace/Models.sveltesrc/lib/components/workspace/Prompts.sveltesrc/lib/components/workspace/Prompts/PromptEditor.sveltesrc/lib/components/workspace/Skills/SkillEditor.sveltesrc/lib/components/workspace/Tools.sveltesrc/lib/components/workspace/Tools/ToolkitEditor.svelte- [src/routes/(app)/workspace/prompts/[id]/+page.svelte](src/routes/(app)/workspace/prompts/[id]/+page.svelte)
src/routes/(app)/workspace/prompts/create/+page.svelte/workspace/prompts/create/+page.svelte)static/pyodide/pyodide-lock.json
Open WebUI 的工作区提供了一个集中式界面,用于管理系统在原始模型推理之外的"智能"和"能力"。这包括提示词库(允许用户保存复杂系统指令并进行版本管理)和工具/函数系统(使模型能够通过基于 Python 的扩展与外部数据交互或执行代码)。
1. 提示词库管理
提示词库允许用户创建、共享和版本化管理可复用的提示词模板。这些提示词可以在聊天界面中使用命令前缀(通常是 /)来调用。
1.1 数据结构与 API
提示词由后端的 Prompt 模型定义,并在创建时通过 PromptForm 进行管理。
| 字段 | 类型 | 描述 |
|---|---|---|
command | string | 唯一触发命令(例如 translate)backend/open_webui/models/prompts.py:29 |
name | string | 提示词的显示名称 backend/open_webui/models/prompts.py:31 |
content | string | 实际的提示词文本 backend/open_webui/models/prompts.py:32 |
access_grants | list | 用于共享的 RBAC 设置 backend/open_webui/models/prompts.py:55 |
version_id | string | 指向 prompt_history 中当前生产版本的引用 backend/open_webui/models/prompts.py:37 |
1.2 提示词生命周期流程
Prompts.svelte 中的管理界面使用 getPromptItems API 处理列表展示、筛选和 CRUD 操作 src/lib/components/workspace/Prompts.svelte:82-93。
图示:提示词创建与存储流程
sequenceDiagram
participant U as "用户(UI)"
participant PE as "PromptEditor.svelte"
participant API as "apis/prompts/index.ts"
participant BE as "FastAPI 后端"
participant DB as "SQL 表(Prompt)"
U->>PE: 输入名称、命令、内容
PE->>API: createNewPrompt(token, prompt)
API->>BE: POST /prompts/create
Note over BE: 生成 UUID 和时间戳
BE->>DB: insert_new_prompt()
Note over DB: 同时在 PromptHistories 中创建条目
DB-->>BE: 成功
BE-->>API: 200 OK
API-->>PE: 响应
PE->>U: 显示成功提示并重定向
来源:src/lib/components/workspace/Prompts.svelte:77-110, backend/open_webui/models/prompts.py:112-170, src/routes/(app)/workspace/prompts/create/+page.svelte:21-31
1.3 版本管理与历史记录
PromptEditor.svelte 组件包含版本历史系统。用户可以查看之前的快照、比较变更,并将特定版本设为"生产版本" src/lib/components/workspace/Prompts/PromptEditor.svelte:172-186。
- 快照加载:通过
getPromptHistory获取历史记录,支持分页src/lib/components/workspace/Prompts/PromptEditor.svelte:130-147。 - 生产版本切换:
setProductionPromptVersionAPI 更新prompt表中的version_id列backend/open_webui/models/prompts.py:37。 - 元数据更新:对提示词名称、命令或标签的修改会进行防抖处理,并通过
updatePromptMetadata保存src/lib/components/workspace/Prompts/PromptEditor.svelte:213-250。
来源:src/lib/components/workspace/Prompts/PromptEditor.svelte:121-151, backend/open_webui/models/prompt_history.py:1-20
2. 工具与函数编辑器
工具系统支持"动作"能力(客户端或服务端执行),而函数(过滤器/动作/管道)则允许拦截请求/响应管道。
2.1 界面编排
工具通过 Tools.svelte 进行管理,提供已安装工具包的视图。函数(可作为过滤器或流形执行任意 Python 代码)在管理区域的 Functions.svelte 中管理 src/lib/components/admin/Functions.svelte:71-73。
2.2 工具与函数数据流
工具和函数使用"阀门"(Valves)进行用户可配置的设置,使用"清单"(Manifests)存储元数据。
图示:代码实体空间 - 工具/函数管理
graph TD
subgraph "前端组件"
TS["Tools.svelte"]
FS["Functions.svelte"]
TKE["ToolkitEditor.svelte"]
FE["FunctionEditor.svelte"]
VM["ValvesModal.svelte"]
end
subgraph "API 层(代码实体)"
GT["getToolList"]
GF["getFunctionList"]
CNT["createNewTool"]
CNF["createNewFunction"]
UG["toggleGlobalById"]
end
subgraph "后端服务"
TPS["/api/v1/tools"]
FPS["/api/v1/functions"]
end
TS --> GT
FS --> GF
TKE -- "onSave" --> CNT
FE -- "onSave" --> CNF
CNT --> TPS
CNF --> FPS
FS --> UG
VM -- "配置" --> TKE
来源:src/lib/components/workspace/Tools.svelte:159-162, src/lib/components/admin/Functions.svelte:209-214, src/lib/components/workspace/Tools/ToolkitEditor.svelte:160-169, src/lib/components/admin/Functions.svelte:181-207
2.3 实现细节
- Python 样板代码:
ToolkitEditor.svelte提供了一个基础 Python 类Tools,包含calculator和get_current_weather等示例src/lib/components/workspace/Tools/ToolkitEditor.svelte:53-158。 - 代码格式化:编辑器在保存前使用
codeEditor.formatPythonCodeHandler()确保符合 PEP8 规范,利用 Pyodide 环境中的black包src/lib/components/workspace/Tools/ToolkitEditor.svelte:176-188,scripts/prepare-pyodide.js:1-19。 - 全局函数:管理员可以将函数设为"全局",使其应用于所有交互(例如全局过滤器)。此功能由
toggleGlobalById处理src/lib/components/admin/Functions.svelte:181-207。 - 工具克隆:通过获取完整定义、在 ID 后追加
_clone并存储到sessionStorage中来实现工具克隆src/lib/components/workspace/Tools.svelte:117-131。
3. 知识库集成
知识库管理界面位于工作区内,用于组织用于 RAG 的文档集合。
3.1 知识管理操作
Knowledge.svelte 组件管理文档集合。
- 搜索与分页:使用带防抖查询的
searchKnowledgeBasessrc/lib/components/workspace/Knowledge.svelte:48-53。 - 导出:通过
exportKnowledgeById将知识库导出为包含文档集合的.zip文件src/lib/components/workspace/Knowledge.svelte:127-144。 - 文件管理:
KnowledgeBase.svelte处理单个文件上传、通过processWeb进行网页抓取以及文本内容添加src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:188-262。
图示:自然语言空间到知识实体
graph LR
subgraph "自然语言概念"
Web["网页 URL"]
Doc["文档文件"]
Text["原始文本"]
end
subgraph "代码实体(apis/knowledge/index.ts)"
PW["processWeb"]
UF["uploadFile"]
AFK["addFileToKnowledgeById"]
SKF["searchKnowledgeFilesById"]
end
subgraph "存储"
FDB["文件表(SQL)"]
KDB["知识表(SQL)"]
end
Web --> PW
Doc --> UF
Text --> UF
PW --> UF
UF --> AFK
AFK --> KDB
KDB --> SKF
来源:src/lib/components/workspace/Knowledge.svelte:84-112, backend/open_webui/models/files.py:21-34, src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:142-169
4. 工作区实体汇总表
| 实体 | 主要存储 | 创建路由 | 关键 API / 模型文件 |
|---|---|---|---|
| 提示词 | 无(直接 API) | /workspace/prompts/create | backend/open_webui/models/prompts.py |
| 工具 | tools | /workspace/tools/create | backend/open_webui/models/tools.py |
| 函数 | functions | /admin/functions/create | backend/open_webui/models/functions.py |
| 知识库 | knowledge | /workspace/knowledge/create | backend/open_webui/models/knowledge.py |
来源:src/lib/stores/index.ts:6-14, src/lib/components/workspace/Prompts.svelte:16, src/lib/components/workspace/Tools.svelte:12-20, src/lib/components/admin/Functions.svelte:10-20