GPT Request Body 的分析(二)
本章节主要分析 Request Body
的各项属性,以及职能.
数据结构分析
第一次的请求体结构
{
"action": "next",
"messages": [
{
"id": "aaa2a10e-decf-41bd-adcb-112c1b4fcb42",
"author": {
"role": "user"
},
"content": {
"content_type": "text",
"parts": ["询问内容"]
},
"metadata": {},
"create_time": 1722363267.048
}
],
"parent_message_id": "aaa18741-c943-42bd-9cbe-c22948643c3e",
"model": "gpt-4o",
"timezone_offset_min": -480,
"suggestions": [],
"history_and_training_disabled": false,
"conversation_mode": {
"kind": "primary_assistant"
},
"force_paragen": false,
"force_paragen_model_slug": "",
"force_nulligen": false,
"force_rate_limit": false,
"reset_rate_limits": false,
"websocket_request_id": "40b4408c-c835-415d-a9a4-48c06a3f756f",
"force_use_sse": true,
"conversation_origin": null
}

后续的请求体结构
{
"action": "next",
"messages": [
{
"id": "aaa2d2c5-49a4-4695-8f91-c5c6a4b3debb",
"author": {
"role": "user"
},
"content": {
"content_type": "text",
"parts": ["继续"]
},
"metadata": {},
"create_time": 1722363328.879
}
],
"conversation_id": "aef1bc8f-8cbd-4b84-ad19-5960ab1e7adf",
"parent_message_id": "3afab151-7ba9-491d-b8c0-350ecaf788fe",
"model": "gpt-4o",
"timezone_offset_min": -480,
"suggestions": [],
"history_and_training_disabled": false,
"conversation_mode": {
"kind": "primary_assistant"
},
"force_paragen": false,
"force_paragen_model_slug": "",
"force_nulligen": false,
"force_rate_limit": false,
"reset_rate_limits": false,
"websocket_request_id": "41931b37-b00f-4d4a-9604-a2737efdb9d8",
"force_use_sse": true,
"conversation_origin": null
}

分析结果
Q: ChatGPT 有修改问答,重新生成的按钮,进行完这些操作之后,ChatGPT 是如何知道自己之前的消息之后的消息都是哪些呢?如何知道自己的同级消息有哪些呢?
A: 通过 conversation_id 确定自己所属的会话,通过 parent_message_id 知道自己的父级消息是谁?进而构建完整的消息树.(conversation 有个 list 存放所有属于它的消息)
Q: 请求体里面不是像 ChatGPT 的 api 一样,传递整个 conversation,他是如何获取上下文的?
A: 后端通过 conversation 有个 list 存放所有属于它的消息,另外应该有 RAG
猜测各个属性的功能:
-
action: 表示当前的操作类型,这里的值是”next”,可能意味着这是在请求下一个消息或响应。
-
messages: 一个数组,包含消息对象。每个消息对象包含以下属性:
- id: 消息的唯一标识符。
- author: 消息的作者,这里的角色是”user”,表示这是一个用户发送的消息。
- content: 消息的内容,包含内容类型(这里是文本)和实际的文本部分。
- metadata: 消息的元数据,这里为空。
- create_time: 消息创建的时间戳。
-
parent_message_id: 父消息的ID,用于跟踪对话的上下文。
-
model: 使用的模型名称,这里是”gpt-4o”,特定的AI模型的名称。
-
timezone_offset_min: 时区偏移量,单位是分钟,这里表示-480分钟,即UTC-8时区。
-
suggestions: 一个空数组,可能用于存储建议或推荐内容。有时候我们询问完问题或者
GPT
回答完问题,在对话框的上面有时候会出现GPT
猜测你可能想继续问的问题,这些内容存储在suggestions
. -
history_and_training_disabled: 布尔值,表示是否禁用了历史记录和训练功能。这个取决于你是否开启了
临时聊天
-
conversation_mode: 对话模式,这里的”kind”是”primary_assistant”,表示这是主要助手模式。
-
force_paragen: 布尔值,可能表示是否强制使用某种特定的生成模式。
-
force_paragen_model_slug: 字符串,可能表示强制使用的模型标识符,这里是空字符串。
-
force_nulligen: 布尔值,可能表示是否强制不使用某种生成模式。
-
force_rate_limit: 布尔值,可能表示是否强制进行速率限制。
-
reset_rate_limits: 布尔值,可能表示是否重置速率限制。
-
websocket_request_id: WebSocket请求的唯一标识符。
-
force_use_sse: 布尔值,可能表示是否强制使用服务器发送事件(Server-Sent Events)。
一般使用SSE连接
-
conversation_origin: 可能表示对话的来源或起始点,这里是null。