CleverBird
是一個 Swift 包,提供了一種與 OpenAI 聊天 API 互動並執行各種任務(包括令牌計數和編碼)的便捷方式。該套件旨在透過使聊天線程成為互動的中心來提供卓越的開發人員體驗 (DX)。
CleverBird
支援文件嵌入和相似性查詢。這使其成為適用於廣泛應用的多功能工具,特別是在聊天提示需要增強上下文記憶的情況下。
CleverBird
專注於基於聊天的交互,並使其變得非常棒。
請注意, CleverBird
是一個非官方軟體包,不是 OpenAI 本身提供的。
TokenEncoder
類別促進令牌計數和編碼。EmbeddedDocumentStore
類別來管理和查詢文件相似性。 導入CleverBird
包:
import CleverBird
使用您的 API 金鑰初始化OpenAIAPIConnection
。請注意,API 密鑰應始終從環境變數加載,而不是硬編碼到來源中。載入 API 金鑰後,將其傳遞給連線的初始化程序:
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : < OPENAI_API_KEY > )
建立一個ChatThread
實例並將系統、使用者或助理訊息新增至聊天執行緒:
let chatThread = ChatThread ( )
. addSystemMessage ( content : " You are a helpful assistant. " )
. addUserMessage ( content : " Who won the world series in 2020? " )
使用聊天線程並傳遞 API 連線生成完成:
let completion = try await chatThread . complete ( using : openAIAPIConnection )
complete(using:)
方法還包含各種可選參數:
let completion = chatThread . complete (
using : openAIAPIConnection ,
model : . gpt4o ,
temperature : 0.7 ,
maxTokens : 500
)
在上面的範例中,我們使用特定模型、溫度和最大令牌數建立了一個完成。 connection
之外的所有參數都是可選的。完整參數列表如下:
connection
:API 連線物件(必要)。model
:用於完成的模型。temperature
:控制隨機性。較高的值(最多 1)產生更多的隨機輸出,而較低的值產生更多的確定性輸出。topP
:核採樣參數。它指定預測覆蓋的機率品質。stop
:字串數組。當模型遇到任何這些字串時,它將停止生成。maxTokens
:要產生的最大令牌數。presencePenalty
:對使用已經使用過的代幣的懲罰。frequencyPenalty
:使用頻繁令牌的懲罰。functions
:可供模型使用的工具函數(也稱為「操作」)。functionCallMode
:函數呼叫模式: .auto
、 .none
或.specific
。回應訊息會自動附加到線程中,因此您只需添加新的用戶訊息並請求其他完成即可繼續與其互動。
如果需要,您可以在同一線程中的後續呼叫中使用相同參數的不同值來自訂每個呼叫來complete(using:)
:
let completion = try await chatThread . complete (
using : openAIAPIConnection ,
model : . gpt35Turbo ,
temperature : 0.5 ,
maxTokens : 300
)
使用聊天線程的串流版本透過串流傳輸產生完成:
let chatThread = ChatThread ( ) . withStreaming ( )
let completionStream = try await chatThread . complete ( using : openAIAPIConnection )
for try await messageChunk in completionStream {
print ( " Received message chunk: ( messageChunk ) " )
}
就像非串流完成一樣,訊息在完成串流後將自動附加到線程上,但串流允許您在訊息通過時看到它。
若要包含使用情況(提示和完成中使用的標記數量),請在complete
方法中新增streamOptions
。流完成後,該用法可作為StreamableChatThread
的屬性使用。
let chatThread = ChatThread ( ) . withStreaming ( )
let completionStream = try await chatThread . complete ( using : openAIAPIConnection , includeUsage : true )
for try await messageChunk in completionStream {
print ( " Received message chunk: ( messageChunk ) " )
}
if let usage = completionStream . usage {
print ( " Usage: ( usage ) " )
}
計算聊天執行緒中訊息的令牌計數:
let tokenCount = try chatThread . tokenCount ( )
如果您需要在聊天線程之外計算令牌或對文字進行編碼/解碼,請使用TokenEncoder
類別:
let tokenEncoder = try TokenEncoder ( model : . gpt3 )
let encodedTokens = try tokenEncoder . encode ( text : " Hello, world! " )
let decodedText = try tokenEncoder . decode ( tokens : encodedTokens )
CleverBird
支援函數呼叫。這項強大的功能可讓開發人員定義自己的自訂命令,從而更輕鬆地控制人工智慧的行為。函數呼叫可以包含在ChatThread
中並在complete()
方法中使用。
首先,定義函數參數和函數本身。 Function.Parameters
類別用於設定函數的屬性和所需參數。
let getCurrentWeatherParameters = Function . Parameters (
properties : [
" location " : Function . Parameters . Property ( type : . string ,
description : " The city and state, e.g. San Francisco, CA " ) ,
" format " : Function . Parameters . Property ( type : . string ,
description : " The temperature unit to use. Infer this from the user's location. " ,
enumCases : [ " celsius " , " fahrenheit " ] )
] ,
required : [ " location " , " format " ] )
let getCurrentWeather = Function ( name : " get_current_weather " ,
description : " Get the current weather " ,
parameters : getCurrentWeatherParameters )
然後,使用 API 連接和函數數組初始化ChatThread
:
let chatThread = ChatThread ( functions : [ getCurrentWeather ] )
. addSystemMessage ( content : " You are a helpful assistant. " )
最後,呼叫complete(using:)
函數來產生回應。如果助手需要在對話期間執行某項功能,它將使用您提供的功能定義。
請注意,目前僅在非流式完成中支援函數。
EmbeddedDocumentStore
類別提供了一種根據文件的相似性來管理和查詢文件集合的便捷方法。該課程允許您:
首先,將EmbeddedDocumentStore
的實例加入您的程式碼中:
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : " your_api_key_here " )
let embeddedDocumentStore = EmbeddedDocumentStore ( connection : connection )
您可以將單一文件或一批文件新增至商店。
let singleDocument = " My single document "
try await embeddedDocumentStore . embedAndStore ( singleDocument )
let documentCollection = [ " First document " , " Second document " , " Third document " ]
try await embeddedDocumentStore . embedAndStore ( documentCollection )
您可以在儲存中查詢與輸入文件相似的文件。
let similarityResults = try await embeddedDocumentStore . queryDocumentSimilarity ( " Query text here " )
let mostSimilarResult = similarityResults . first ? . document ?? " No result returned "
可以將儲存儲存到檔案(以 JSON 格式表示)並從檔案中載入以進行持久儲存。
embeddedDocumentStore . save ( to : fileURL )
embeddedDocumentStore . load ( from : fileURL )
CleverBird
由 BT Franklin (@btfranklin) 自 2023 年起編寫,並根據 MIT 許可證獲得許可。請參閱 LICENSE.md。