Yapay zeka uygulamaları için özel verileri işleme

Bu hızlı başlangıçta yapay zeka uygulamaları için özel verileri işlemek ve hazırlamak için veri alımı işlem hattı oluşturmayı öğreneceksiniz. Uygulama, belgeleri okumak, içeriği yapay zeka ile zenginleştirmek, metni anlamsal olarak öbeklemek ve eklemeleri anlamsal arama için bir vektör veritabanında depolamak için kitaplığını kullanır Microsoft.Extensions.DataIngestion .

Veri alımı, büyük miktarda yapılandırılmamış veriyi işlemeniz ve AI uygulamaları için aranabilir kılmak amacıyla geri getirimle zenginleştirilmiş üretim (RAG) senaryoları için gereklidir.

Önkoşullar

Uygulamayı oluşturma

.NET konsol uygulaması oluşturmak için aşağıdaki adımları tamamlayın.

  1. Bilgisayarınızdaki boş bir dizinde yeni bir konsol uygulaması oluşturmak için dotnet new komutunu kullanın:

    dotnet new console -o ProcessDataAI
    
  2. Dizini uygulama klasörüne değiştirin:

    cd ProcessDataAI
    
  3. Gerekli paketleri yükleyin:

    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    dotnet add package Microsoft.Extensions.DataIngestion --prerelease
    dotnet add package Microsoft.Extensions.DataIngestion.Markdig --prerelease
    dotnet add package Microsoft.Extensions.Logging.Console
    dotnet add package Microsoft.ML.Tokenizers.Data.O200kBase
    dotnet add package Microsoft.SemanticKernel.Connectors.SqliteVec --prerelease
    

Yapay zeka hizmetini oluşturma

  1. Azure OpenAI hizmeti ve modeli sağlamak için Azure OpenAI Hizmeti kaynak oluşturma ve dağıtma makalesindeki adımları tamamlayın. Bu hızlı başlangıç için iki model sağlamanız gerekir: gpt-5 ve text-embedding-3-small.

  2. Terminal veya komut isteminden proje dizininizin köküne gidin.

  3. Örnek uygulama için Azure OpenAI uç noktanızı ve API anahtarınızı yapılandırmak için aşağıdaki komutları çalıştırın:

    dotnet user-secrets init
    dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint>
    dotnet user-secrets set AZURE_OPENAI_API_KEY <your-Azure-OpenAI-API-key>
    

Uygulamayı düzenleyicide açma

Uygulamayı Visual Studio Code'da (veya istediğiniz düzenleyicide) açın.

code .

Örnek verileri oluşturma

  1. sample.md dosyasını proje dizininizde adlı data bir klasöre kopyalayın.
  2. Projeyi bu dosyayı çıkış dizinine kopyalanacak şekilde yapılandırın. Visual Studio kullanıyorsanız Çözüm Gezgini'nde dosyaya sağ tıklayın, Özellikler'i seçin ve Çıkış Dizininin Altına Kopyala seçeneğini Daha Yeniyse Kopyala olarak ayarlayın.

Uygulama kodunu ekleme

