Open WebUI提示词库:预设模板管理与使用
提示词库核心架构
Open WebUI的提示词管理系统通过前后端分离架构实现模板的存储、检索与应用。后端采用SQLAlchemy ORM构建数据模型,前端通过Svelte组件实现交互式管理界面,形成完整的提示词生命周期管理闭环。
数据模型设计
提示词数据结构定义在backend/open_webui/models/prompts.py中,核心字段包括:
command: 唯一标识符(如/translate)title: 模板名称content: 提示词内容主体access_control: 权限控制配置(支持公开/私有/组权限)
class Prompt(Base):
__tablename__ = "prompt"
command = Column(String, primary_key=True) # 命令标识
user_id = Column(String) # 创建者ID
title = Column(Text) # 模板标题
content = Column(Text) # 提示词内容
timestamp = Column(BigInteger) # 创建时间戳
access_control = Column(JSON, nullable=True) # 访问控制配置
权限控制矩阵
提示词支持多维度权限管理,通过access_control字段实现精细化授权:
| 权限类型 | 描述 | JSON配置示例 |
|---|---|---|
| 公开访问 | 所有用户可查看 | null |
| 私有访问 | 仅创建者可用 | {} |
| 组权限 | 指定用户组可访问 | {"read": {"group_ids": ["g1", "g2"]}} |
| 用户权限 | 指定用户可编辑 | {"write": {"user_ids": ["u1"]}} |
后端API接口
提示词管理通过RESTful API实现完整CRUD操作,接口定义在backend/open_webui/routers/prompts.py。
核心接口列表
| 接口路径 | 方法 | 功能描述 | 权限要求 |
|---|---|---|---|
/prompts | GET | 获取提示词列表 | 已认证用户 |
/prompts/command/{command} | GET | 获取指定提示词 | 权限校验 |
/prompts/create | POST | 创建提示词 | admin/有权限用户 |
/prompts/command/{command}/update | POST | 更新提示词 | 创建者/管理员 |
/prompts/command/{command}/delete | DELETE | 删除提示词 | 创建者/管理员 |
创建提示词示例
# 后端创建逻辑示例
@router.post("/create", response_model=Optional[PromptModel])
async def create_new_prompt(
request: Request, form_data: PromptForm, user=Depends(get_verified_user)
):
# 权限检查
if user.role != "admin" and not has_permission(...):
raise HTTPException(status_code=401, detail=ERROR_MESSAGES.UNAUTHORIZED)
# 命令冲突检查
if Prompts.get_prompt_by_command(form_data.command) is None:
return Prompts.insert_new_prompt(user.id, form_data)
raise HTTPException(status_code=400, detail=ERROR_MESSAGES.COMMAND_TAKEN)
前端管理界面
前端提供直观的提示词管理界面,主要功能模块位于工作区的提示词管理页面。
创建提示词界面
src/routes/(app)/workspace/prompts/create/+page.svelte/workspace/prompts/create/+page.svelte)实现了新建提示词的表单界面,核心逻辑包括:
<script lang="ts">
import { createNewPrompt } from '$lib/apis/prompts';
let prompt = null;
const onSubmit = async (_prompt) => {
const prompt = await createNewPrompt(localStorage.token, _prompt)
.catch(error => toast.error(`${error}`));
if (prompt) {
toast.success($i18n.t('Prompt created successfully'));
await goto('/workspace/prompts');
}
};
</script>
{#key prompt}
<PromptEditor {prompt} {onSubmit} />
{/key}
提示词编辑器组件
提示词编辑器支持Markdown格式,提供实时预览功能。界面组件位于src/lib/components/workspace/Prompts/PromptEditor.svelte(推断路径),支持以下特性:
- 命令唯一性校验
- Markdown语法高亮
- 权限配置可视化
- 模板变量提示
提示词使用场景
Open WebUI在多个交互场景中集成了提示词功能,提升用户体验与工作效率。
聊天界面快速调用
在聊天输入框中通过命令前缀快速插入提示词,实现逻辑位于src/lib/components/chat/MessageInput/Commands/Prompts.svelte:
{#each filteredPrompts as prompt, promptIdx}
<div class="px-3 py-1.5 rounded-xl"
on:click={() => confirmPrompt(prompt)}>
<div class="font-medium">{prompt.command}</div>
<div class="text-sm opacity-70">{prompt.title}</div>
</div>
{/each}
使用流程:
- 在聊天输入框输入
/触发命令菜单 - 选择提示词或继续输入命令(如
/translate) - 系统自动插入预设提示词模板
上下文菜单集成
在聊天内容选中时,通过浮动菜单应用提示词模板,代码位于src/lib/components/chat/ContentRenderer/FloatingButtons.svelte:
function confirmExplain() {
const prompt = `Explain this section to me in more detail\n\n\`\`\`\n${selectedText}\n\`\`\``;
dispatch('submit', { content: prompt });
}
<button on:click={confirmExplain}>
<HelpCircle class="h-4 w-4 mr-1" />
{$i18n.t('Explain')}
</button>
高级应用技巧
模板变量使用
提示词支持动态变量替换,通过{{variable}}语法在运行时注入上下文:
# 邮件生成模板
From: {{sender}}
To: {{recipient}}
Subject: {{subject}}
{{body}}
提示词链功能
通过命令组合实现复杂任务流程,例如:
/translate "Hello world"
/summarize {{previous_response}}
/email {{previous_response}} --to manager@example.com
导入导出功能
系统支持批量管理提示词,可通过以下方式实现:
- 单条导出:访问
/prompts/command/{command}获取JSON - 批量导出:调用
/prompts接口批量获取 - 批量导入:通过
/prompts/create接口批量提交
界面操作指南
创建提示词步骤
- 导航至工作区 → 提示词管理 → 新建
- 填写命令(如
/blog)、标题和内容 - 配置访问权限(公开/私有/指定用户组)
- 点击保存完成创建
提示词创建界面
在聊天中应用提示词
- 在聊天输入框输入
/显示提示词列表 - 选择所需提示词或继续输入命令
- 根据模板提示补充必要参数
- 发送后系统自动应用完整提示词
聊天界面提示词调用
最佳实践案例
案例1:技术文档翻译模板
命令:/tech-translate
内容:
Translate the following technical documentation into Chinese, maintaining code formatting and technical terms:
{{content}}
要求:
1. 保留Markdown格式
2. 代码块和技术术语不翻译
3. 添加适当注释解释复杂概念
案例2:代码优化提示词
命令:/code-optimize
内容:
Optimize the following code with these requirements:
1. Improve time complexity
2. Add error handling
3. Follow PEP8 style guide
4. Include docstrings
```python
{{code}}
Output the optimized code with explanations of key changes.
## 故障排除
### 常见问题解决
| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 提示词命令冲突 | 已存在相同命令 | 修改命令名称或删除现有提示词 |
| 无权限访问 | 权限配置错误 | 联系管理员调整`access_control` |
| 导入失败 | JSON格式错误 | 验证JSON结构并重新导入 |
| 变量不生效 | 模板语法错误 | 确保使用`{{variable}}`格式 |
### 日志排查
提示词相关操作日志可在后端日志中查看,关键日志位置:
- API请求:`backend/logs/api.log`
- 数据库操作:`backend/logs/db.log`
## 扩展开发指南
开发者可通过以下方式扩展提示词功能:
### 自定义变量解析器
在backend/open_webui/utils/prompt.py(推断路径)中添加自定义变量处理器:
```python
def resolve_custom_variables(prompt: str, context: dict) -> str:
# 实现自定义变量逻辑
for var, value in context.items():
prompt = prompt.replace(f"{{{{{var}}}}}", process_value(value))
return prompt
添加模板市场
- 创建提示词分类数据表
- 实现评分和评论功能
- 开发模板上传审核流程
总结
Open WebUI提示词库系统为用户提供了强大的模板管理与应用功能,通过标准化的提示词设计可以显著提升LLM交互效率。无论是个人用户管理常用提示模板,还是团队共享最佳实践,该系统都能满足多样化的使用需求。
通过本文档介绍的架构解析、操作指南和最佳实践,用户可以充分利用提示词库功能,构建个性化的AI交互体验。如需进一步扩展,可参考扩展开发指南实现定制化功能。
建议定期备份重要提示词,通过导出功能保存到安全位置,以防意外丢失。同时关注系统更新,获取更多提示词高级功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



