【大模型應用開發極簡入門】使用GPT-4和ChatGPT的編程起點:ChatCompletion詳解

文章目錄

    • 一. 多輪對話
    • 二. 使用起點: ChatCompletion
    • 三. 調用模型:create方法
      • 1. 主要的輸入參數:model、message
      • 2. 對話長度和token數量管理
      • 3. 可選參數
    • 四. ChatCompletion端點的輸出格式

本文討論如何使用GPT-4和ChatGPT背后的模型,以及OpenAI Python庫。

目前,GPT-3.5 Turbo是最便宜且功能最多的模型。因此,它也是大多數用例的最佳選擇。

一. 多輪對話


import openai
# 對GPT-3.5 Turbo來說,端點是ChatCompletion
openai.ChatCompletion.create(# 對GPT-3.5 Turbo來說,模型是gpt-3.5-turbomodel="gpt-3.5-turbo",# 消息列表形式的對話messages=[{"role": "system", "content": "You are a helpful teacher."},{"role": "user","content": "Are there other measures than time \complexity for an algorithm?",},{"role": "assistant","content": "Yes, there are other measures besides time \complexity for an algorithm, such as space complexity.",},{"role": "user", "content": "What is it?"},],
)

在hello world的例子中,我們使用了最少數量的參數,來用于預測的LLM和輸入消息。

現在我們關注,輸入消息中的對話格式允許模型進行多輪對話。

請注意,API不會在其上下文中存儲先前的消息。問題“What is it?”問的是先前的回答,這只有在模型知道答案的情況下才有意義。每次模擬聊天會話時,都必須發送整段對話。 ing

?

GPT-3.5 Turbo模型和GPT-4模型針對聊天會話進行了優化,但這并非強制要求。

這兩個模型可用于多輪對話和單輪任務。如果你在提示詞中請求模型補全文本,那么它們也可以很好地完成傳統的文本補全任務。

?

二. 使用起點: ChatCompletion

GPT-4和ChatGPT都使用起點是:openai.ChatCompletion
開發人員可以通過更改模型ID來在GPT-3.5Turbo和GPT-4之間切換,而無須修改其他代碼。

?

三. 調用模型:create方法

ChatCompletion的create方法讓用戶能夠調用OpenAI的模型。

當然,還有其他方法可用,但它們對與模型的交互沒有幫助。你可以在OpenAI Python庫的GitHub代碼倉庫中查看代碼。

?

1. 主要的輸入參數:model、message

ChatCompletion端點及其create方法有多個輸入參數,但只有兩個是必需的,如下表

參數名類型描述
modelstring可以使用openai.Model.list()列出目前可以用模型
messagelist表示對話的消息對象數組。消息對象有兩個屬性:role(user、system、assistant)和content(包含對話消息的字符串)
  • 對話以可選的system content開始,然后是交替出現的user content和assistant content。
  • system content幫助設置assistant的行為。(prompt?)
  • user content相當于是用戶在ChatGPT網頁界面中鍵入的問題或句子。它既可以由應用程序的用戶生成,也可以作為指令設置。
  • assistant content有兩個作用:要么存儲先前的回復以繼續對話,要么設置為指令,以提供所需行為的示例。由于模型沒有任何關于歷史請求的“記憶”,因此存儲先前的消息對于給出對話上下文和提供所有相關信息是必要的。

?

2. 對話長度和token數量管理

如前所述,對話的總長度與token的總數相關。這將影響以下方面。

  • 成本定價基于標記計算。
  • 時間
  • 標記越多,響應所需的時間就越長——最長可能需要幾分鐘。
  • 模型是否工作

管理token數量

  • 標記總數必須小于模型的上限。
  • 所以我們需要控制對話的長度。你可以通過管理消息的長度(prompt去引導)來控制輸入標記的數量,并通過max_tokens參數來控制輸出標記的數量。
  • OpenAI提供了一個名為tiktoken的庫,讓開發人員能夠計算文本字符串中的標記數。我們強烈建議在調用端點之前使用此庫來估算成本。

?

3. 可選參數

OpenAI提供了其他幾個選項來微調用戶與庫的交互方式。如下幾個常見參數

