Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Příjem dat je proces shromažďování, čtení a přípravy dat z různých zdrojů, jako jsou soubory, databáze, rozhraní API nebo cloudové služby, aby je bylo možné použít v podřízených aplikacích. V praxi se tento proces řídí pracovním postupem Extrakce-Transformace-Načtení (ETL):
- Extrahujte data z původního zdroje bez ohledu na to, jestli se jedná o PDF, wordový dokument, zvukový soubor nebo webové rozhraní API.
- Transformujte data čištěním, rozdělováním na bloky, obohacováním nebo převodem formátů.
- Načtěte data do cíle, jako je databáze, úložiště vektorů nebo model AI pro načtení a analýzu.
V případě scénářů umělé inteligence a strojového učení, zejména generování rozšířeného načítání (RAG), není příjem dat jen o převodu dat z jednoho formátu na jiný. Jde o to, aby byla data použitelná pro inteligentní aplikace. To znamená, že dokumenty představují způsobem, který zachovává jejich strukturu a význam, jejich rozdělení na spravovatelné bloky dat, rozšiřování pomocí metadat nebo vkládání a jejich ukládání, aby bylo možné je rychle a přesně načíst.
Proč je příjem dat pro aplikace umělé inteligence důležitý
Představte si, že vytváříte chatovacího robota využívajícího RAG, který zaměstnancům pomůže najít informace v rozsáhlé kolekci dokumentů vaší společnosti. Tyto dokumenty můžou zahrnovat soubory PDF, wordové soubory, powerpointové prezentace a webové stránky rozptýlené v různých systémech.
Váš chatbot potřebuje porozumět tisícům dokumentů a hledat je, aby poskytoval přesné kontextové odpovědi. Nezpracované dokumenty ale nejsou vhodné pro systémy AI. Musíte je transformovat do formátu, který zachovává význam a zároveň je umožňuje prohledávat a načíst.
To je místo, kde se příjem dat stává kritickým. Potřebujete extrahovat text z různých formátů souborů, rozdělit velké dokumenty do menších bloků, které se vejdou do limitů modelu AI, rozšířit obsah metadaty, generovat vkládání pro sémantické vyhledávání a ukládat všechno způsobem, který umožňuje rychlé načítání. Každý krok vyžaduje pečlivé zvážení toho, jak zachovat původní význam a kontext.
Stavební bloky příjmu dat
Knihovna Microsoft.Extensions.DataIngestion je postavená na několika klíčových součástech, které spolupracují na vytvoření kompletního kanálu zpracování dat. V této části se seznámíte s jednotlivými komponentami a s tím, jak se vejdou dohromady.
Dokumenty a čtenáři dokumentů
Základem knihovny je IngestionDocument typ, který poskytuje jednotný způsob reprezentace libovolného formátu souboru bez ztráty důležitých informací.
IngestionDocument je zaměřený na Markdown, protože velké jazykové modely fungují nejlépe s Markdown formátováním.
Abstrakce IngestionDocumentReader zpracovává načítání dokumentů z různých zdrojů, ať už místních souborů nebo datových proudů. K dispozici je několik čtenářů:
Další čtenáři (včetně LlamaParse a Azure Document Intelligence) budou přidáni v budoucnu.
Tento návrh znamená, že můžete pracovat s dokumenty z různých zdrojů pomocí stejného konzistentního rozhraní API, což usnadňuje údržbu a flexibilitu kódu.
Zpracovávání dokumentu
Procesory dokumentů používají transformace na úrovni dokumentu k vylepšení a přípravě obsahu. Knihovna poskytuje třídu ImageAlternativeTextEnricher jako integrovaný procesor, který používá velké jazykové modely k generování popisného alternativního textu pro obrázky v dokumentech.
Bloky dat a strategie vytváření bloků dat
Po načtení dokumentu je obvykle potřeba ho rozdělit na menší části označované jako bloky dat. Bloky dat představují pododdíly dokumentu, které lze efektivně zpracovávat, ukládat a načítat systémy AI. Proces chunkování je nezbytný pro scénáře generace rozšířené o načítání, ve kterých potřebujete rychle najít nejrelevantnější části informací.
Knihovna poskytuje několik strategií bloků dat, které odpovídají různým případům použití:
- Dělení na základě hlaviček pro rozdělení podle hlaviček.
- Bloky dat založené na oddílech , které se mají rozdělit na oddíly (například stránky).
- Sémanticky řízené segmentování pro zachování úplných myšlenek.
Tyto strategie vytváření bloků dat vycházejí z knihovny Microsoft.ML.Tokenizers pro inteligentní rozdělení textu na vhodné části, které dobře fungují s velkými jazykovými modely. Správná strategie vytváření bloků dat závisí na typech dokumentů a na tom, jak plánujete načíst informace.
Tokenizer tokenizer = TiktokenTokenizer.CreateForModel("gpt-5");
IngestionChunkerOptions options = new(tokenizer)
{
MaxTokensPerChunk = 2000,
OverlapTokens = 0
};
IngestionChunker<string> chunker = new HeaderChunker(options);
Zpracování a obohacení bloků dat
Po rozdělení dokumentů na bloky dat můžete procesory použít k vylepšení a obohacení obsahu. Blokové procesory fungují na jednotlivých částech a mohou provádět:
-
Rozšiřování obsahu včetně automatických souhrnů (
SummaryEnricher), analýzy mínění (SentimentEnricher) a extrakce klíčových slov (KeywordEnricher). -
Klasifikace pro automatickou kategorizaci obsahu na základě předdefinovaných kategorií (
ClassificationEnricher).
Tyto procesory používají Microsoft.Extensions.AI.Abstractions k využití velkých jazykových modelů pro inteligentní transformaci obsahu, což činí vaše úseky užitečnějšími pro navazující AI aplikace.
Zapisovač dokumentů a úložiště
IngestionChunkWriter<T> ukládá zpracované bloky dat do úložiště dat pro pozdější načtení. Knihovna, která používá Microsoft.Extensions.AI a Microsoft.Extensions.VectorData, poskytuje třídu VectorStoreWriter<T>. Tento zapisovač podporuje ukládání bloků dat do libovolného úložiště vektorů , které Microsoft.Extensions.VectorDatapodporuje .
Vektorová úložiště zahrnují oblíbené možnosti, jako jsou Qdrant, SQL Server, CosmosDB, MongoDB a ElasticSearch. Další informace o zprostředkovatelích naleznete viz Zprostředkovatelé předdefinovaného úložiště vektorů. (Navzdory zahrnutí "SemanticKernel" do názvů balíčků nemají tito zprostředkovatelé nic společného s sémantické jádro a jsou použitelné kdekoli v .NET, včetně Agent Framework.)
Autor může také automaticky generovat vnoření pro vaše bloky dat pomocí Microsoft.Extensions.AI, připravit je na sémantické vyhledávání a na scénáře vyhledávání a načítání.
OpenAIClient openAIClient = new(
new ApiKeyCredential(Environment.GetEnvironmentVariable("GITHUB_TOKEN")!),
new OpenAIClientOptions { Endpoint = new Uri("https://models.github.ai/inference") });
IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator =
openAIClient.GetEmbeddingClient("text-embedding-3-small").AsIEmbeddingGenerator();
using SqliteVectorStore vectorStore = new(
"Data Source=vectors.db;Pooling=false",
new()
{
EmbeddingGenerator = embeddingGenerator
});
// The writer requires the embedding dimension count to be specified.
// For OpenAI's `text-embedding-3-small`, the dimension count is 1536.
using VectorStoreWriter<string> writer = new(vectorStore, dimensionCount: 1536);
Kanál zpracování dokumentů
Rozhraní IngestionPipeline<T> API umožňuje zřetězovat různé komponenty pro příjem dat do kompletního pracovního postupu. Můžete zkombinovat:
- Čtenáři načítají dokumenty z různých zdrojů.
- Procesory pro transformaci a obohacení obsahu dokumentu
- Chunkers rozdělují dokumenty na spravovatelné části.
- Zapisovače pro uložení konečných výsledků ve zvoleném úložišti dat.
Tento přístup zdrojové linie snižuje nadbytečný kód a usnadňuje sestavování, testování a údržbu složitých pracovních postupů pro datové načítání.
using IngestionPipeline<string> pipeline = new(reader, chunker, writer, loggerFactory: loggerFactory)
{
DocumentProcessors = { imageAlternativeTextEnricher },
ChunkProcessors = { summaryEnricher }
};
await foreach (var result in pipeline.ProcessAsync(new DirectoryInfo("."), searchPattern: "*.md"))
{
Console.WriteLine($"Completed processing '{result.DocumentId}'. Succeeded: '{result.Succeeded}'.");
}
Jediné selhání příjmu dokumentu by nemělo mít za následek selhání celého zpracovatelského řetězce. To je důvod, proč IngestionPipeline<T>.ProcessAsync implementuje částečnou úspěšnost vrácením IAsyncEnumerable<IngestionResult>. Volající zodpovídá za zpracování všech selhání (například opakováním neúspěšných dokumentů nebo zastavením při první chybě).