打造專屬ChatGPT:OpenAI Chat Completion API參數解析(20260323更新)
內容目錄
A. 前言
1. API端點
這篇文章主要整理的是 OpenAI 的 Chat Completions API,核心建立回應的端點為:
POST https://api.openai.com/v1/chat/completions
不過到了 2026 年,Chat Completions 已不只是一個建立回應的端點;同一組資源另外還有:
GET /chat/completions
GET /chat/completions/{completion_id}
POST /chat/completions/{completion_id}
DELETE /chat/completions/{completion_id}
GET /chat/completions/{completion_id}/messages
如果你的需求是建立新回應,主要仍是使用 POST /chat/completions;如果你的需求是查詢先前儲存的 completion,則會用到其他相關端點。官方另外也明確建議:新專案優先考慮 Responses API;但 Chat Completions 目前仍可用,而且在既有專案中仍很常見。
2. OpenAI Python SDK基礎用法
以下是目前較建議的最小範例。若你使用較新的推理模型或 GPT-5.x 系列,建議把原本的 system 訊息改成 developer 訊息;官方文件也明寫,在 o1 與更新模型上,developer message 用來取代舊的 system message。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-5.4",
messages=[
{"role": "developer", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
)
print(completion.choices[0].message.content)
print(completion.usage)
3. 請求參數
本文聚焦在 client.chat.completions.create(...) 與對應的 REST API body 參數。
到了 2026 年,這些參數大致可以分成五類:
- 基礎輸入:model、messages
- 輸出控制:response_format、verbosity、max_completion_tokens
- 抽樣與生成控制:temperature、top_p、frequency_penalty、presence_penalty、stop
- 工具與串流:tools、tool_choice、parallel_tool_calls、stream、stream_options
- 平台層功能:reasoning_effort、prompt_cache_key、prompt_cache_retention、safety_identifier、service_tier、store、metadata
4. 回傳結構
Chat Completions 的回傳可分成兩種:
- 非串流:回傳單一 chat.completion 物件
- 串流:回傳一連串 chat.completion.chunk 事件(SSE)
另外要注意,若你開啟 stream_options.include_usage = true,串流時通常會在最後多收到一個帶有整體 usage 的 chunk;這個最後 chunk 的 choices 可能是空陣列,而不是舊文章裡寫的 null。若串流中途中斷,也可能收不到最後的 usage chunk。
a. The chat completion object
當不是以串流方式取得資料,就會是這個格式,根據請求參數會有所不同,其中有以下資訊:
id:string,唯一值,請求的ID。choices:array,回答的內容,根據不同請求參數,可能可以得到多個答案。created:integer,Unix時間戳記,請求建立的時間。model:string,本次使用的模型。service_tier:string or null,請求API時如果有帶入相關資訊,回傳結果上才會出現,詳見請求參數中的說明。system_fingerprint:string,系統的指紋,有助於確認輸出變化是否是OpenAI模型後端更新導致,當設定更改時,即使使用相同的seed,結果也可能不同。object:string,物件名稱,使用Chat Completion API時,值會是chat.completion。usage:object,此次請求的用量。
詳細說明請參考C. The chat completion object。
b. The chat completion chunk object
當透過串流方式取得資料時,一次請求會分解成多個區塊(chunk)進行回傳,根據請求參數會有所不同,其中每個區塊(chunk)含有的資訊主要的key與非串流相同,詳細差異請參考D. The chat completion chunk object。
5. 為什麼 2026 還要學 Chat Completions?
雖然 OpenAI 對新專案傾向推薦 Responses API,但 Chat Completions 仍然是大量既有系統、舊版 SDK 教學、第三方框架與內部工具鏈常見的介面。理解 Chat Completions 的參數、訊息格式、工具呼叫與串流事件,對維護舊專案、讀懂歷史程式碼、或從 Chat Completions 遷移到 Responses API 都很有幫助。
B. 請求參數
1. REST API的參數
a. model,string,Required
model 用來指定這次 Chat Completions API 請求要使用的模型,屬於必填參數。不同模型在能力、速度、價格、可支援的參數,以及是否支援推理、音訊、工具呼叫、結構化輸出等方面都可能不同,因此在送出請求前,應先確認目標模型是否支援你要使用的功能。
基本格式如下:
{
"model": "gpt-5.4"
}
目前 Chat Completions 文件中可見的模型類型很多,包含 GPT-5 系列、GPT-4.1 系列、GPT-4o 系列,以及 o 系列推理模型等。例如:
- gpt-5.4
- gpt-5.4-mini
- gpt-5.4-nano
- gpt-5.2
- gpt-5.1
- gpt-5
- gpt-4.1
- gpt-4o
- gpt-4o-mini
- o3
- o4-mini
撰寫程式時,model 通常會和 messages 一起使用,例如:
{
"model": "gpt-5.4",
"messages": [
{
"role": "developer",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}
需要注意的是,不同模型支援的參數不完全相同。像是較新的 reasoning models,對 reasoning_effort、max_completion_tokens、stop 等參數的支援情況可能和較舊模型不同;有些模型也支援音訊輸出、圖片理解或 web search 等能力。因此,model 不只是選一個名稱而已,它其實決定了這次請求可使用的功能範圍與行為表現。
b. messages:array,Required
messages 是 Chat Completions API 最核心的輸入參數,用來描述目前這次請求的對話內容。它的型別是陣列,陣列中的每個元素都是一則訊息物件,模型會依照這些訊息的順序來理解上下文並產生回應。
基本格式如下:
{
"messages": [
{
"role": "developer",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}
在目前的 Chat Completions 文件中,messages 可包含多種不同角色的訊息,常見的有:
- developer
- system
- user
- assistant
- tool
- function
不同角色的訊息用途不同,支援的欄位與 content 格式也不完全一樣。
b-1. messages 的作用
messages 的用途是把目前的對話狀態完整提供給模型。模型不會自動記住你的前一次 API 呼叫內容,因此如果你要做多輪對話,通常需要把前面的訊息一起放回 messages 中,再送出下一次請求。
例如一段基本的多輪對話,可能會長這樣:
{
"messages": [
{
"role": "developer",
"content": "你是一位專業且簡潔的助理。"
},
{
"role": "user",
"content": "幫我解釋什麼是 API。"
},
{
"role": "assistant",
"content": "API 是應用程式之間交換資料與功能的介面。"
},
{
"role": "user",
"content": "再用更白話的方式說明。"
}
]
}
模型會根據整個陣列內容理解目前對話脈絡,而不是只看最後一則 user 訊息。
b-2. messages 中每個元素的基本結構
messages 陣列中的每個元素至少都會有 role,大多數也會包含 content。依不同訊息型別,還可能出現 name、tool_call_id、audio、tool_calls、function_call 等欄位。
最常見的結構如下:
{
"role": "user",
"content": "Hello!"
}
其中:
- role:代表這則訊息是誰說的
- content:代表訊息內容
b-3. 支援的訊息類型
b-3-1. System message
developer message 是由開發者提供給模型的高優先級指示,用來設定角色、語氣、格式、限制條件、回答規則等。
目前文件明確指出,在 o1 與更新模型上,developer message 用來取代過去的 system message。
格式如下:
{
"role": "developer",
"content": "You are a helpful assistant."
}
developer message 的 content 可以是:
- 一般字串
- 由 type: “text” 組成的 content parts 陣列
例如:
{
"role": "developer",
"content": [
{
"type": "text",
"text": "你是一位技術寫作者,回答要有條理。"
}
]
}
b-3-2. system message
system message 也是高層級指示訊息,用途和早期 API 中的系統提示相同。不過在較新的模型上,官方已建議優先使用 developer message。
格式如下:
{
"role": "system",
"content": "You are a helpful assistant."
}
system message 的 content 也可以是字串或文字 content parts 陣列,但只支援 text 類型。
b-3-3. User message
user message 代表使用者輸入,是最常見的訊息類型。role 固定為 user,content 可以是:
- 一般字串
- content parts 陣列
最簡單的寫法如下:
{
"role": "user",
"content": "Hello!"
}
若使用陣列格式,user message 現在支援多種 content part,包含:
text
image_url
input_audio
file
這代表目前的 Chat Completions API 已經支援多模態輸入,不再只限於純文字。
文字輸入範例:
{
"role": "user",
"content": [
{
"type": "text",
"text": "請幫我描述這張圖片。"
}
]
}
圖片輸入範例:
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is in this image?"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg",
"detail": "high"
}
}
]
}
其中 image_url.detail 可用值為:
- auto
- low
- high
音訊輸入範例:
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "BASE64_AUDIO_DATA",
"format": "mp3"
}
}
]
}
目前 input_audio.format 支援:
- wav
- mp3
檔案輸入範例:
{
"role": "user",
"content": [
{
"type": "file",
"file": {
"file_id": "file_123"
}
}
]
}
也可以改用 file_data 直接傳遞 base64 編碼的檔案內容,並搭配 filename:
{
"role": "user",
"content": [
{
"type": "file",
"file": {
"file_data": "BASE64_FILE_DATA",
"filename": "example.txt"
}
}
]
}
b-3-4. Assistant message
assistant message 代表模型先前的回覆。在多輪對話時,如果你要保留對話歷史,通常也會把先前 assistant 的回答一併放進 messages 陣列中。
最基本格式如下:
{
"role": "assistant",
"content": "Hello! How can I assist you today?"
}
assistant message 的 content 可以是:
- 字串
- 由 text 或 refusal 組成的 content parts 陣列
例如:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "這是一般回覆內容。"
}
]
}
若模型拒絕回答,也可能出現 refusal content part:
{
"role": "assistant",
"content": [
{
"type": "refusal",
"refusal": "I can’t help with that request."
}
]
}
assistant message 還可能包含下列欄位:
- refusal
- tool_calls
- function_call(deprecated)
- audio
- name
其中要特別注意的是,當 assistant message 是工具呼叫回應時,content 可以省略,改由 tool_calls 表示模型想呼叫哪個工具。
例如:
{
"role": "assistant",
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_current_weather",
"arguments": "{\n\"location\": \"Boston, MA\"\n}"
}
}
]
}
b-3-5. Tool message
tool message 用來把外部工具執行結果送回模型。當 assistant 回傳 tool_calls 之後,你的程式通常會去實際執行工具,再把工具結果用 tool message 放回 messages,讓模型繼續生成最後回答。
格式如下:
{
"role": "tool",
"tool_call_id": "call_abc123",
"content": "The current weather in Boston is 5°C and cloudy."
}
其中:
- role 固定為 tool
- tool_call_id 必填,必須對應 assistant message 中那一筆工具呼叫的 id
- content 可為字串,或文字 content parts 陣列
這樣模型才知道這筆工具結果是對應哪一個工具呼叫。
Tool Call的相關功能請參考〖打造專屬ChatGPT:透過OpenAI Tool Calling深度整合資源〗。
b-3-6. function message
function message 是較舊的格式,屬於 legacy 用法,目前文件仍有保留。它的結構如下:
{
"role": "function",
"name": "get_current_weather",
"content": "{\"temperature\":\"5\",\"unit\":\"celsius\"}"
}
現在較新的做法通常是使用:
- tools
- tool_calls
- tool message
因此 function message 比較偏向舊版相容用途。
c. response_format:object,Optional
OpenAI支援的輸出格式有以下三種,根據不同格式response_format設定的值有所不同
- text:
{"type": "text"} - json_object:
{"type": "json_object"} - json_schema:
{"type": "json_schema", "json_schema": ...}
使用JSON模式(json_object)時,必須使用system message或user message自行指示模型產生JSON。否則,模型可能會生成無止盡的空白字符流,直到生成達到令牌限制,導致請求長時間運行且看似「卡住」。另外要注意,如果finish_reason="length",則表示生成超過了 max_tokens 或對話超出了最大上下文長度,此時消息內容可能會被部分截斷。
使用json_schema時,基本格式如下:
{
"type" :"json_schema",
"json_schema" {
"name": Required,a-zA-Z0-9_-,最大長度64
"description": 協助模型了解該如何使用這個結構
"schema": JSON Schema物件
"strict": boolean or null,是否嚴格遵循定義。設為True時,只支持部分JSON Schema。預設為False
}
}
OpenAI的Python SDK有較為方便表示法,請參考〖打造專屬ChatGPT:利用LLM進行結構化輸出(Structured Outputs)〗。
d. 取樣方式(創意):temperature、top_p
d-1. temperature:numbers or null,Optional,Defaults to 1
0-2之間的任意數值,數值越大隨機性越高。通過調整概率分佈的平滑度實現:值越大時,機率分佈會變得更加平坦,模型選擇詞彙時會更隨機且更有創意;值越小時,機率分佈更尖銳,模型更傾向於選擇機率最高的那些詞。
d-2. top_p:numbers or null,Optional,Defaults to 1
0-1間任意數值,相較於temperature的另一種取樣方式,稱為「核心取樣」(nucleus sampling),模型只考慮部分詞彙,這些詞的累積機率達到指定的`top_p`,其組成的綜合機率視為100%,其他詞則忽略。具體實現是通過按概率從高到低排序,選擇累計機率不超過`top_p`的詞集進行抽樣。
這兩種方法都旨在控制生成過程的隨機程度,不過從不同的角度出發,分別改變選擇的廣度
temperature和截斷的深度top_p。官方建議兩者擇一使用。
temperature:主要是在調整機率分佈的平滑度和形狀,對所有詞依然維持考慮,只是可能性被重新調整。top_p:則在機率累計到達一定程度時進行硬性截斷,只考慮這部分詞,由此讓選擇範圍集中在機率較高的前p部分上。
e. 重複內容控制:frequency_penalty、presence_penalty
e-1. frequency_penalty:number or null,Optional,Defaults to 0
-2和2之間任意數值,正值會根據新詞在已生成文件中出現的頻率進行懲罰,降低模型逐字重複相同語句的可能性。
e-2. presence_penalty:boolean or null,Optional
-2和2之間任意數值,正值會根據新詞在已生成文件中出現的頻率進行懲罰,增加討論新話題的可能性。
這兩個參數可以根據需要結合使用,來調整生成文本的特點:
- frequency_penalty則更關注於控制單詞的重複度。
- presence_penalty更注重新內容的引入。
f. tool call:tools、tool_choice、parallel_tool_calls
Tool Calling用法及範例:〖打造專屬ChatGPT:透過OpenAI Tool Calling深度整合資源〗。
f-1. tools:array,Optional
透過array將tool物件傳入,最多可以設定128個工具。每個tool物件結構如下:
{
"type": "function",
"function" : {
"name": string,Required,function(tool)的名稱,
"description": string,Optional,描述function(tool)的用途,讓模型知道使用時機
"parameters": object,Optional,描述function需要的參數,使用JSON Schema物件。{
"type": "object",
"properties": {
"參數名稱": {
"type": "參數類型",
"description": "參數說明"
}
}
},
"strict": "boolean or null,Optional,Defaults to false,控制是否嚴格遵守papameters的設定(只支援部分的JSON Schema)"
}
}
其中function的parameters使用的是JSON Schema,撰寫可以參考結構化輸出的介紹文章。
官方指南:https://platform.openai.com/docs/guides/function-calling
JSON Schema:https://json-schema.org/understanding-json-schema/
f-2. tool_choice:string or object,Optional
選擇是否呼叫工具,使用字串輸入時有三種選擇:
- none:不使用外部工具,沒有傳遞tools參數的預設選項。
- auto:自動選擇是否使用外部工具,有傳遞tools參數的預設選項。
- required:必須使用一個或多個外部工具。
如果要指定使用特定工具,則設定一個物件:
{
"type": "function",
"function" : {
"name": string,Required,function(tool)的名稱
}
}
選擇特定工具或是required時,finish_reason就會是stop而不是tool_calls。
f-3. parallel_tool_calls:boolean or null,Optional,Defaults to true
是否一次呼叫多個工具,一次呼叫多個工具可能導致function參數中的strict參數失效,請參考官方文件。
g. stream相關:stream、stream_options
g-1. stream:boolean or null,Optional,Defaults to false
# a ChatCompletion request
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "What's 1+1? Answer in one word."}],
temperature=0,
stream=True, # this time, we set stream=True
)
for chunk in response:
print(content=chunk.choices[0].delta.content)
print("****************")
設置後,會以Stream的方式接收數據,每次獲得一個片段(Chunk),組裝後才是完整回覆,。
g-2. stream_options:object or null,Optional,Defaults to null。
只有在stream設定為true時才會生效。可用key為include_usage(boolean,Optional,Defaults to false),設定後可以取得這個問題是API用量資訊。
h. 控制生成行為:max_completion_tokens、n、logit_bias、stop
h-1. max_completion_tokens:integer or null,Optional
控制生成的最大token數量。
h-2. n:integer or null,Optional,Defaults to 1
模型回傳結果有幾個版本(choice),版本越多成本越高。
h-3. logit_bias:map,Optional,Defaults to null
用於調整特定token在生成文本中的出現機率。在數學上,偏差被添加到模型生成的logits中,再進行抽樣。通過為標記指定偏差值,用戶可以增加或減少其被選擇的可能性,從而更好地控制模型生成的結果。這對於引導生成特定風格或內容非常有用。
接收一個JSON object,將tokenizer中的token ID映射到一個-100和100間的值,數值越高出現的可能越高。
h-4. stop:string / array / null,Optional,Defaults to null
最多可以設定4個序列(sequences),使API停止生成更多的token。像是提到習維尼時,就停止生成更多內容。
i. Log properties:logprobs、top_logprobs
i-1. logprobs:boolean or null,Optional,Defaults to false
是否回傳輸出token的對數機率,設定為True時,可以在choices中的logprobs取得資訊。
i-2. top_logprobs:integer or null,Optional
0-20間的整數,當logprobs為True時,控制每個位置上最可能的token數量。
j. 評估與管理:store、metadata、seed、user
j-1. store:boolean or null,Optional,Defaults to false
是否儲存這次請求的資料,儲存後可以使用OpenAI的model distillation及evals功能。
j-2. metadata:object or null,Optional
開發者定義的資料,能夠在OpenAI Dashboard中用來篩選資料。
j-3. seed:integer or null,Optional。
控制回答隨機性的參數,如果設定為定值,會回傳相同的結果。需要搭配請求API後回傳的system_fingerprint,搭配這個資訊就能夠了解請求結果改變的原因。
j-4. user:string,Optional。
代表終端用戶的唯一標識符,可以幫助OpenAI監控和檢測濫用行為。
k. 其他:modalities、prediction
k-1. modalities:array or null,Optional
希望模型生成的內容格式,一般都是["text"],gpt-4o-audio-*可選擇["text", "audio"]。
k-2. prediction:object,Optional
針對預測輸出的設定,可以在預先知道模型回應的大部分內容時大幅提高回應速度。這種情況最常見於僅對大部分內容進行微小更改後重新生成文件的時候。
官方範例:程式碼重構。
{
"type": "content",
"content": string or array
}
2. OpenAI Python SDK封裝的其他參數
a. 額外參數
如果有額外的參數要在API傳遞,依據不同的位置使用不同的名稱,
extra_query:查詢字串extra_body:請求Bodyextra_headers:請求Header
資料皆為key-value對應,Python中使用dict資料類型。
b. timeout
預設情況(httpx.Timeout(timeout=600.0, connect=5.0))下,請求在10分鐘後會超時。透過timeout選項進行調整,接受浮點數(秒)或httpx.Timeout物件。
# Configure the default for all requests
client = OpenAI(
timeout=20.0,
)
# More granular control:
client = OpenAI(
timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0)
)
# Override per-request:
client.with_options(timeout=5.0).chat.completions.create(
messages=[{"role": "user", "content": "Hello"}],
model="gpt-4o"
)
# Override the client-level default timeout for this request, in seconds
client.chat.completions.create(
messages=[{"role": "user", "content": "Hello"}],
model="gpt-4o",
timeout=5
)
某些錯誤在預設情況下會自動重試兩次,並採用短暫的指數退避策略。連線錯誤(例如,由於網絡連接問題)、408 Request Timeout, 409 Conflict, 429 Rate Limit, and >=500 Internal errors皆會被預設重試。改寫方式:
# Configure the default for all requests:
client = OpenAI(max_retries=0) # default is 2
# Or, configure per-request:
client.with_options(max_retries=5).chat.completions.create(
messages=[{"role": "user", "content": "Hello"}],
model="gpt-3.5-turbo",
)
C. The chat completion object
一般請求下,Chat Completion API回傳的物件結構:
id,string,唯一值,請求的ID。choices,array,回答的內容,根據不同請求參數n,array中會有n個元素,每個元素都是一個物件,結構如下:- finish_reason,string,模型停止生成標記的原因:
- index,integer,choices的索引值,與請求參數n對應。
- message,object,模型回傳的訊息,結構如下:
- content:string or null,訊息內容。
- refusal:string or null,拒絕的訊息,請求時設定參數response_format使用
json_schema相關時才會出現。 - tool_calls,array,此次請求中模型回應所需的Tool們,並以object表示,給個object格式如下:
- id:string,這次呼叫的ID。
- type:string,這裡只會是function。
- function,object:
- name:Tool(function)的名稱,與傳入參數Tools中的name相同。
- arguments:string,通常是json字串,代表呼叫Tool所需的參數。請注意,模型並不總是生成有效的JSON,並且可能會臆測出您函數結構中未定義的參數。在呼叫函數之前,請在您的代碼中驗證這些引數。
- role:訊息角色,這裡通常會是Assistant message。
- logprobs:object or null,啟用參數logprobs時,模型提供的相關資訊,跟著message中的content或refusal的每一個token的log probability。結構如下:
- content:array or null。
- refusal:array or null。
created,integer,Unix時間戳記,請求建立的時間。model,string,本次使用的模型。service_tier,string or null,請求API時如果有帶入相關資訊,回傳結果上才會出現,該參數請參考官方說明。system_fingerprint,string,系統的指紋,有助於確認輸出變化是否是OpenAI模型後端更新導致,當設定更改時,即使使用相同的seed,結果也可能不同。object,string,物件名稱,使用Chat Completion API時,值會是chat.completion。usage,object,此次請求的用量,結構如下:- completion_tokens:integer,生成回覆的token數量。
- prompt_tokens:integer,問題的token數量。
- total_tokens:integer,completion_tokens+prompt_tokens的總額。
- completion_tokens_details:object,結構如下,
- reasoning_tokens:integer,用於推理的token。
- accepted_prediction_tokens:integer,使用參數prediction時,預測的token有出現在結果的數量。
- rejected_prediction_tokens:integer,使用參數prediction時,預測的token未出現在結果的數量。但就像推理token一樣,這些token在計算總完成token數時仍會被包含在內,用於計費、輸出和上下文窗口限制。
- audio_tokens:integer,音訊使用的token。
- prompt_tokens_details:object,結構如下,
- audio_tokens:integer,音訊使用的token。
- cached_tokens:integer,快取使用的token。
D. The chat completion chunk object
Stream請求下,Chat Completion API回傳每個Chunk的結構:
id:string,唯一值,請求的ID,同個請求不同Chunk的ID相同。choices:array,回答的內容,根據不同請求參數n,array中會有n個元素。設定stream_options: {"include_usage": true}時,最後一則訊息choices為空,此時usage為此次請求的總API用量。每個元素都是一個物件,結構如下,- finish_reason:string,模型停止生成標記的原因,有以下幾種可能,
- index:integer,choices的索引值,與請求參數n對應。
- delta:object,模型回傳的訊息,結構如下,
- content:string or null,訊息內容。
- refusal:string or null,拒絕的訊息,請求時設定參數response_format使用json_schema時才會出現。
- tool_calls:array,此次請求中模型回應所需的Tool們,並以object表示,給個object格式如下,
- id:string,這次呼叫的ID。
- type:string,這裡只會是function。
- function:object
- name:Tool(function)的名稱,與傳入參數Tools中的name相同。
- arguments:string,通常是json字串,代表呼叫Tool所需的參數。請注意,模型並不總是生成有效的JSON,並且可能會臆測出您函數結構中未定義的參數。在呼叫函數之前,請在您的代碼中驗證這些引數。
- role:訊息角色,這裡通常會是Assistant message。
- logprobs:object or null,啟用參數logprobs時,模型提供的相關資訊,跟著message中的content或refusal的每一個token的log probability。結構如下:
- content:array or null。
- refusal:array or null。
created:integer,Unix時間戳記,請求建立的時間。model:string,本次使用的模型。service_tier:string or null,請求API時如果有帶入相關資訊,回傳結果上才會出現,該參數請參考官方說明。system_fingerprint:string,系統的指紋,有助於確認輸出變化是否是OpenAI模型後端更新導致,當設定更改時,即使使用相同的seed,結果也可能不同。object:string,物件名稱,使用Chat Completion API時,值會是chat.completion.chunk。usage:object,此次請求的用量,設定stream_options: {"include_usage": true}時才會出現,此時choices為null。結構如下,- completion_tokens:integer,生成回覆的token數量。
- prompt_tokens:integer,問題的token數量。
- total_tokens:integer,completion_tokens+prompt_tokens的總額。
E. 總結
文章中,探討了如何使用OpenAI的Python SDK來操作Chat completions API,特別關注gpt-4o模型所需的參數以及回傳物件的結構,並針對不太容易理解的參數進行重新分組和白話文解釋,希望能讓OpenAI虛無縹緲的說明稍微具象化。
從模型輸入參數中,衍生出了兩個主題:
1. 〖打造專屬ChatGPT:利用LLM進行結構化輸出(Structured Outputs)〗:在這部分,將記錄如何設計並生成結構化的文本輸出,讓我們可以輕易的利用LLM強大的語言能力,直接從對話中(非結構化資料)萃取出特定關鍵資訊(結構化資料)。
2. 〖打造專屬ChatGPT:透過OpenAI Tool Calling深度整合資源〗:這個主題關注如何通過OpenAI的Tool Calls(前身為function calls),將模型與外部資源深度整合。將記錄如何利用這些工具來擴展模型的能力,從而獲取更豐富和專業化的服務。
OpenAI Chat completions API的參數眾多,希望這樣的整理,能夠更有效率的查詢所需資料。