CleverBird
es un paquete Swift que proporciona una forma conveniente de interactuar con las API de chat de OpenAI y realizar diversas tareas, incluido el recuento y la codificación de tokens. El paquete está diseñado para ofrecer una experiencia de desarrollador (DX) superior al hacer que el hilo del chat sea el centro de las interacciones.
CleverBird
incluye soporte para incrustaciones de documentos y consultas de similitud. Esto la convierte en una herramienta versátil para una amplia gama de aplicaciones, especialmente casos en los que las indicaciones de chat necesitan una memoria contextual mejorada.
CleverBird
se centra exclusivamente en las interacciones basadas en chat y en hacerlas increíbles.
Tenga en cuenta que CleverBird
es un paquete no oficial , no proporcionado por OpenAI.
TokenEncoder
.EmbeddedDocumentStore
para gestionar y consultar similitudes de documentos. Importe el paquete CleverBird
:
import CleverBird
Inicialice una OpenAIAPIConnection
con su clave API. Tenga en cuenta que las claves API siempre deben cargarse desde variables de entorno y no codificarse en su fuente. Después de haber cargado su clave API, pásela al inicializador de la conexión:
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : < OPENAI_API_KEY > )
Cree una instancia ChatThread
y agregue mensajes del sistema, del usuario o del asistente al hilo de chat:
let chatThread = ChatThread ( )
. addSystemMessage ( content : " You are a helpful assistant. " )
. addUserMessage ( content : " Who won the world series in 2020? " )
Genere una finalización utilizando el hilo de chat y pasando la conexión API:
let completion = try await chatThread . complete ( using : openAIAPIConnection )
El método complete(using:)
también incluye varios parámetros opcionales:
let completion = chatThread . complete (
using : openAIAPIConnection ,
model : . gpt4o ,
temperature : 0.7 ,
maxTokens : 500
)
En el ejemplo anterior, creamos una finalización utilizando un modelo, una temperatura y una cantidad máxima de tokens específicos. Todos los parámetros excepto connection
son opcionales. La lista completa de parámetros es la siguiente:
connection
: El objeto de conexión API (obligatorio).model
: el modelo que se utilizará para la finalización.temperature
: Controla la aleatoriedad. Los valores más altos (hasta 1) generan resultados más aleatorios, mientras que los valores más bajos generan resultados más deterministas.topP
: El parámetro de muestreo del núcleo. Especifica la masa de probabilidad a cubrir con la predicción.stop
: una serie de cadenas. El modelo dejará de generar cuando encuentre cualquiera de estas cadenas.maxTokens
: la cantidad máxima de tokens a generar.presencePenalty
: una penalización por usar tokens que ya se han utilizado.frequencyPenalty
: una penalización por usar tokens frecuentes.functions
: las funciones de la herramienta (también conocidas como "acciones") se ponen a disposición del modelo.functionCallMode
: el modo de llamada a la función: .auto
, .none
o .specific
.Los mensajes de respuesta se agregan automáticamente al hilo, por lo que puede continuar interactuando con él simplemente agregando nuevos mensajes de usuario y solicitando completaciones adicionales.
Puede personalizar cada llamada para que complete(using:)
con diferentes valores para los mismos parámetros en llamadas posteriores en el mismo hilo, si desea:
let completion = try await chatThread . complete (
using : openAIAPIConnection ,
model : . gpt35Turbo ,
temperature : 0.5 ,
maxTokens : 300
)
Genere una finalización con streaming utilizando la versión de streaming de un hilo de chat:
let chatThread = ChatThread ( ) . withStreaming ( )
let completionStream = try await chatThread . complete ( using : openAIAPIConnection )
for try await messageChunk in completionStream {
print ( " Received message chunk: ( messageChunk ) " )
}
Al igual que con la finalización no transmitida, el mensaje se agregará automáticamente al hilo una vez que haya terminado de transmitirse, pero la transmisión le permitirá verlo a medida que llega.
Para incluir el uso (la cantidad de tokens utilizados en el mensaje y la finalización), agregue set streamOptions
en el método complete
. El uso está disponible como propiedad de StreamableChatThread
una vez completada la transmisión.
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 ) " )
}
Calcule el recuento de tokens para los mensajes en el hilo de chat:
let tokenCount = try chatThread . tokenCount ( )
Si necesita contar tokens o codificar/decodificar texto fuera de un hilo de chat, use la clase TokenEncoder
:
let tokenEncoder = try TokenEncoder ( model : . gpt3 )
let encodedTokens = try tokenEncoder . encode ( text : " Hello, world! " )
let decodedText = try tokenEncoder . decode ( tokens : encodedTokens )
CleverBird
admite llamadas a funciones. Esta poderosa característica permite a los desarrolladores definir sus propios comandos personalizados, lo que facilita el control del comportamiento de la IA. Las llamadas a funciones se pueden incluir en ChatThread
y usarse en el método complete()
.
Primero, defina los parámetros de su función y la función misma. La clase Function.Parameters
se utiliza para establecer las propiedades y los parámetros requeridos de su función.
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 )
Luego, inicializa tu ChatThread
con tu conexión API y una variedad de funciones:
let chatThread = ChatThread ( functions : [ getCurrentWeather ] )
. addSystemMessage ( content : " You are a helpful assistant. " )
Finalmente, llame a la función complete(using:)
para generar una respuesta. Si el asistente necesita realizar una función durante la conversación, utilizará las definiciones de funciones que usted proporcionó.
Tenga en cuenta que las funciones solo se admiten en finalizaciones que no sean de transmisión en vivo en este momento.
La clase EmbeddedDocumentStore
proporciona una manera conveniente de administrar y consultar una colección de documentos en función de su similitud. Esta clase te permite:
Primero, agregue una instancia de EmbeddedDocumentStore
a su código:
let openAIAPIConnection = OpenAIAPIConnection ( apiKey : " your_api_key_here " )
let embeddedDocumentStore = EmbeddedDocumentStore ( connection : connection )
Puede agregar un solo documento o un lote de documentos a la tienda.
let singleDocument = " My single document "
try await embeddedDocumentStore . embedAndStore ( singleDocument )
let documentCollection = [ " First document " , " Second document " , " Third document " ]
try await embeddedDocumentStore . embedAndStore ( documentCollection )
Puede consultar en el almacén documentos que sean similares a un documento de entrada.
let similarityResults = try await embeddedDocumentStore . queryDocumentSimilarity ( " Query text here " )
let mostSimilarResult = similarityResults . first ? . document ?? " No result returned "
El almacén se puede guardar y cargar desde un archivo (representado en formato JSON) para un almacenamiento persistente.
embeddedDocumentStore . save ( to : fileURL )
embeddedDocumentStore . load ( from : fileURL )
CleverBird
fue escrito por BT Franklin (@btfranklin) a partir de 2023 y tiene la licencia MIT. Consulte LICENCIA.md.