OpenAI'yi Kendi Verilerinizle Özelleştirme (2 / 2)

· Özellikler

Ö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.