Bouwen van een "Advocaat GPT" voor uw blog - Deel 1: Inleiding & Architectuur (Nederlands (Dutch))

Bouwen van een "Advocaat GPT" voor uw blog - Deel 1: Inleiding & Architectuur

Wednesday, 12 November 2025

//

17 minute read

WAARSCHUWING: Deze zijn ontwerp-Posts die 'onthuld'.

Het is waarschijnlijk veel van wat hieronder zal niet werken; IK genereren deze als how-to voor MIJ en dan doen alle stappen en krijg de sample app werken...Je bent stiekem en ze gezien! ze zullen waarschijnlijk klaar zijn medio december.

## Inleiding

Doe je gordel om, want dit wordt een lange serie.

Als je deze blog hebt gevolgd, weet je dat ik een beetje geobsedeerd ben door het vinden van interessante manieren om LLM's en AI te gebruiken in praktische toepassingen.

Ik heb een nieuw project dat mijn liefde voor bloggen, C# en AI combineert: het bouwen van een schrijfassistent die me helpt nieuwe blogberichten op te stellen met behulp van mijn bestaande content als kennisbasis.

OPMERKING: Dit maakt deel uit van mijn experimenten met AI (ondersteund opstellen) + mijn eigen bewerking.

  • Dezelfde stem, hetzelfde pragmatisme, gewoon snellere vingers.
  • Denk aan hoe moderne juridische praktijken gebruik maken van LLM's getraind in jurisprudentie om slips, moties en contracten op te stellen.
  • Ze beginnen niet vanaf nul - het systeem verwijst naar relevante precedenten, stelt taal voor gebaseerd op succesvolle documenten uit het verleden, en handhaaft consistentie met gevestigde patronen.
  • Dat is precies wat we hier bouwen, maar voor blog inhoud.
  • Het doel is om een AI-aangedreven schrijfassistent te creëren die:

Helpt ontwerp nieuwe blog berichten in mijn gevestigde stijlSuggereert relevante inhoud van eerdere artikelen tot verwijzingVindt soortgelijke berichten om consistentie te behouden

Handelt als "GitHub Copilot voor uw blog"

  • Deze serie zal betrekking hebben op het bouwen van een compleetRetrieval Augmented Generation (RAG)
  • **systeem in C# dat draait op Windows.**We gebruiken de nieuwste benaderingen en kaders, en ik zal elke nieuwe technologie uitleggen als we het tegenkomen.
  • **My Hardware Setup (en Minimum Specificaties)**Mijn Development Machine:

GPU**: NVIDIA RTX A4000 (16GB VRAM)**CPU

: AMD Ryzen 9 9950X

  • RAM: 96GB DDR5
    • Dit is mijn specifieke setup, maar jij
    • heb deze hardware niet nodig
  • **om mee te volgen.**Hier zijn de minimale specificaties voor verschillende componenten:
    • GPU Acceleratie (Aanbevolen, niet vereist)
  • Minimum: NVIDIA GPU met 8GB VRAM (bv. RTX 3060, GTX 1070 Ti)

Kan 7B parameter modellen uitvoeren met quantization

  • Fatsoenlijke inbedding generatie snelheidComfortabel
  • **: 12GB+ VRAM (bv. RTX 3060 12GB, RTX 4060 Ti)**Grotere modellen of hogere kwaliteit quantizations uitvoeren
  • Mijn setup
    • : 16GB (A4000) - kan 13B-modellen comfortabel draaien
    • CPU-alleen alternatief
    • Minimum

: Moderne quad-core CPU

  • Aanbevolen: 8+ kernen (voor redelijke inbeddingsgeneratie)
    • Alles werkt alleen op CPU, gewoon langzamer:
  • Inbedding generatie: ~5-10x langzamerLLM-invloed: ~10-50x langzamer
    • Nog steeds volledig bruikbaar voor een schrijfassistent!
  • RAM-vereistenMinimum

: 16GB systeem RAM

  • CPU-only gevolgtrekking voor 7B modellenComfortabel
  • : 32GBBeter voor grotere modellen op CPU

Mijn setup