參數名類型描述
functionslist由可用函數組成的數組
function_callstring/object控制模型的響應方式
- none:模型必須以標準方式響應用戶
- {“name”:“my_function”}表示模型必須給出使用指定函數的回答
- auto:表示模型可以在以標準方式響應用戶和functions數據定義的函數之間進行選擇
temperature數值(默認為1;可接受介于0和2之間的值)- 0:表示對于給定的輸入,對模型的調用很可能返回相同的結果,盡管響應結果會高度一致,但OpenAI不做保證。
- 溫度越高,結果的隨機性就越強,LLM通過預測一系列token來生成回答。根據輸入上下文,LLM為每個潛在的標記分配概率。
- 當溫度=0時,LLM將始終選擇概率最高的標記,較高的溫度可以產生更多樣化,更具有創造性的輸出
nint(默認1)參數可以為給定消息生成多個回答。不過當溫度=0時,雖然可以得到多個回答,但都相同或非常相似。
streamBoolean(默認false)回答以流的形式呈現。當回答內容較長時,可以提供更好的用戶體驗。
max_tokensint- 參數指定在聊天中生成的最大標記數。雖然為可選值,強烈建議設置為合適的值,以控制成本,但是當設置的過大時,那么可能會被OpenAI忽略。
- 輸入和生成的標記總數不能超過模型的上限。

?

四. ChatCompletion端點的輸出格式

你已經知道如何使用基于聊天模式的模型,讓我們看看如何使用模型給出的結果。

以下是Hello World示例程序的完整響應:

{"choices": [{"finish_reason": "stop","index": 0,"message": {"content": "Hello there! How may I assist you today?","role": "assistant",},}],"created": 1681134595,"id": "chatcmpl-73mC3tbOlMNHGci3gyy9nAxIP2vsU","model": "gpt-3.5-turbo","object": "chat.completion","usage": {"completion_tokens": 10, "prompt_tokens": 11,"total_tokens": 21},
}

?

現在說明下各字段的含義

字段名稱類型描述
choices對象數組包含模型實際響應的數組,默認情況如下,該數組只有一個元素,可以通過入參n進行修改。該元素包含以下內容:
1. finish_reson:回答結束的原因。在hello world的事例中,finish_reason是stop,也就是我們從模型中得到到完整的響應。如果在輸出過程中出現錯誤,那么將體現在該字段中;
2. index:從choices中選擇對象的索引
3. message:包含role、content或function_call,role的值始終是assistant,content包含模型生成的文本。一般這樣調用:response[ ‘choices’ ][ 0 ][‘message’][‘content’]。
createdtimestamp生成的時間戳
idstringOpenAI內部使用的技術標識符
objectstring對于GPT-4模型和GPT-3.5模型,為chat.completion
usagestring提供有關在此查詢中使用的標記數的信息,從而為你提供費用信息。
- prompt_tokens表示輸入中的標記數
- completion_tokens表示輸出中的標記數
這里有:total_tokens = prompt_tokens + completion_tokens

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15424.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15424.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15424.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎么查看項目中antd的版本

使用antd時,有在線參考資料,但是需要根據項目需要,選擇對應版本的參考資料。 antd在線參考資料: 組件總覽 - Ant Design 如何查看當前項目中antd的版本呢? 在項目的終端中輸入: npm list antd antd官網選擇…

慶余年第2季,帶你走進怎樣的世界?

《慶余年》第二季 演員陣容與幕后團隊的新組合為我們帶來了別樣的觀影體驗 他的演技真的是在線,其實這劇本很難搞 該搞笑的時候要搞笑,但也不能一直在無厘頭胡鬧 所以題主說節奏拿捏的好我也很贊同 反觀有其他幾位演員控制力就差很多 特別是某一集…

Spring:JWT

文章目錄 一、介紹 一、介紹 JWT(JSON Web Token)是一種開放標準(RFC 7519)的方法,用于在雙方之間安全地傳輸信息。這些信息可以是驗證、授權、信息交換等。JWT 通常被用于在客戶端和服務器之間傳遞用戶信息&#xff…

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代碼生成

0 工具準備 1.STM32CubeMX1 前言 本文介紹基于STM32CubeMX,使用stm32h743xi的對FDCAN2進行配置的方法。 2 初始化代碼生成 2.1 選擇FDCAN引腳 本例選擇PB5、PB6作為FDCAN2的RX、TX引腳。 2.2 選擇FDCAN時鐘源 本例選擇PLL2Q作為FDCAN時鐘源,頻率…

Expected Boolean, got String with value “true“.

在vue el-tree節點添加屬性expand-on-click-node"false",瀏覽器控制臺提示上面的錯誤, 將false的雙引號去年依然提示,然后在expand-on-click-node"false"最前面添加冒號,即變成雙向綁定,刷新頁面…

UDP的報文結構和注意事項

UDP協議是在傳輸層的協議。 UDP無連接,不可靠傳輸,面向數據報,全雙工。 UDP的報文結構 學習網絡協議,最主要的就是報文格式。 對于UDP來說,應用層的數據到達,UDP之后,就會給應用層的數據報前面…

服務器端口開放,服務器端口開放命令與方法的專業闡述

