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
รองรับการเรียกใช้ฟังก์ชัน ฟีเจอร์อันทรงพลังนี้ช่วยให้นักพัฒนาสามารถกำหนดคำสั่งที่กำหนดเองได้ ทำให้ควบคุมพฤติกรรมของ 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 )
จากนั้น เริ่มต้น 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
เขียนโดย BT Franklin (@btfranklin) ตั้งแต่ปี 2023 เป็นต้นไป และได้รับอนุญาตภายใต้ใบอนุญาต MIT ดู LICENSE.md