Uncategorized

Hazina Document Store: De Kennisbank voor Uw Applicatie

Achter elke RAG-engine bevindt zich een documentopslag. Hazina’s Document Store is ontworpen als zowel een eenvoudige key-value store voor documenten als een geavanceerde vectordatabase voor gelijkeniszoekopdrachten. Laten we verkennen hoe het werkt.

Architectuur

De Document Store bestaat uit drie lagen:

  1. Documentopslag – Ruwe documenten met metadata
  2. Chunkopslag – Verwerkte tekstfragmenten
  3. Vectorindex – Embeddings voor gelijkeniszoekopdrachten

Basisdocumentbewerkingen

var store = serviceProvider.GetRequiredService<IDocumentStore>();

// Sla een document op
var docId = await store.StoreAsync(new Document {
    Title = "Product Manual",
    Content = "...",
    ContentType = "text/plain",
    Tags = new[] { "documentation", "product" },
    Metadata = new Dictionary<string, object> {
        ["version"] = "2.0",
        ["department"] = "Engineering"
    }
});

// Ophalen
var doc = await store.GetAsync(docId);

// Zoeken op tags
var docs = await store.SearchByTagsAsync(new[] { "documentation" });

// Volledige-tekstzoekopdracht
var results = await store.SearchAsync("product features");

Vector Gelijkeniszoekopdracht

// Vind documenten die lijken op een query
var similar = await store.FindSimilarAsync(
    query: "How do I configure the API?",
    topK: 5,
    threshold: 0.7f  // Minimale gelijkenisscore
);

foreach (var result in similar)
{
    Console.WriteLine($"{result.Score:P0} - {result.Document.Title}");
    Console.WriteLine($"  Chunk: {result.ChunkText[..100]}...");
}

SQLite Configuratie

builder.Services.AddHazina(config => {
    config.Storage.UseSqlite(new SqliteSettings {
        DatabasePath = "./data/hazina.db",
        EnableWAL = true,         // Betere gelijktijdige toegang
        VacuumOnStartup = false   // Overslaan voor snellere opstart
    });
});

PostgreSQL voor Productie

builder.Services.AddHazina(config => {
    config.Storage.UsePostgreSQL(new PostgresSettings {
        ConnectionString = connectionString,
        EnablePgVector = true,    // Vereist voor vectorzoekopdrachten
        VectorDimensions = 1536  // OpenAI embedding grootte
    });
});

Documentlevenscyclus

Documenten doorlopen een duidelijke levenscyclus:

  1. Opgeslagen – Ruwe inhoud opgeslagen
  2. Opgedeeld – Opgesplitst in doorzoekbare stukken
  3. Geëmbed – Vector embeddings gegenereerd
  4. Geïndexeerd – Beschikbaar voor gelijkeniszoekopdrachten

Alle stappen gebeuren automatisch wanneer je IndexDocumentAsync aanroept.

In de volgende post behandelen we een van Hazina’s krachtigste functies: het Dynamische Plugin Systeem.

Veelgestelde Vragen

Hoe behandelt Hazina’s Document Store documentopslag en -ophaling?

Hazina’s Document Store gebruikt een drielaagse architectuur bestaande uit Documentopslag voor ruwe documenten, Chunkopslag voor verwerkte tekstfragmenten, en een Vectorindex voor gelijkeniszoekopdrachten. Je kunt documenten met metadata opslaan, ze ophalen via hun ID, en zoekopdrachten uitvoeren met tags of volledige-tekstqueries.

Wat is vector gelijkeniszoekopdracht in Hazina’s Document Store?

Vector gelijkeniszoekopdracht stelt gebruikers in staat om documenten te vinden die lijken op een gegeven query op basis van hun vector embeddings. Door een query en een drempel voor de minimale gelijkenisscore op te geven, kun je de top K documenten ophalen die aan je criteria voldoen.

Welke configuraties zijn beschikbaar voor het gebruik van Hazina’s Document Store?

Hazina’s Document Store kan worden geconfigureerd om SQLite te gebruiken voor ontwikkeling en PostgreSQL voor productie. De PostgreSQL-setup vereist het inschakelen van PgVector voor vectorzoekopdrachten en het specificeren van de verbindingsreeks en vectordimensies.

Wat is de documentlevenscyclus in Hazina’s Document Store?

Documenten in Hazina’s Document Store ondergaan een levenscyclus die vier hoofdfasen omvat: Opgeslagen (ruwe inhoud opgeslagen), Opgedeeld (opgesplitst in doorzoekbare stukken), Geëmbed (vector embeddings gegenereerd), en Geïndexeerd (beschikbaar voor gelijkeniszoekopdrachten). Deze levenscyclus is geautomatiseerd wanneer je de methode IndexDocumentAsync aanroept.

Terug naar overzicht
ENNL