请求数据
{
"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.返回