: 96GB - Overkill, 32GB is genoeg

  • OpslagSSD
  • : Aanbevolen voor modelbelastingRuimte
  • : ~20GB voor modellen en vectordatabaseHoe zit het met Intel/AMD NPU's?

**Moderne CPU's bevatten nu speciale AI-versnellers:*Intel Core Ultra(Meteor Lake+) - Intel AI Boost (NPU)*AMD Ryzen AI

(7040/8040 series) - XDNA NPU

  • ✅ Great for: On-device inference, battery efficiency (laptops)
  • ⚠️ Limited for our use: Immature .NET/ONNX Runtime support
  • ❌ Not ready for: This project's primary path

AMD Ryzen AI Max

  1. (Strix Point) - Tot 50 TOPSBelangrijk: NPU's zijn alleen voor gevolggeving!
  2. Je "bouwt" of traint geen modellen op NPU's - ze zijn ontworpen omuitvoeren
  3. **Efficiënt voorgetrainde modellen.**Modellen worden getraind op cloud GPU's (of werkstations), vervolgens gedownload en geïmplementeerd naar NPU's voor gevolgtrekkingen.
  4. **Huidige status voor draaiende modellen op NPU's (als van schrijven):**Waarom niet NPU's voor deze serie?
  5. Software-ecosysteem: CUDA heeft 15+ jaar looptijd, NPU ondersteuning in .NET is opkomende

Modelcompatibiliteit

  • : De meeste GGUF modellen doel CUDA/CPU, NPU-geoptimaliseerde modellen zijn zeldzaamDocumentatie: Beperkte middelen voor NPU ontwikkeling in C#
  • Prestaties
  • : Momenteel langzamer dan discrete GPU's voor onze werklast
  • DirectML-ondersteuning

: Nog experimenteel voor LLM-inferentie

# Use DirectML execution provider (supports NPU)
dotnet add package Microsoft.ML.OnnxRuntime.DirectML

# In code:
var sessionOptions = new SessionOptions();
sessionOptions.AppendExecutionProvider("DML"); // DirectML
var session = new InferenceSession("model.onnx", sessionOptions);

**Kun je NPU's gebruiken als gevolg?**Ja, maar:VereistDirectMLuitvoerder in ONNX RuntimeModellen moeten in ONNX-formaat zijn (geen GGUF)

C# ondersteuning is experimenteelPerformance is momenteel onderbenut vs. CUDA

Hoe NPU-inferentie te proberen (geavanceerde gebruikers):

Toekomstige overweging

  1. : EenmaalONNX-runtime
  2. enDirectML
  3. **volwassen hun NPU ondersteuning (waarschijnlijk 2024-2025), deze zal levensvatbare alternatieven voor gevolgtrekkingen worden!**Onderaan
  4. **: Ik zal het GPU-versnelde pad laten zien, maar zal overal CPU-only alternatieven opmerken.**U kunt alleen CPU starten en later upgraden!
  5. Wat we aan het bouwen zijnHet uiteindelijke systeem zal verschillende componenten hebben:
  6. Afbakening Ingestie Pijplijn- Processeert alle blog berichten, brokken ze intelligent, en genereert inbeddingen

Vectordatabase

- slaat inbeddingen op en maakt semantisch zoeken naar soortgelijke inhoud mogelijk

Toepassing van Windows-client

    • Een bureaublad schrijven assistent UI met editor en suggestie paneel
  • LLM-integratie

    • Lokale GPU-versnelde gevolgtrekking voor het genereren van inhoud
  • Citaat & koppelingsgeneratie

  • Auto-sugges interne links en verwijzingen naar gerelateerde posten

  • Style Consistency Engine

    • Leert patronen van bestaande berichten om spraak en structuur te behouden
  • Zie het als "GitHub Copilot ontmoet Grammarly" maar getraind specifiek op de inhoud en stijl van uw blog.

  • Waarom 'advocaat GPT'?

  • Moderne advocatenkantoren gebruiken LLM's die getraind zijn in uitgebreide jurisprudentie-bibliotheken om juridische documenten te helpen opstellen.

