本教程是社区贡献,不受Open WebUI团队支持。它仅作为如何为您的特定用例自定义Open WebUI的演示。想要贡献?请查看贡献教程。
💡 特殊参数
在开发您自己的工具
、函数
(过滤器
、管道
或动作
)、管道
等时,您可以使用特殊参数来探索Open-WebUI所提供的全部功能。
本页旨在详细介绍每个特殊参数的类型和结构,并提供示例。
body
一个dict
,通常直接发送到模型。虽然它不严格是特殊参数,但在这里包含是为了便于参考,因为它本身包含一些特殊参数。
示例
{
"stream": true,
"model": "my-cool-model",
# 小写字符串,用-分隔单词:这是模型的ID
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图片里有什么?"
},
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdYAAAGcCAYAAABk2YF[REDACTED]"
# 图像作为base64编码数据传递
}
}
]
},
{
"role": "assistant",
"content": "图像似乎是[REDACTED]"
},
],
"features": {
"image_generation": false,
"code_interpreter": false,
"web_search": false
},
"stream_options": {
"include_usage": true
},
"metadata": "[与__metadata__完全相同的dict]",
"files": "[与__files__完全相同的列表]"
}
__user__
一个包含用户信息的dict
。
注意如果定义了UserValves
类,必须通过__user__["valves"]
访问其实例。否则,valves
键值将完全从__user__
中缺失。
示例
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"email": "cheesy_dude@openwebui.com",
"name": "Patrick",
"role": "user",
# 角色可以是`user`或`admin`
"valves": "[UserValve实例]"
}
__metadata__
一个包含关于聊天、模型、文件等广泛信息的dict
。
示例
{
"user_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"chat_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"message_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"session_id": "xxxxxxxxxxxxxxxxxxxx",
"tool_ids": null,
# tool_ids是字符串列表。
"tool_servers": [],
"files": "[与body['files']相同]",
# 如果没有提供文件,files键存在于__metadata__中,其值为[]
"features": {
"image_generation": false,
"code_interpreter": false,
"web_search": false
},
"variables": {
"{{USER_NAME}}": "cheesy_username",
"{{USER_LOCATION}}": "Unknown",
"{{CURRENT_DATETIME}}": "2025-02-02 XX:XX:XX",
"{{CURRENT_DATE}}": "2025-02-02",
"{{CURRENT_TIME}}": "XX:XX:XX",
"{{CURRENT_WEEKDAY}}": "Monday",
"{{CURRENT_TIMEZONE}}": "Europe/Berlin",
"{{USER_LANGUAGE}}": "en-US"
},
"model": "[与__model__完全相同的dict]",
"direct": false,
"function_calling": "native",
"type": "user_response",
"interface": "open-webui"
}
__model__
一个包含模型信息的dict
。
示例
{
"id": "my-cool-model",
"name": "My Cool Model",
"object": "model",
"created": 1746000000,
"owned_by": "openai",
# 要么是openai要么是ollama
"info": {
"id": "my-cool-model",
"user_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"base_model_id": "gpt-4o",
# 这是模型端点服务的模型名称
"name": "My Cool Model",
"params": {
"system": "你是我最好的助手。你回答[REDACTED]",
"function_calling": "native"
# 自定义选项出现在这里,例如"Top K"
},
"meta": {
"profile_image_url": "/static/favicon.png",
"description": "my-cool-model的描述",
"capabilities": {
"vision": true,
"usage": true,
"citations": true
},
"position": 17,
"tags": [
{
"name": "for_friends"
},
{
"name": "vision_enabled"
}
],
"suggestion_prompts": null
},
"access_control": {
"read": {
"group_ids": [],
"user_ids": []
},
"write": {
"group_ids": [],
"user_ids": []
}
},
"is_active": true,
"updated_at": 1740000000,
"created_at": 1740000000
},
"preset": true,
"actions": [],
"tags": [
{
"name": "for_friends"
},
{
"name": "vision_enabled"
}
]
}
__messages__
先前消息的list
。
请参见上面的body["messages"]
值。
__chat_id__
chat_id
的str
。
请参见上面的__metadata__["chat_id"]
值。
__session_id__
session_id
的str
。
请参见上面的__metadata__["session_id"]
值。
__message_id__
message_id
的str
。
请参见上面的__metadata__["message_id"]
值。
__event_emitter__
用于向用户显示事件信息的Callable
。
__event_call__
用于动作
的Callable
。
__files__
通过聊天发送的文件list
。注意图像不被视为文件,而是作为body["messages"]
列表的一部分直接发送到模型。
出于性能原因,文件的实际二进制内容不是参数的一部分,但如果需要,仍可通过其路径访问文件。例如,使用docker
时,路径的python语法可能是:
from pathlib import Path
the_file = Path(f"/app/backend/data/uploads/{__files__[0]["files"]["id"]}_{__files__[0]["files"]["filename"]}")
assert the_file.exists()
注意,同样的文件dict也可以通过__metadata__["files"]
访问(如果没有发送文件,其值为[]
)或通过body["files"]
访问(但如果没有发送文件,files
键将完全从body
中缺失)。
示例
[
{
"type": "file",
"file": {
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"filename": "Napoleon - Wikipedia.pdf",
"user_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"data": {
"content": "Napoleon - Wikipedia\n\n\nNapoleon I\n\nThe Emperor Napoleon in His Study at the\nTuileries, 1812\n\nEmperor of the French\n\n1st reign 18 May 1804 – 6 April 1814\n\nSuccessor Louis XVIII[a]\n\n2nd reign 20 March 1815 – 22 June 1815\n\nSuccessor Louis XVIII[a]\n\nFirst Consul of the French Republic\n\nIn office\n13 December 1799 – 18 May 1804\n\nBorn Napoleone Buonaparte\n15 August 1769\nAjaccio, Corsica, Kingdom of\nFrance\n\nDied 5 May 1821 (aged 51)\nLongwood, Saint Helena\n\nBurial 15 December 1840\nLes Invalides, Paris\n\nNapoleon\nNapoleon Bonaparte[b] (born Napoleone\nBuonaparte;[1][c] 15 August 1769 – 5 May 1821), later\nknown [REDACTED]",
# content值是文档解析器的输出,上述示例是使用Tika作为文档解析器的情况
},
"meta": {
"name": "Napoleon - Wikipedia.pdf",
"content_type": "application/pdf",
"size": 10486578,
# 以字节为单位,这里约10Mb
"data": {},
"collection_name": "file-96xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# 始终以'file'开头
},
"created_at": 1740000000,
"updated_at": 1740000000
},
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"url": "/api/v1/files/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "Napoleon - Wikipedia.pdf",
"collection_name": "file-96xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "uploaded",
"size": 10486578,
"error": "",
"itemId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# itemId与file["id"]不同
}
]
__request__
fastapi.Request
的实例。您可以在迁移页面或fastapi文档中阅读更多信息。
__task__
任务类型的str
。其值只是__metadata__["task"]
的简写(如果存在),否则为None
。
可能的值
[
"title_generation",
"tags_generation",
"emoji_generation",
"query_generation",
"image_prompt_generation",
"autocomplete_generation",
"function_calling",
"moa_response_generation"
]
__task_body__
包含完成给定__task__
所需的body
的dict
。其值只是__metadata__["task_body"]
的简写(如果存在),否则为None
。
其结构与上面的body
相同,具有使用适当模型和系统消息等修改。
__tools__
ToolUserModel
实例的list
。
有关ToolUserModel
实例属性的详细信息,可以在tools.py中找到代码。