Önceki bir yazıda, OpenAI sohbet metotlarına bağlamsal bilgi eklemek için OpenAI Embeddings'in nasıl kullanılacağını gördük.
Şimdi, kendi verilerimizi kullanarak yapay zeka uygulamaları oluşturmak için sgcWebSockets paketindeki TsgcOpenAIEmbeddings bileşenini nasıl kullanacağımızı göreceğiz.
Delphi Voice ChatBot ile ilgili önceki bir yazıda, sesle yönetilen bir ChatBot oluşturmak için TsgcAIOpenAIChatBot bileşenini kullanmıştık; şimdi ChatBot'u yalnızca 2021'e kadar eğitilen openAI verilerini kullanmakla kalmayıp genişleteceğiz ve yardım dosyasından ve paketin arayüzlerinden elde edilen verilerle bir Soru-Cevap (Questions & Answers) oluşturarak kendi özel verilerimizi ekleyeceğiz.
Kendi Verilerinizi Vektörlere Dönüştürme
İlk adım, sgcWebSockets pdf kılavuzunu alıp metne dönüştürmektir. Bu dosyayı, paketin nasıl yapılandırılacağı, bileşenlerin nasıl kullanılacağı... hakkında yararlı bilgiler içeren embeddings oluşturmak için kullanacağız ve bu bilgi OpenAI'ye soru sorulurken kullanılacaktır.
Pdf kılavuzu metin formatında elimizde olduğunda, dosyanın her bölümü için OpenAI'den Vektörleri elde etmek üzere TsgcAIOpenAIEmbeddings bileşenini kullanabiliriz ve bu durumda bunu bir metin dosyasında saklayacağız (üretim için Pinecone gibi bir Vektör Veritabanı kullanabilirsiniz).
procedure ConvertFileToVector;
var
oDialog: TOpenDialog;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
begin
oDialog := TOpenDialog.Create(nil);
Try
oDialog.Filter := 'TXT Files|*.txt';
if oDialog.Execute then
begin
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
oEmbeddings.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings.CreateEmbeddingsFromFile(oDialog.FileName);
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
end;
Finally
FreeAndNil(oDialog);
End;
end;
ChatBot ve Embeddings
Tüm verilerimizi vektörlere dönüştürdükten sonra, kendi modelimizi oluşturmaya başlayabiliriz; arkasındaki fikir çok basittir: bota her soru sorduğumuzda, önce soruyu bir vektöre dönüştürürüz, ardından veritabanımızda hangi vektörün soruya daha benzer olduğunu ararız ve son olarak soruya en benzer veriyi kullanıp bir bağlam olarak ekleriz.
procedure AskToChatGPT(const aQuestion: string);
var
oChatBot: TsgcAIOpenAIChatBot;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
vContext: string;
begin
oChatBot := TsgcAIOpenAIChatBot.Create(nil);
Try
oChatBot.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oChatBot.Embeddings := oEmbeddings;
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
vContext := oChatBot.GetEmbedding(aQuestion);
oChatBot.ChatAsUser('Answer the question based on the context below.\n\nContext:\n' +
vContext + '\nQuestion:' + aQuestion + '\nAnswer:');
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
Finally
FreeAndNil(oDialog);
End;
end;
Delphi Windows Demosu
Aşağıda, özelleştirilmiş veriler kullanarak bir Soru-Cevap uygulamasının nasıl oluşturulacağını gösteren, sgcWebSockets AI Paketini kullanan bir Delphi örneği bulabilirsiniz. Demo 2 proje içerir:
1. sgcCreateEmbeddings: bu proje bir metin dosyasını yükler, parçalara böler ve her parçayı bir vektöre dönüştürüp bir veritabanı dosyasında saklar. Demo, kullanım kolaylığı için vektör veritabanını metin dosyası formatında zaten içerir.
2. sgcQuestionsAnswers: önceki veritabanı kayıtlarını kullanarak, kullanıcı chatbot'a her soru sorduğunda, uygulama önce veritabanında soruya en benzer bağlamın hangisi olduğunu arar ve ChatBot'un daha doğru yanıtlar sağlamasına yardımcı olmak için bunu bağlamsal bilgi olarak ekler.
