CleverBird
est un package Swift qui offre un moyen pratique d'interagir avec les API de chat d'OpenAI et d'effectuer diverses tâches, notamment le comptage et l'encodage des jetons. Le package est conçu pour offrir une expérience de développement (DX) supérieure en plaçant le fil de discussion au centre des interactions.
CleverBird
inclut la prise en charge des intégrations de documents et des requêtes de similarité. Cela en fait un outil polyvalent pour un large éventail d'applications, en particulier dans les cas où les invites de discussion nécessitent une mémoire contextuelle améliorée.
CleverBird
se concentre étroitement sur les interactions basées sur le chat et les rend géniales.
Veuillez noter que CleverBird
est un package non officiel , non fourni par OpenAI lui-même.
TokenEncoder
.EmbeddedDocumentStore
pour gérer et interroger les similarités de documents. Importez le package CleverBird
:
import CleverBird
Initialisez une OpenAIAPIConnection
avec votre clé API. Veuillez noter que les clés API doivent toujours être chargées à partir de variables d'environnement et non codées en dur dans votre source. Après avoir chargé votre clé API, transmettez-la à l'initialiseur de la connexion :
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : < OPENAI_API_KEY > )
Créez une instance ChatThread
et ajoutez des messages système, utilisateur ou assistant au fil de discussion :
let chatThread = ChatThread ( )
. addSystemMessage ( content : " You are a helpful assistant. " )
. addUserMessage ( content : " Who won the world series in 2020? " )
Générez une complétion à l'aide du fil de discussion et en passant la connexion API :
let completion = try await chatThread . complete ( using : openAIAPIConnection )
La méthode complete(using:)
comprend également divers paramètres facultatifs :
let completion = chatThread . complete (
using : openAIAPIConnection ,
model : . gpt4o ,
temperature : 0.7 ,
maxTokens : 500
)
Dans l'exemple ci-dessus, nous avons créé une complétion en utilisant un modèle, une température et un nombre maximum de jetons spécifiques. Tous les paramètres sauf connection
sont facultatifs. La liste complète des paramètres est la suivante :
connection
: L'objet de connexion API (obligatoire).model
: Le modèle à utiliser pour la complétion.temperature
: contrôle le caractère aléatoire. Des valeurs plus élevées (jusqu'à 1) génèrent des sorties plus aléatoires, tandis que des valeurs plus faibles génèrent des sorties plus déterministes.topP
: Le paramètre d'échantillonnage du noyau. Il spécifie la masse de probabilité à couvrir avec la prédiction.stop
: Un tableau de chaînes. Le modèle cessera de générer lorsqu'il rencontrera l'une de ces chaînes.maxTokens
: Le nombre maximum de jetons à générer.presencePenalty
: Une pénalité pour l'utilisation de jetons déjà utilisés.frequencyPenalty
: Une pénalité pour l’utilisation fréquente de jetons.functions
: Les fonctions de l'outil (alias "actions") à mettre à disposition du modèle.functionCallMode
: Le mode d'appel de la fonction : .auto
, .none
ou .specific
.Les messages de réponse sont automatiquement ajoutés au fil de discussion, vous pouvez donc continuer à interagir avec lui en ajoutant simplement de nouveaux messages utilisateur et en demandant des complétions supplémentaires.
Vous pouvez personnaliser chaque appel pour complete(using:)
avec des valeurs différentes pour les mêmes paramètres lors des appels ultérieurs dans le même thread, si vous le souhaitez :
let completion = try await chatThread . complete (
using : openAIAPIConnection ,
model : . gpt35Turbo ,
temperature : 0.5 ,
maxTokens : 300
)
Générez une complétion avec streaming à l'aide de la version streaming d'un fil de discussion :
let chatThread = ChatThread ( ) . withStreaming ( )
let completionStream = try await chatThread . complete ( using : openAIAPIConnection )
for try await messageChunk in completionStream {
print ( " Received message chunk: ( messageChunk ) " )
}
Tout comme pour l'achèvement sans streaming, le message sera automatiquement ajouté au fil une fois la diffusion terminée, mais le flux vous permet de le voir au fur et à mesure de son passage.
Pour inclure l'utilisation (le nombre de jetons utilisés dans l'invite et l'achèvement), ajoutez set streamOptions
dans la méthode complete
. L'utilisation est disponible en tant que propriété de StreamableChatThread
une fois le flux terminé.
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 ) " )
}
Calculez le nombre de jetons pour les messages dans le fil de discussion :
let tokenCount = try chatThread . tokenCount ( )
Si vous devez compter des jetons ou encoder/décoder du texte en dehors d'un fil de discussion, utilisez la classe TokenEncoder
:
let tokenEncoder = try TokenEncoder ( model : . gpt3 )
let encodedTokens = try tokenEncoder . encode ( text : " Hello, world! " )
let decodedText = try tokenEncoder . decode ( tokens : encodedTokens )
CleverBird
prend en charge les appels de fonction. Cette fonctionnalité puissante permet aux développeurs de définir leurs propres commandes personnalisées, facilitant ainsi le contrôle du comportement de l'IA. Les appels de fonction peuvent être inclus dans ChatThread
et utilisés dans la méthode complete()
.
Tout d’abord, définissez les paramètres de votre fonction et la fonction elle-même. La classe Function.Parameters
est utilisée pour définir les propriétés et les paramètres requis de votre fonction.
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 )
Ensuite, initialisez votre ChatThread
avec votre connexion API et un ensemble de fonctions :
let chatThread = ChatThread ( functions : [ getCurrentWeather ] )
. addSystemMessage ( content : " You are a helpful assistant. " )
Enfin, appelez la fonction complete(using:)
pour générer une réponse. Si l'assistant doit exécuter une fonction pendant la conversation, il utilisera les définitions de fonction que vous avez fournies.
Veuillez noter que les fonctions ne sont actuellement prises en charge que dans les complétions sans streaming.
La classe EmbeddedDocumentStore
offre un moyen pratique de gérer et d'interroger une collection de documents en fonction de leur similarité. Ce cours vous permet de :
Tout d’abord, ajoutez une instance d’ EmbeddedDocumentStore
à votre code :
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : " your_api_key_here " )
let embeddedDocumentStore = EmbeddedDocumentStore ( connection : connection )
Vous pouvez ajouter un seul document ou un lot de documents au magasin.
let singleDocument = " My single document "
try await embeddedDocumentStore . embedAndStore ( singleDocument )
let documentCollection = [ " First document " , " Second document " , " Third document " ]
try await embeddedDocumentStore . embedAndStore ( documentCollection )
Vous pouvez interroger le magasin pour rechercher des documents similaires à un document d'entrée.
let similarityResults = try await embeddedDocumentStore . queryDocumentSimilarity ( " Query text here " )
let mostSimilarResult = similarityResults . first ? . document ?? " No result returned "
Le magasin peut être enregistré et chargé à partir d'un fichier (représenté au format JSON) pour un stockage persistant.
embeddedDocumentStore . save ( to : fileURL )
embeddedDocumentStore . load ( from : fileURL )
CleverBird
a été écrit par BT Franklin (@btfranklin) à partir de 2023 et est sous licence MIT. Voir LICENCE.md.