Bij het schrijven van een motie, het systeem:

Verwijzingen naar relevante precedenten en eerdere succesvolle argumenten

Stelt taalpatronen voor die eerder gewerkt hebben

Handhaaft consistentie met wettelijke schrijfstandaarden

Automatisch uitkiezen van bronnen

Dat is ons model.

Wanneer ik begin met het schrijven van "Add Entity Framework for..." zou het systeem:Vind mijn vorige EF-gerelateerde berichten, Stel structurele patronen voor die ik eerder heb gebruiktAanbieden van relevante code knipsels uit eerdere artikelen

Behoud mijn schrijfstijl en technische diepteIn tegenstelling tot algemene AI schrijfassistenten, is ons systeem gebaseerd op de eigenlijke inhoud uit het verleden, dus het zal niet suggereren dingen in strijd met wat ik al heb geschreven.Overzicht serieDit is wat we de komende weken gaan doen:).

Deel 1 (Dit bericht): Inleiding en architectuur

We zullen vaststellen wat we bouwen en waarom, plus de architectonische beslissingen.

Deel 2: GPU-instellingen & CUDA in C#

Windows instellen voor GPU-versnelde AI workloads, installerenCUDA, cuDNN, en het testen dat C# daadwerkelijk kan zien en gebruiken van uw GPU.Deel 3: Inbeddingen en vectordatabases begrijpenDiepe duik in wat inbeddingen eigenlijk zijn, hoe ze semantisch zoeken mogelijk maken, en het kiezen van de juiste vector database (spoiler: we zullen waarschijnlijk gebruiken

Qdrant

