接口描述
- | 描述 |
|---|---|
接口名稱 | 對話 |
請求路徑 | //wishub-x5.daliqc.cn/api/v1/c760bd1e83/d1a696ae54419d34987d95d52ac337f8/v1/chat/completions(僅示例,以服務詳情頁的接口地址為準) |
功能描述 | 針對描述會話的消息列表,模型將返回響應 |
請求參數
請求頭參數
參數 | 示例值 | 描述 |
|---|---|---|
Authorization | Bearer AppKey | 鑒權信息填入AppKey。 |
Content-Type | application/json | - |
請求參數
說明: 此參數為全平臺模型通用,每個模型支持的參數、參數范圍可能因模型不同而有所差異,詳細可見模型的API文檔。
參數名稱 | 二級參數 | 三級參數 | 四級參數 | 類型 | 必選 | 描述 |
|---|---|---|---|---|---|---|
model | - | - | - | string | 是 | 模型ID。 |
messages | - | - | - | array
| 是
| 用戶當前輸入的期望模型執行指令。一個列表內多個字典,支持多輪對話。 對話列表,每個列表項為一個message object,message object中包含用戶role和content兩部分信息: role可選值為user、assistant、system; role為system時,不校驗content空值,且message中system只能位于開頭,即messages[0]位置; role為user時說明是用戶提問,role為assistant時說明是模型回答,而content為實際的對話內容; 單輪/多輪對話中,最后一個message中role必須為user,content為用戶輸入的最新問題,其余結果除system角色外都為歷史信息拼接送入 messages中,assistant和user的role只能交替出現,assistant后只能跟user,user后只能跟assistant。 |
- | role | - | - | string | 否 | 對話角色,role類型枚舉值:user、assistant、system。 |
- | content | - | - | string/array | 是 | 對話內容,內容目前有兩種格式:string,array。 string類型:表示文本對話內容。 array類型:表示多個對話內容列表,每個列表項為一個content object,每個content object包含type、image_url、text等信息。 type可選值為text、image_url。 type為text時,取text字段作為對話內容。 type為image_url時,取image_url字段作為對話內容。 |
- | - | type | - | string | 否 | 對話內容類型,type類型枚舉值: text,image_url。 |
- | - | text | - | string | 否 | 文本對話內容,type為text時傳入。 |
- | - | image_url | - | object | 否 | 圖片對話內容,type為image_url時傳入。 |
- | - | - | url | string | 否 | 圖片對話內容中的圖片地址,目前可以為二進制數據的base64編碼。 |
frequency_penalty | - | - | - | float | 否 | 頻率懲罰。它影響模型如何根據文本中詞匯token的現有頻率懲罰新詞匯token。值大于0,會根據新標記在文本中的現有頻率來懲罰新標記,從而降低模型逐字重復同一行的可能性。 一般取值范圍[-2, 2],具體取值范圍、默認值需見對應模型。 |
max_tokens | - | - | - | int | 否 | 最大生成長度。控制最大生成長度,超過該值則截斷。 一般取值范圍(0, 2048],具體取值范圍、默認值需見對應模型。 |
n | - | - | - | int | 否 | 1-n個choices。 |
presence_penalty | - | - | - | float | 否 | 存在懲罰。用戶控制模型生成時整個序列中的重復度。 一般取值范圍[-2.0, 2.0],具體取值范圍、默認值需見對應模型。 |
response_format | - | - | - | object | 否 | 返回格式。 |
- | type | - | - | string | 否 | 返回格式枚舉值:text,json_object。 |
seed | - | - | - | int | 否 | 隨機種子。用于指定推理過程的隨機種子,相同的seed值可以確保推理結果的可重現性,不同的seed值會提升推理結果的隨機性。 一般取值范圍(0, 9223372036854775807],具體取值范圍、默認值需見對應模型。 |
stop | - | - | - | string/array | 否 | 生成停止標識。當模型生成結果以stop中某個元素結尾時,停止文本生成。 |
stream | - | - | - | bool | 否 | 是否以流式接口的形式返回數據。默認為False,非流式。 |
stream_options | - | - | - | object | 否 | 流式選項,stream為True有效。 |
- | include_usage | - | - | bool | 否 | 是否在返回中包含usage,stream為True有效。 取值為True時,會在流式返回的最后一個chunk里返回usage信息,并該chunk中choices列表為空。 |
temperature | - | - | - | float | 否 | 溫度采樣。該值越高生成文本的多樣性越高,該值越低生成文本的確定性越高。 一般取值范圍(0, 2),具體取值范圍、默認值需見對應模型。 |
top_k | - | - | - | int | 否 | top_k 采樣。取值越大,生成的隨機性越高;取值越小,生成的確定性越高。 一般取值范圍[1, 100],具體取值范圍、默認值需見對應模型。 |
top_p | - | - | - | float | 否 | top_p 采樣。該值越高生成文本的多樣性越高,該值越低生成文本的確定性越高。該值為 0 時沒有隨機性。 一般取值范圍(0, 1],具體取值范圍、默認值需見對應模型 |
user | - | - | - | string | 否 | 用戶唯一身份ID。 |
請求參數示例
{
"model": "1234567890", // 模型ID
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}請求返回
非流式返回
非流式正常返回
字段名稱 | 二級字段 | 三級字段 | 字段類型 | 描述 |
|---|---|---|---|---|
id | - | - | string | 唯一標識符 |
choices | - | - | string | choices列表 |
- | index | - | int | choice索引 |
- | message | - | object | 模型生成的消息 |
- | - | role | string | 對話角色 |
- | - | content | string | 對話消息內容 |
- | finish_reason | - | string | 模型停止生成標記的原因。 stop: 模型生成遇到自然停止點或提供的停止序列; length: 達到請求中指定的最大標記數; content_filter:如果由于內容過濾器中的標志而省略了內容 tool_calls/function_call: 模型調用了函數。 |
created | - | - | int | Unix時間戳(以秒為單位)。 |
model | - | - | string | 調用的模型名稱。 |
object | - | - | string | 返回的對象類型。非流式返回始終為:chat.completion |
usage | - | - | object | 請求使用情況的統計信息。 |
- | completion_tokens | - | int | 生成token數。 |
- | prompt_tokens | - | int | 輸入token數。 |
- | total_tokens | - | int | 使用的token總數(prompt + completion)。 |
返回結果示例
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "xxx-chat",
"choices": [{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?"
}
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}非流式異常返回
非流式異常返回時:
http code 返回非200。
http body 中返回 error 結構,error結構中包含code、type、message、param等信息,具體可見【推理服務API—錯誤處理】章節內容。
錯誤結果示例
{
"error" : {
"code" : "500001",
"type" : "INVOKE_MODEL_ERROR",
"message" : "服務接口異常,請聯系管理員"
}
}流式返回
流式正常返回
字段名稱 | 二級字段 | 三級字段 | 字段類型 | 描述 |
|---|---|---|---|---|
id | - | - | string | 唯一標識符 |
choices | - | - | string | choices列表 |
- | index | - | int | choice索引 |
- | delta | - | object | 模型生成的消息 |
- | - | role | string | 對話角色 |
- | - | content | string | 對話消息內容 |
- | finish_reason | - | string | 模型停止生成標記的原因。 stop: 模型生成遇到自然停止點或提供的停止序列; length: 達到請求中指定的最大標記數; content_filter:如果由于內容過濾器中的標志而省略了內容 tool_calls/function_call: 模型調用了函數。 |
created | - | - | int | Unix時間戳(以秒為單位)。 |
model | - | - | string | 調用的模型名稱。 |
object | - | - | string | 返回的對象類型。流式返回始終為:chat.completion.chunk |
usage | - | - | object | 請求使用情況的統計信息。 僅在stream_options: {"include_usage": true}設置時顯示。如果存在,則它包含一個 null 值,但最后一個塊包含整個請求的token使用情況的統計信息。 |
- | completion_tokens | - | int | 生成token數。 |
- | prompt_tokens | - | int | 輸入token數。 |
- | total_tokens | - | int | 使用的token總數(prompt + completion)。 |
返回結果示例
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"xxx-chat", "choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"xxx-chat", "choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
....
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"xxx-chat", "choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}stream_options.include_usage 為 True 時多返回一條包含usage流式消息。
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268199,"model":"xxx-chat", "choices":[], "usage": {"prompt_tokens": 9,"completion_tokens": 120,"total_tokens": 129}}流式異常返回
流式異常分為兩種:
如果在流式請求接收處理之前發生了異常,如鑒權、參數校驗等問題,與普通的非流式一樣返回http code,并帶有error結構。
如果在流式請求已經接收,會先對外返回流式請求連接建立的信息,此時http code為200,而在后續模型流式返回過程中發生了異常,會在流失返回的chunk返回error結構,并終止當前的流式請求。
流式請求建立后的異常返回示例
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"xxx-chat", "choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"xxx-chat", "choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
....
{"error":{"code":"500001","type":"INVOKE_MODEL_ERROR","message":"服務接口異常,請聯系管理員"}}請求示例代碼
假設平臺用戶組AppKey=884c8fc4054548a7b1ca1123592f5b7,模型ID=96dcaaaaaaaaaaaa5ff55ea377831a,以此為例進行說明。curl方式請求
curl --request POST \
--url //wishub-x5.daliqc.cn/api/v1/c760bd1e83/d1a696ae54419d34987d95d52ac337f8/v1/chat/completions \
--header 'Accept: */*' \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Authorization: Bearer 884c8fc4054548a7b1ca1123592f5b7' \
--header 'Content-Type: application/json' \
--data '{
"model": "96dcaaaaaaaaaaaa5ff55ea377831a",
"messages": [
{
"role": "user",
"content": "Hello"
}
]
}'python方式請求
import json
import requests
URL = "//wishub-x5.daliqc.cn/api/v1/c760bd1e83/d1a696ae54419d34987d95d52ac337f8/v1/chat/completions"
headers = {
"Authorization": "Bearer 884c8fc4054548a7b1ca1123592f5b7",
"Content-Type": "application/json"
}
data = {
"model": "96dcaaaaaaaaaaaa5ff55ea377831a",
"messages": [
{"role": "user", "content": "Hello"}
],
"stream": True
}
try:
response = requests.post(URL, headers=headers, json=data, stream=True)
if response.status_code != 200:
print(response.text)
else
for line in response.iter_lines(chunk_size=8192, decode_unicode=True):
## 處理請求
if line :
if "[DONE]" == line:
break
# 去除data前綴:
json_string = line.removeprefix("data:")
# 轉為json:
jsonData = json.loads(json_string)
# 判斷是否有值
if "choices" in jsonData and len(jsonData["choices"][0]) > 0:
firstChoice = jsonData["choices"][0]
# 取content的邏輯
if "delta" in firstChoice and "content" in firstChoice["delta"] :
# content內容
print(firstChoice["delta"]["content"])
except Exception as e:
print(f"Exception: {e}")openai 客戶端示例代碼
import openai
from openai import OpenAI
client = OpenAI(base_url="//wishub-x5.daliqc.cn/api/v1/c760bd1e83/d1a696ae54419d34987d95d52ac337f8", api_key="884c8fc4054548a7b1ca1123592f5b7")
messages = [
{"role": "user", "content": "Hello"}
]
try:
stream = client.chat.completions.create(
model="96dcaaaaaaaaaaaa5ff55ea377831a",
messages=messages,
stream=True
)
# 流式
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
except openai.APIStatusError as e:
print(f"APIStatusError: {e.status_code}, {e.message}, {e.body}")
except openai.APIError as e:
print(f"APIError: {e.body}")
except Exception as e:
print(f"Exception: {e}")