Veri alımı işlem hattı, belgeleri işlemek için birlikte çalışan birkaç bileşenden oluşur:

  • Belge okuyucu: Dizinden Markdown dosyalarını okur.
  • Belge işlemcisi: Yapay zeka tarafından oluşturulan alternatif metinlerle görüntüleri zenginleştirir.
  • Öbekleyici: Eklemeleri kullanarak belgeleri anlamsal öbeklere böler.
  • Öbek işlemcisi: Her öbek için yapay zeka özetleri oluşturur.
  • Vektör deposu yazıcısı: Öbekleri bir SQLite veritabanında eklemelerle depolar.
  1. Dosyada Program.cs var olan tüm kodları silin ve belge okuyucuyu yapılandırmak için aşağıdaki kodu ekleyin:

    // Configure document reader.
    IngestionDocumentReader reader = new MarkdownReader();
    

    sınıfı Markdown MarkdownReader belgelerini okur ve bunları büyük dil modelleriyle iyi çalışan birleşik bir biçime dönüştürür.

  2. İş hattı için loglamayı yapılandırmak üzere kod ekleyin:

    using ILoggerFactory loggerFactory =
        LoggerFactory.Create(builder => builder.AddSimpleConsole());
    
  3. Yapay zeka istemcisini zenginleştirme ve sohbet için yapılandırmak için kod ekleyin:

    // Configure IChatClient to use Azure OpenAI.
    IConfigurationRoot config = new ConfigurationBuilder()
        .AddUserSecrets<Program>()
        .Build();
    
    string endpoint = config["AZURE_OPENAI_ENDPOINT"];
    string apiKey = config["AZURE_OPENAI_API_KEY"];
    string chatModel = "gpt-5";
    string embeddingModel = "text-embedding-3-small";
    
    AzureOpenAIClient azureClient = new(
        new Uri(endpoint),
        new AzureKeyCredential(apiKey));
    
    IChatClient chatClient =
        azureClient.GetChatClient(chatModel).AsIChatClient();
    
  4. Görüntüleri yapay zeka tarafından oluşturulan açıklamalarla zenginleştiren belge işlemcisini yapılandırmak için kod ekleyin:

    // Configure document processor.
    EnricherOptions enricherOptions = new(chatClient)
    {
        // Enricher failures should not fail the whole ingestion pipeline,
        // as they are best-effort enhancements.
        // This logger factory can create loggers to log such failures.
        LoggerFactory = loggerFactory
    };
    
    IngestionDocumentProcessor imageAlternativeTextEnricher =
        new ImageAlternativeTextEnricher(enricherOptions);
    

    , ImageAlternativeTextEnricher belgeler içindeki görüntüler için açıklayıcı alternatif metin oluşturmak üzere büyük dil modellerini kullanır. Bu metin onları daha erişilebilir hale getirir ve anlamsal anlamlarını geliştirir.

  5. Vektör gösterimleri oluşturmak için yerleştirme oluşturucuyu yapılandırmak üzere kod ekleyin.

    // Configure embedding generator.
    IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator =
        azureClient.GetEmbeddingClient(embeddingModel).AsIEmbeddingGenerator();
    

    Eklemeler , vektör benzerliği aramasını sağlayan metnin anlamsal anlamının sayısal gösterimleridir.

  6. Belgeleri anlamsal öbeklere bölen öbekleyiciyi yapılandırmak için kod ekleyin:

    // Configure chunker to split text into semantic chunks.
    IngestionChunkerOptions chunkerOptions = new(TiktokenTokenizer.CreateForModel(chatModel))
    {
        MaxTokensPerChunk = 2000,
        OverlapTokens = 0
    };
    
    IngestionChunker<string> chunker =
        new SemanticSimilarityChunker(embeddingGenerator, chunkerOptions);
    

    Belgeleri akıllıca bölen SemanticSimilarityChunker, cümleler arasındaki anlamsal benzerliği analiz ederek ilgili içeriğin birlikte kalmasını sağlar. Bu işlem, anlamı ve bağlamı basit karakter veya belirteç tabanlı öbeklemeden daha iyi koruyan öbekler oluşturur.

  7. Özetler oluşturan öbek işlemcisini yapılandırmak için kod ekleyin:

    // Configure chunk processor to generate summaries for each chunk.
    IngestionChunkProcessor<string> summaryEnricher = new SummaryEnricher(enricherOptions);
    

    , SummaryEnricher her öbek için otomatik olarak kısa özetler oluşturur ve bu da içeriğe üst düzey bir genel bakış sağlayarak alma doğruluğunu geliştirebilir.

  8. Eklemeleri depolamak için SQLite vektör depounu yapılandırmak için kod ekleyin:

    // Configure SQLite Vector Store.
    using SqliteVectorStore vectorStore = new(
        "Data Source=vectors.db;Pooling=false",
        new()
        {
            EmbeddingGenerator = embeddingGenerator
        });
    
    // The writer requires the embedding dimension count to be specified.
    using VectorStoreWriter<string> writer = new(
        vectorStore,
        dimensionCount: 1536,
        new VectorStoreWriterOptions { CollectionName = "data" });
    

    Vektör deposu, öbekleri ve eklemelerini depolayarak hızlı anlamsal arama özellikleri sağlar.

  9. Tüm bileşenleri eksiksiz bir işlem hattına oluşturmak için kod ekleyin:

    // Compose data ingestion pipeline
    using IngestionPipeline<string> pipeline =
        new(reader, chunker, writer, loggerFactory: loggerFactory)
    {
        DocumentProcessors = { imageAlternativeTextEnricher },
        ChunkProcessors = { summaryEnricher }
    };
    

    tüm IngestionPipeline<T> bileşenleri, belgeleri baştan sona işleyen uyumlu bir iş akışında birleştirir.

  10. Dizinden belgeleri işlemek için kod ekleyin:

    await foreach (IngestionResult result in pipeline.ProcessAsync(
        new DirectoryInfo("./data"),
        searchPattern: "*.md"))
    {
        Console.WriteLine($"Completed processing '{result.DocumentId}'. " +
            $"Succeeded: '{result.Succeeded}'.");
    }
    

    İşlem hattı dizindeki ./data tüm Markdown dosyalarını işler ve her belgenin durumunu bildirir.

  11. İşlenen belgelerin etkileşimli olarak aranmasını sağlamak için kod ekleyin:

    // Search the vector store collection and display results
    VectorStoreCollection<object, Dictionary<string, object?>> collection =
        writer.VectorStoreCollection;
    
    while (true)
    {
        Console.Write("Enter your question (or 'exit' to quit): ");
        string? searchValue = Console.ReadLine();
        if (string.IsNullOrEmpty(searchValue) || searchValue == "exit")
        {
            break;
        }
    
        Console.WriteLine("Searching...\n");
        await foreach (VectorSearchResult<Dictionary<string, object?>> result in
            collection.SearchAsync(searchValue, top: 3))
        {
            Console.WriteLine($"Score: {result.Score}\n\tContent: {result.Record["content"]}");
        }
    }
    

    Arama işlevi, kullanıcı sorgularını eklemelere dönüştürür ve vektör deposundaki en benzer öbekleri bulur.

Uygulamayı çalıştırma

  1. uygulamayı çalıştırmak için dotnet run komutunu kullanın:

    dotnet run
    

    Uygulama dizindeki ./data tüm Markdown dosyalarını işler ve her belge için işleme durumunu görüntüler. İşleme tamamlandıktan sonra, işlenen içeriği aramak için doğal dil soruları girebilirsiniz.

  2. Verilerde arama yapmak için istemde bir soru girin:

    Enter your question (or 'exit' to quit): What is data ingestion?
    

    Uygulama, belgelerinizdeki en ilgili öbekleri ve bunların benzerlik puanlarını döndürür.

  3. Uygulamadan çıkmak için yazın exit .

Kaynakları temizle

Artık bunlara ihtiyacınız yoksa Azure OpenAI kaynağını ve model dağıtımını silin.

  1. Azure portalüzerinde Azure OpenAI kaynağına gidin.
  2. Azure OpenAI kaynağını seçin ve ardından Silöğesini seçin.

Sonraki Adımlar