崔少飞
发布于 2026-03-13 / 3 阅读
0
0

open web ui 会话接口分析

请求数据

{
	"stream": true,
	"model": "DeepSeek-R1-0528-Qwen3-8B",
	"messages": [
		{
			"role": "system",
			"content": "你好"
		},
		{
			"role": "user",
			"content": "你好"
		}
	],
	"params": {},
	"tool_servers": [],
	"features": {
		"voice": false,
		"image_generation": false,
		"code_interpreter": true,
		"web_search": false,
		"memory": true
	},
	"variables": {
		"{{USER_NAME}}": "ny",
		"{{USER_EMAIL}}": "houwenxuan@nayuncn.com",
		"{{USER_LOCATION}}": "Unknown",
		"{{CURRENT_DATETIME}}": "2026-03-12 20:08:14",
		"{{CURRENT_DATE}}": "2026-03-12",
		"{{CURRENT_TIME}}": "20:08:14",
		"{{CURRENT_WEEKDAY}}": "Thursday",
		"{{CURRENT_TIMEZONE}}": "Etc/GMT-8",
		"{{USER_LANGUAGE}}": "zh-CN"
	},
	"model_item": {
		"id": "DeepSeek-R1-0528-Qwen3-8B",
		"object": "model",
		"created": 1773317292,
		"owned_by": "openai",
		"root": "/home/ubuntu/pkg/model/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",
		"parent": null,
		"max_model_len": 20480,
		"permission": [
			{
				"id": "modelperm-933bfcc468e62c3f",
				"object": "model_permission",
				"created": 1773317292,
				"allow_create_engine": false,
				"allow_sampling": true,
				"allow_logprobs": true,
				"allow_search_indices": false,
				"allow_view": true,
				"allow_fine_tuning": false,
				"organization": "*",
				"group": null,
				"is_blocking": false
			}
		],
		"connection_type": "external",
		"name": "DeepSeek-R1-0528-Qwen3-8B",
		"openai": {
			"id": "DeepSeek-R1-0528-Qwen3-8B",
			"object": "model",
			"created": 1773317292,
			"owned_by": "vllm",
			"root": "/home/ubuntu/pkg/model/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",
			"parent": null,
			"max_model_len": 20480,
			"permission": [
				{
					"id": "modelperm-933bfcc468e62c3f",
					"object": "model_permission",
					"created": 1773317292,
					"allow_create_engine": false,
					"allow_sampling": true,
					"allow_logprobs": true,
					"allow_search_indices": false,
					"allow_view": true,
					"allow_fine_tuning": false,
					"organization": "*",
					"group": null,
					"is_blocking": false
				}
			],
			"connection_type": "external"
		},
		"urlIdx": 0,
		"info": {
			"meta": {
				"capabilities": {
					"file_context": true,
					"vision": true,
					"file_upload": true,
					"web_search": true,
					"image_generation": true,
					"code_interpreter": true,
					"citations": true,
					"status_updates": true,
					"builtin_tools": true
				},
				"defaultFeatureIds": [
					"web_search",
					"image_generation",
					"code_interpreter"
				],
				"builtinTools": {
					"time": true,
					"memory": true,
					"chats": true,
					"notes": true,
					"knowledge": true,
					"channels": true,
					"web_search": true,
					"image_generation": true,
					"code_interpreter": true
				}
			}
		},
		"actions": [],
		"filters": [],
		"tags": []
	},
	"session_id": "F0ZyAH-VFKerVUZAAAAZ",
	"chat_id": "ef59750c-f652-4d1d-b933-bfb9d55afbc9",
	"id": "552198bc-716b-4ec8-bd9f-5891b76b5b7c",
	"parent_id": "ab836d7d-8494-4be2-af18-7c187082e047",
	"parent_message": {
		"id": "ab836d7d-8494-4be2-af18-7c187082e047",
		"parentId": null,
		"childrenIds": [
			"552198bc-716b-4ec8-bd9f-5891b76b5b7c"
		],
		"role": "user",
		"content": "你好",
		"timestamp": 1773317294,
		"models": [
			"DeepSeek-R1-0528-Qwen3-8B"
		]
	},
	"background_tasks": {
		"title_generation": true,
		"tags_generation": true,
		"follow_up_generation": true
	}
}

入口

对外接口 /api/chat/completions 或 /api/v1/chat/completions

chat_completion(request: Request,form_data: dict,user=Depends(get_verified_user))

chat_completion 函数内部:

1.模型鉴权

2.模型参数

3.准备调用process_chat元数据

区分同步 or 异步

异步:

创建一个task,调用process_chat

发送socket信息通知前端,taskid

同步:

直接调用process_chat

process_chat 函数涵盖了整个过程,包括请求前的参数处理、请求发起、请求返回的处理、请求返回。

process_chat 第一步:

调用process_chat_payload

配置请求前的参数

1.历史消息的加载

2.提示词的加载

3.图片url转basr64的处理

4.与前端通信的两个事件处理器的初始化event_emitter 、 event_caller

5.根据问答配置的信息做处理

a.知识库

b.以上数据经过pipline进行外部处理

c.以上数据经过filter进行处理

6.处理配置的功能特性

a.语音

b.memory

c.web_search

d.image_generation

e.code_interpreter

7.组合相关数据

process_chat 第二步:

发起聊天请求generate_chat_completion

根据选用的类型做不同的处理,arena、pipe、ollama、其他

我们走的是其他,直接调用generate_openai_chat_completion
generate_openai_chat_completion内部会再次整合参数、鉴权等调用open ai api

process_chat 第三步:

构造响应上下文build_chat_response_context

本质就是获取返回的信息,还有两个事件处理器的初始化event_emitter 、 event_caller

process_chat 第四步:

最终处理响应,分三种

1.非流式

2.非标准 -> 直接返回response

3.流式

1.包装信息

2.走filter的过滤

3.返回


评论