CleverBird
— это пакет Swift, который обеспечивает удобный способ взаимодействия с API-интерфейсами чата OpenAI и выполнения различных задач, включая подсчет и кодирование токенов. Пакет предназначен для обеспечения превосходного взаимодействия с разработчиками (DX), делая поток чата центром взаимодействия.
CleverBird
включает поддержку встраивания документов и запросов на сходство. Это делает его универсальным инструментом для широкого спектра приложений, особенно в тех случаях, когда подсказки чата требуют расширенной контекстной памяти.
CleverBird
ориентирован исключительно на взаимодействие в чате и делает его потрясающим.
Обратите внимание, что CleverBird
— это неофициальный пакет, не предоставляемый самой OpenAI.
TokenEncoder
.EmbeddedDocumentStore
для управления и запроса сходства документов. Импортируйте пакет CleverBird
:
import CleverBird
Инициализируйте OpenAIAPIConnection
с помощью ключа API. Обратите внимание, что ключи 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 ) " )
}
Как и в случае с завершением без потоковой передачи, сообщение будет автоматически добавлено в поток после завершения потоковой передачи, но поток позволяет вам видеть его по мере его прохождения.
Чтобы включить использование (количество токенов, используемых в приглашении и завершении), добавьте 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
поддерживает вызовы функций. Эта мощная функция позволяет разработчикам определять свои собственные команды, упрощая контроль над поведением ИИ. Вызовы функций можно включить в 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 )
Затем инициализируйте ChatThread
с помощью вашего API-соединения и массива функций:
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
был написан Б.Т. Франклином (@btfranklin) с 2023 года и распространяется по лицензии MIT. См. LICENSE.md.