在計算機網絡中,服務器端口的開放是確保網絡通信暢通無阻的關鍵步驟。服務器端口是服務器與外部網絡通信的入口,通過正確配置和開放相應的端口,可以實現各種網絡服務和應用的功能。 一、命令與工具 在Linux系統中,常用的命令和工…

Python中如何將字符串轉換成可調用的方法

字符串轉化成方法 import importlibdef find_method_by_str(method_path):"""通過字符串,尋找方法"""if not method_path:return Nonemethods method_path.split(".")_module importlib.import_module(".".jo…

4. C++網絡編程-TCP客戶端的實現

TCP Client網絡編程基本步驟 創建socket&#xff0c;指定使用TCP協議使用connect連接服務器使用recv/send接收/發送數據關閉socket TCP-connect連接請求 !man 2 connect #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int connect(int sock…

邦芒簡歷:簡歷照片的藝術與真實

在美顏濾鏡與P圖技術盛行的今天&#xff0c;許多人似乎對“完美”形象有著不懈的追求。從社交平臺的自拍&#xff0c;到簡歷上的證件照&#xff0c;無一不經過精心的修飾與處理。然而&#xff0c;這種對完美的追求在求職過程中&#xff0c;是否總是起到積極的作用呢&#xff1f…

內網滲透(不出網上線CS)

目錄 CS的概述 實驗&#xff1a;不出網上線CS實驗 一&#xff1a;給PC1種馬 二&#xff1a;使用Beacon SMB去控制PC2。 三&#xff1a;將CS權限傳遞給MSF 四&#xff1a;將msf權限傳遞給CS CS的概述 cs是一款強大的控制windows木馬的工具。是目前滲透中常使用的一個工具…

一些Spring Boot直接的解釋

RequestParam() 就是從問號之后的鍵值對獲取值綁定值,這個方法用的是get方法 /fjg?namefjg http://example.com/find?productId1234GetMapping("/find") public String getProduct(RequestParam("productId") String productId) {return "Product …

fastapi中實現多個路由請求

大家伙&#xff0c;我是雄雄&#xff0c;歡迎關注微信公眾號&#xff1a;雄雄的小課堂。 前言 最近在寫機器人相關的接口&#xff0c;順手學了學python&#xff0c;發現這是個好東西&#xff0c;寫代碼效率比java要高很多&#xff0c;比如寫個詞云呀&#xff0c;寫個回調呀&am…

隨手筆記4

1、https://www.pgyer.com/app/distribution 蒲公英 移動發布二維碼

gRPC和ProtoBuf

gRPC介紹 gRPC是一個高性能、開源且通用的RPC框架&#xff0c;它基于HTTP/2標準協議和Protocol Buffers進行數據序列化&#xff0c;支持多種編程語言。 rpc和http區別 傳輸協議&#xff1a;RPC可以基于TCP或HTTP協議&#xff0c;而HTTP服務則工作在HTTP協議之上。效率和性能…

android 問題記錄:gradle.kts文件引入本地jar包

在build.gradle文件中引入本地的jar文件&#xff0c;可以使用files方法來添加本地的jar文件到項目的依賴中。在build.gradle引入jar包我們都很熟悉了&#xff0c;具體代碼如下 implementation files(libs/test.jar)// 或者 compile files(libs/test.jar) 但是這種寫法目前在kt…

kafka 消費模式基礎架構

kafka 消費模式 &基礎架構 目錄概述需求&#xff1a; 設計思路實現思路分析1.kafka 消費模式基礎架構基礎架構2&#xff1a; 參考資料和推薦閱讀 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,…

mainwindow.ui和mainwindow.h和ui_mainwindow.h這幾個文件之間的聯系是什么

在Qt應用程序開發中&#xff0c;mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 這三個文件之間有著緊密的聯系&#xff0c;共同構成了使用Qt Designer設計的圖形用戶界面&#xff08;GUI&#xff09;應用程序的基礎。下面是這三個文件各自的作用及它們之間的關聯&#xff1…

HTML5 文件處理及應用

HTML5 文件處理及應用 目錄 核心對象文件信息讀取文件拖放FileReaderSyncFileWriter APIBlob URL與 revokeObjectURL()跨源資源共享 (CORS)HTML5文件File API為瀏覽器提供了與用戶計算機上的文件進行交互的能力,使得Web應用程序能夠在客戶端直接處理文件數據,而無需依賴服務…

Golang:使用jszwec/csvutil讀取csv文件

jszwec/csvutil 高性能、慣用的CSV記錄編碼和解碼到本機Go結構 文檔 https://github.com/jszwec/csvutil 安裝 go get github.com/jszwec/csvutil要讀取的文件 user.csv name,age,CreatedAt jacek,26,2012-04-01T15:00:00Z john,,2001-01-01T00:00:00Z讀取示例 package m…