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 ) " )
}
스트리밍되지 않은 완료와 마찬가지로 메시지는 스트리밍이 완료된 후 자동으로 스레드에 추가되지만 스트림을 통해 메시지가 전달되는 과정을 볼 수 있습니다.
사용량(프롬프트 및 완료에 사용된 토큰 수)을 포함하려면 complete
메소드에 set 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
함수 호출을 지원합니다. 이 강력한 기능을 통해 개발자는 자신만의 사용자 정의 명령을 정의하여 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를 참조하세요.