CleverBird
は、OpenAI のチャット API と対話し、トークンのカウントやエンコードなどのさまざまなタスクを実行する便利な方法を提供する Swift パッケージです。このパッケージは、チャット スレッドを対話の中心にすることで、優れた開発者エクスペリエンス (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 ) " )
}
非ストリーミング コンプリートの場合と同様に、メッセージはストリーミング終了後にスレッドに自動的に追加されますが、ストリームを使用すると、メッセージが送信される様子を確認できます。
使用状況 (プロンプトと完了で使用されるトークンの数) を含めるには、set streamOptions
complete
メソッドに追加します。この使用方法は、ストリームの完了後に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
関数呼び出しをサポートしています。この強力な機能により、開発者は独自のカスタム コマンドを定義できるため、AI の動作の制御が容易になります。関数呼び出しは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
2023 年以降、BT Franklin (@btfranklin) によって作成され、MIT ライセンスに基づいてライセンスされています。 LICENSE.mdを参照してください。