chatgpt介面開發筆記1:completions介面
個人博客地址: https://note.raokun.top
擁抱ChatGPT,國內訪問網站:https://www.playchat.top
序:寫這一系列文章的動機來源于在部署Chanzhaoyu/chatgpt-web專案時發現,體驗并不好,會存在多人同時提問時回答會夾斷,背景關系接不上的現象,同時希望搭建的專案能實作前后端分離,于是用webapi寫了一套后端介面,我會把我在對接openai的介面開發的經驗分享給大家,
completions介面
目前我們用到最多的介面就是completions介面
POST https://api.openai.com/v1/chat/completions
官方給出的入參示例為:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}'
header部分:
- Authorization 身份驗證 $OPENAI_API_KEY 替換成你用到的key
請求體:
- model 使用的模型,這里使用的是gpt 3.5的模型
- messages 會話
**注意點:這里的messages 是介面的核心,分為三類:user、assistant、system **
同時,我們可以
- 添加max_tokens 用于控制回復內容的最大長度,一般可以設定為2000
- 添加stream 用于控制介面是回傳json字串還是回傳stream的流(stream可以實作打字機效果)
- 添加presence_penalty或frequency_penalty 用于控制回復的開放程度,官方稱為懲罰機制
回傳引數官方示例:
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
重點引數決議:
- created 回復時間的時間戳
- message 回復內容,回復內容的role固定為assistant
- finish_reason 結果完成原因 可能是"stop"(代表沒有更多的建議),"cutoff"(代表建議被截斷),或者"completion"(代表建議完成)
- prompt_tokens:訊息中包含的單詞數量
- completion_tokens:結果中包含的單詞數量
- total_tokens:訊息中總共包含的單詞數量
如何控制背景關系
相信很多部署過chatgpt-web的同學都有遇到過背景關系不連續,接不上的情況,其原因在于會話的資料是存在前端快取里的,回傳訊息時出現了夾斷,前端獲取不到被夾斷報錯的上一次的聊天回復的內容,
看過chatgpt-web的原始碼的同學應該發現了,在發起聊天請求時,會傳會話id給介面,我開始也是以為id是背景關系的判斷依據,后來在開發介面時才注意到OpenAI的介面并沒有Id這樣的引數,這說明會話的id并不是背景關系的檢索條件,
通過測驗實作,我總結了下:
背景關系的依據與會話id,還有你使用的key都是沒有關系的,它只與你的message引數有關,
實作精確的背景關系
為了實作精確的背景關系,你可以在發起請求時,將介面回復的內容一并帶上,因為message 是一個集合,如下:
"messages": [{
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
}{"role": "user", "content": "Hello!"}]
如果條件允許可以多加點(大于等于2),同時這肯定是消耗更多的余額的,
到此,你應該對completions介面已經有了充足的認識了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551304.html
標籤:其他
上一篇:【Docker】鏡像制作和管理
下一篇:返回列表