ofpgvector, Deel 4: Bouwen van de Ingestie PijpleidingHet verwerken van markdown-bestanden, intelligente brokstrategieën (je kunt niet zomaar splitsen op alinea's!), en het genereren van inbeddingen voor al onze inhoud.

Deel 5: De Windows Client

Het juiste kader kiezen (

WPF

Avalonia

, of

MAUI

?), het bouwen van de UI, en waardoor het eigenlijk aangenaam om te gebruiken.

Deel 6: Lokale LLM-integratie

  1. Lokaal draaien van modellen met behulp vanONNX-runtime
  2. lama.cppbindingen, of andere benaderingen.
  3. **Gebruik makend van die A4000!**Deel 7: Content Generation & Prompt Engineering
  4. **Alles bij elkaar brengen - semantisch zoeken naar relevante inhoud, context window management, prompt engineering voor het schrijven van hulp, en het genereren van coherente suggesties.**Deel 8: Geavanceerde kenmerken en productie-implementatie
  5. **Auto-linken naar gerelateerde berichten, stijl consistentie controleren, code knipsel suggesties, en het maken van het systeem eigenlijk nuttig voor het dagelijks schrijven.**Waarom RAG?

Voordat we in architectuur duiken, laten we het hebben over waarom RAG (Retrieval Augmented Generation) hier de juiste aanpak is.

Het probleem met Fine-Tuning

Je zou kunnen denken: "Waarom niet gewoon fine-tune een LLM op alle blog posts?" Er zijn verschillende problemen met dat:

  1. Kosten & complexiteit
    • Fine-tuning is duur (zowel in berekening als inspanning)
  2. Stabiliteit
    • Elke nieuwe blogpost betekent omscholing
  3. Zwarte doos
  • Moeilijk te begrijpen wat het model "geleerd"

  • ✅ Always up-to-date (just re-index new posts as you write them)

  • ✅ Grounded in your actual writing (maintains consistency)

  • ✅ Traceable (know which past posts influenced suggestions)

  • ✅ Efficient (no expensive retraining for every new post)

  • ✅ Flexible (can swap out LLMs or adjust search strategies)

  • ✅ Privacy-preserving (everything runs locally)

Hallucinaties

  • Geen garantie dat het model niets verzint.
graph TB
    A[Markdown Files] -->|Ingest| B[Chunking Service]
    B -->|Text Chunks| C[Embedding Model]
    C -->|Vectors| D[Vector Database]

    E[User Writing] -->|Current Draft| F[Windows Client]
    F -->|Embed Context| C
    C -->|Query Vector| D
    D -->|Similar Content| G[Context Builder]

    G -->|Relevant Past Articles| H[Prompt Engineer]
    H -->|Prompt + Context| I[Local LLM]
    I -->|Generated Suggestions| J[Link Generator]
    J -->|Suggestions + Citations| F

    F -->|Display| K[Editor with Suggestions]

    class C,I embedding
    class D,K output

    classDef embedding stroke:#333,stroke-width:4px
    classDef output stroke:#333,stroke-width:4px

Geen verwijzingen

  • Kan niet gemakkelijk antwoorden terug te traceren naar bronnen

  • Hoe RAG dit oplost

  • RAG combineert het beste van beide werelden: de kracht van LLM's met de precisie van zoeken om context-bewuste contentgeneratie te creëren.

  • De stroom is:

  • Gebruiker begint te schrijven (bijv., "Een REST API bouwen met ASP.NET Core...)

  • Systeem vindt semantisch vergelijkbare artikelen uit het verleden

Systeem voert relevante brokken als context naar de LLMLLM genereert suggesties/voortzettingen op basis van eerdere inhoud

Systeem biedt suggesties met verwijzingen naar bronposten

Dit betekent:

Systeemarchitectuur

Laat me de belangrijkste onderdelen die we gaan bouwen op een rijtje zetten:

  • Afbakening Ingestie Pijplijn

**Deze component:**Leest markdown-bestanden uit de blogmap

: Chunking strategie telt enorm.

Te klein en je verliest de context.

**Te groot en je verspilt het contextvenster van de LLM.**We hebben stukken nodig die semantisch betekenisvol zijn - een complete gedachte of sectie, geen willekeurige paragraaf breekt.

Technologiekeuze

: We zullen waarschijnlijk gebruiken:

zinstransformers

modellen (kan draaien via ONNX Runtime in C#)

  • ✅ Mature, stable, lots of resources
  • ✅ Native Windows performance
  • ❌ Windows-only
  • ❌ Looks dated unless you invest in UI libraries

OpenAI's inbeddingsmodellen (via API)

  • ✅ Cross-platform (XAML-based)
  • ✅ Modern, actively developed
  • ✅ Similar to WPF
  • ❌ Smaller ecosystem

BGE-modellen

  • ✅ Cross-platform
  • ✅ Microsoft-backed
  • ❌ Still maturing
  • ❌ More mobile-focused

(state-of-the-art open source)**3.Vectordatabase**De vectordatabase slaat inbeddingen op en maakt een snelle zoektocht naar gelijkenis mogelijk.**Wanneer je schrijft over "Docker compone" vindt het de K meest semantisch vergelijkbare inhoud uit het verleden - niet alleen trefwoord komt overeen, maar conceptueel gerelateerd materiaal.**Technologiekeuze

: We zullen evalueren:

Qdrant

    • Modern, geschreven in Rust, uitstekende C# client, Docker-vriendelijk
  • pgvector
    • Extensie voor PostgreSQL (we gebruiken Postgres al!)
  • Weaviate

- Een andere solide optie met goede .NET ondersteuning:

Chroma

    • Populair in Python land, minder zo in C#
  • Ik neig naar Qdrant om zijn eenvoud en prestaties, of pgvector om alles in Postgres te houden.
  • Windows-client

We hebben een leuke UI nodig voor het schrijven met hulp van AI.Denk split-pane editor met suggesties.

WPF met

  • ModernWPF UI
  • of
  • Avalonia

voor dat cross-platform potentieel.**5.**Lokale LLM-integratie

Hier schijnt de A4000 GPU.

We willen de LLM lokaal draaien voor:

  • Privacy (geen gegevens verzonden naar API's)
  • Snelheid (lokale gevolgtrekking is snel)
  • Kosten (geen API-kosten)
  • Controle (wij kiezen het model)

Technologie-opties

  • ONNX-runtime
  • Modellen omzetten naar ONNX-formaat
  • Uitstekende GPU versnelling
  • C# native support

Nadeel: Niet alle modellen goed converteren

lama.cpp

  • bindingen
  • C++-bibliotheek met C#-bindingen (
  • LLamaSharp
  • Ondersteunt CUDA
  • Brede modelondersteuning (Llama, Mistral, enz.)

Zeer actieve ontwikkeling

TorchSharp

PyTorch bindingen voor .NET

  1. De meeste flexibiliteitSteeper learning curve
  2. Ik neig naarLLamaSharp
  3. **voor zijn rijpheid en gebruiksgemak met populaire modellen.**6.
  4. Context Vensterbeheer & Prompt EngineeringLLM's hebben beperkte contextvensters (bijv. 4K, 8K, 32K tokens).
  5. **We moeten:**De meest relevante inhoud uit het verleden ophalen (top K van vector zoeken)

Pas ze aan in het contextvenster met het huidige ontwerp

Structuur van de prompt voor het schrijven van hulp

Laat ruimte voor de gegenereerde suggesties

  • **Dit is lastiger dan het klinkt.**We verkennen strategieën zoals:
  • Dynamische K-selectie gebaseerd op wat je momenteel aan het schrijven bentRe-ranking opgehaald brokken door relevantie

Context op intelligente wijze comprimeren

Gebruikte code-knipsels

- De meeste RAG voorbeelden zijn in Python.

- Geoptimaliseerd voor het schrijven van blogs, niet voor het genereren van generieke inhoud

(laatst op het moment van schrijven)

LLamaSharp

  • LLM gevolgtrekking

Microsoft.ML

  • - Potentieel voor sommige takenSentenceTransformers via ONNX
  • - InbeddingenVectordatabase
  • Qdrantof
  • pgvector- Te bepalen

UI-kader

  • WPFmet
  • ModernWPFof
  • Avalonia- Moderne desktop UI

Hulpmiddelen

  • Markdig- Dit al gebruiken voor markdown parsing
  • Docker- Voor het uitvoeren van Qdrant of andere diensten
  • Kern van het entiteitskader- Als we pgvector gebruiken
  • GPU StackCUDA

12.x

  • **(laatst op het moment van schrijven)**cuDNN
  • - Deep learning primitievenPrestatieoverwegingen
  • **Verschillende hardware-instellingen zullen verschillende mogelijkheden hebben:**Met 8GB VRAM (minimum)
  • Modelgrootte: 7B parametermodellen met Q4 quantization

Batchverwerking

: Proces inbeddingen in kleinere batches

  1. Geheugenbeheer
  2. : Zorgvuldige VRAM monitoring vereist
  3. Werkt goed voor
  4. : Schrijfassistent, inbedding generatie
  5. Met 12GB+ VRAM (comfortabel)
  6. Modelgrootte

: 7B met hogere kwaliteit kwantisering (Q5/Q6)

Batchverwerking

: Grotere batches voor snellere doorvoer**Kan ook draaien**: Sommige 13B modellen met agressieve quantisering

  • Met 16GB+ VRAM (Mijn setup)
  • Modelgrootte
  • : 7B-13B parameter modellen comfortabel
  • Batchverwerking
  • : Volledige batches, minimale beperkingen

Snelle gevolgtrekking

: Sub-second response times

Kopruimte

  • : Kan experimenteren met verschillende modellenAlleen CPU (terugval)
  • Alles werkt., alleen langzamer
  • Inbeddingen: 5-10x langzamer dan GPU
  • LLM-inferentie: 10-50x langzamer dan GPU
  • Nog bruikbaar: Voor een schrijfassistent met geduld!

Ontwikkelingsaanpak

We bouwen dit stapsgewijs op:

Beginnen met de eenvoudigste componenten (afbakenen, afknippen)

Inbeddingsgeneratie toevoegen (kan beginnen met API-gebaseerde voordat u lokaal gaat)

Vector zoeken aan het werk krijgen

Basis-UI bouwen

Integreer LLM

Een eenvoudig C#-programma schrijven om GPU-toegang te verifiëren

Een basisinferentietest uitvoeren met ONNX Runtime

Technische documentatie- Het handhaven van consistente stijl over grote doc sets!

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.