Ga naar hoofdinhoud

Google File Search Tool-tutorial: bouw RAG-applicaties met de Gemini API

Leer hoe je een RAG-app bouwt met Google File Search en de Gemini API. Stapsgewijze handleiding met code, chunking, metadatafiltering en citaties
· 14 min lezen

Verken met AI

In deze tutorial laat ik je zien hoe je een assistent voor medische documentatie bouwt met Google File Search. Je ziet hoe je alles instelt, queries uitvoert en geavanceerde functies gebruikt zoals aangepaste chunking en metadatafilters. Aan het einde snap je wanneer managed RAG logisch is en wanneer je beter je eigen stack bouwt.

Wat is de Google File Search Tool?

RAG-applicaties bouwen betekent meestal werken met vectordatabases, embeddingpipelines en een hoop infrastructuur. Google's File Search-tool, uitgebracht in november 2025, haalt deze complexiteit weg met een volledig beheerd RAG-systeem dat direct in de Gemini API is ingebouwd.

De tool regelt de complexe onderdelen voor je: documenten chunken, embeddings genereren en semantisch zoeken beheren zonder externe tools zoals Pinecone of ChromaDB. De workflow is eenvoudig—upload bestanden, maak een store en begin met queryen. Je krijgt ook ingebouwde citaties waarmee je kunt verifiëren waar antwoorden vandaan komen.

RAG begrijpen en waarom Google het eenvoudiger maakt

Gemini File Search profileert zich als een beheerd RAG-systeem. Als je RAG begrijpt, kun je de tool beter gebruiken en bepalen of het bij je usecase past.

Kort gezegd koppelt retrieval-augmented generation (RAG) taalmodellen aan externe kennis. Voor het model een antwoord genereert, haalt het relevante informatie uit jouw documenten op, zodat antwoorden op jouw echte data zijn gebaseerd in plaats van alleen op trainingsdata.

De uitdaging van DIY-RAG

Hoewel RAG in concept eenvoudig klinkt, een RAG-pipeline bouwen betekent dat je meerdere componenten moet beheren:

  • Vectordatabases: Diensten opzetten en onderhouden zoals Pinecone, ChromaDB of Weaviate om embeddings op te slaan
  • Embeddingpipelines: Documenten omzetten naar numerieke vectoren en updates afhandelen wanneer content verandert
  • Chunkingstrategieën: Documenten opdelen in stukken die context en retrievalprecisie in balans brengen
  • Infrastructuur: Performance monitoren, parameters tunen en schalen naarmate je data groeit

Elke component vereist expertise en doorlopend onderhoud. Of je nu een productiesysteem bouwt dat betrouwbaar moet zijn of een prototype dat snelheid vereist, de infrastructuuroverhead blijft dezelfde bottleneck.

Waarom managed RAG ertoe doet

Beheerde services zoals Google File Search halen deze bottleneck weg. In plaats van retrievalsystemen te tunen, schrijf je queries. In plaats van embeddingpipelines te debuggen, valideer je resultaten. De infrastructuur draait op de achtergrond terwijl jij je richt op de applicatielogica.

Gemini File Search neemt de technische complexiteit uit handen terwijl jij bepaalt wat ertoe doet: welke documenten je indexeert, hoe je ze bevraagt en hoe je de resultaten gebruikt. Deze balans werkt goed wanneer je productiekwaliteit nodig hebt zonder operationele overhead. Voor meer achtergrond over RAG-basics raad ik DataCamps tutorial over agentic RAG aan.

Een eenvoudig workflowdiagram dat de twee fasen van Google File Search toont: (1) Indexeren: upload documenten (PDF, DOCX of TXT) naar een File Search Store, waar ze automatisch worden opgesplitst en omgezet in embeddings; (2) Queryen: de gebruikersquery wordt gekoppeld aan relevante documentchunks, die het Gemini-model gebruikt om een antwoord met citaties te schrijven. Markeer duidelijk "Eenmalig indexeren" voor de eerste fase (blauw), en "Herhaald queryen" voor de tweede (groen). Gebruik pictogrammen voor documenten, de store, zoeken en het Gemini-model, en pijlen om de stroom van upload tot antwoordgeneratie te tonen.

De beste manier om Google File Search te begrijpen is door het te gebruiken. In de volgende sectie bouw je een complete assistent voor medische documentatie die de volledige workflow laat zien: van documentupload tot onderbouwde antwoorden met citaties.

Een assistent voor medische documentatie bouwen met Google File Search

Disclaimer: Deze tutorial demonstreert File Search-mogelijkheden met FDA-bijsluiters, uitsluitend voor educatieve doeleinden. De assistent die je bouwt is niet bedoeld voor klinisch gebruik, patiëntenzorgbeslissingen of medische diagnoses. Raadpleeg altijd gekwalificeerde zorgprofessionals voor medisch advies. AI-systemen kunnen onjuiste informatie genereren, zelfs met onderbouwing uit brondocumenten.

In deze sectie bouw je stap voor stap een complete assistent voor medische documentatie met File Search. Je werkt met FDA-bijsluiters voor drie veelgebruikte medicijnen en creëert een systeem dat vragen beantwoordt over geneesmiddelinteracties, bijwerkingen en contra-indicaties. De assistent geeft verifieerbare antwoorden door specifieke passages uit de brondocumenten te citeren.

File Search werkt in twee fasen: je indexeert je documenten één keer en voert daarna herhaaldelijk queries uit. Je richt je eerst op de indexeringsinfrastructuur en daarna volledig op het stellen van vragen en het interpreteren van onderbouwde antwoorden.

Stap 1: Installeer de API en configureer authenticatie

Je hebt Python 3.9 of hoger nodig. Installeer de Google Generative AI SDK en dependencies:

pip install google-genai python-dotenv

Haal je API-sleutel op bij Google AI Studio. Sla deze op in een .env-bestand in je projectmap:

GOOGLE_API_KEY=your_api_key_here

Zet je imports klaar en initialiseer de client:

from google import genai
from google.genai import types
import time
from dotenv import load_dotenv

load_dotenv()
client = genai.Client()

De genai.Client() regelt authenticatie automatisch via je omgevingsvariabele. Je gebruikt dit clientobject voor alle File Search-bewerkingen.

Stap 2: Maak een File Search-store

Maak een store om je geïndexeerde documenten in op te slaan:

file_search_store = client.file_search_stores.create(
    config={"display_name": "fda-drug-labels"}
)
print(f"Created store: {file_search_store.name}")

Een File Search-store fungeert als container voor je geïndexeerde documenten. In tegenstelling tot tijdelijke bestandsuploads die na 48 uur verlopen, blijven stores onbeperkt bestaan. Dit betekent dat je documenten één keer indexeert en ze duizenden keren kunt bevragen zonder opnieuw te uploaden of te verwerken.

De file_search_store.name bevat een unieke identifier waarnaar je verwijst bij het queryen. Deze ziet eruit als fileSearchStores/fdadruglabels-abc123. Sla deze waarde op als je de store vanuit een andere sessie wilt bevragen.

Stap 3: Upload en indexeer PDF-documenten

Voor deze tutorial werk je met drie door de FDA goedgekeurde bijsluiters. Download deze PDF’s van de FDA-website:

Sla ze op in je projectmap en upload ze vervolgens naar je File Search-store:

pdf_files = ["metformin.pdf", "atorvastatin.pdf", "lisinopril.pdf"]

for pdf_file in pdf_files:
    operation = client.file_search_stores.upload_to_file_search_store(
        file=pdf_file,
        file_search_store_name=file_search_store.name,
        config={"display_name": pdf_file.replace(".pdf", "")},
    )

    # Wait for indexing to complete
    while not operation.done:
        time.sleep(3)
        operation = client.operations.get(operation)

    print(f"{pdf_file} indexed")

Tijdens het uploaden chunkt File Search elke PDF en zet de segmenten om in embeddings met het gemini-embedding-001-model. Deze embeddings zijn numerieke representaties die semantische betekenis vastleggen, zodat het systeem relevante passages kan vinden, zelfs wanneer je vraag niet exact overeenkomt met de bewoording in het document.

Het pollingpatroon (while not operation.done) gaat om met de asynchrone aard van indexeren. Grote documenten kosten meer tijd om te verwerken, dus de API retourneert meteen en je controleert periodiek de voltooiingsstatus. Overweeg voor productie time-outs toe te voegen om oneindige lussen te voorkomen.

Elke chunk bewaart metadata die terugverwijst naar het brondocument en de positie daarin. Deze metadata wordt belangrijk wanneer je later citaties ophaalt.

Stap 4: Query voor informatie uit één document

Voer nu queries uit op je geïndexeerde documenten:

query1 = "What are the contraindications for metformin?"

response1 = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=query1,
    config=types.GenerateContentConfig(
        tools=[
            types.Tool(
                file_search=types.FileSearch(
                    file_search_store_names=[file_search_store.name]
                )
            )
        ]
    ),
)

print(response1.text)

Dit print het gegenereerde antwoord:

Metformin is contraindicated in several conditions:

* Severe renal impairment (eGFR below 30 mL/min/1.73 m2)
* Acute or chronic metabolic acidosis
* Hypersensitivity to metformin

File Search haalt de meest semantisch vergelijkbare chunks uit je documenten op en geeft die als context aan gemini-2.5-flash, dat het antwoord genereert. De configuratie van de array tools vertelt het model om File Search te gebruiken tijdens het genereren. Je kunt File Search in dezelfde request combineren met andere tools zoals code-executie of Google Search.

Stap 5: Toegang tot citaties en groundingmetadata

Haal op welke documenten het antwoord hebben onderbouwd:

print("Sources used:")
for i, chunk in enumerate(response1.candidates[0].grounding_metadata.grounding_chunks, 1):
    source_name = chunk.retrieved_context.title
    print(f"  [{i}] {source_name}")

Output:

Sources used:
  [1] metformin
  [2] atorvastatin

Elke chunk in de groundingmetadata bevat de titel van het brondocument en de specifieke tekstpassage die het antwoord heeft onderbouwd. Dit creëert een verificatiepad van het gegenereerde antwoord terug naar je originele documenten—noodzakelijk voor medische, juridische of financiële toepassingen waar nauwkeurigheid telt.

De array grounding_chunks bevat alle opgehaalde passages, geordend op relevantie. Hoewel de vraag specifiek over metformine ging, haalde File Search ook content op uit het atorvastatinedocument, waarschijnlijk omdat het verwante informatie over contra-indicaties bevat. Dit laat de semantische retrievalaanpak zien: het systeem vindt conceptueel gerelateerde content, niet alleen keywordmatches.

Stap 6: Query over meerdere documenten

Test een vraag over geneesmiddelinteracties die meerdere documenten vereist:

query2 = "Can a patient take both atorvastatin and metformin together? Are there any drug interactions?"

response2 = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=query2,
    config=types.GenerateContentConfig(
        tools=[
            types.Tool(
                file_search=types.FileSearch(
                    file_search_store_names=[file_search_store.name]
                )
            )
        ]
    ),
)

print(response2.text)

Hetzelfde API-patroon haalt nu uit meerdere documenten en synthetiseert de informatie. Toegang tot de opgehaalde tekstsnippets:

print("Sources used:")

for i, chunk in enumerate(response2.candidates[0].grounding_metadata.grounding_chunks, 1):
    source_name = chunk.retrieved_context.title
    source_text = chunk.retrieved_context.text[:100] + "..."
    print(f"  [{i}] {source_name}")
    print(f"      {source_text}")

De output toont fragmenten uit beide bijsluiters:

Sources used:
  [1] atorvastatin
      Concomitant use with diabetes medications is generally safe but monitor glucose levels...
  [2] metformin
      Carbonic anhydrase inhibitors may increase the risk of lactic acidosis...

File Search haalt relevante secties uit beide documenten op en het model voegt ze samen tot een coherent antwoord. Het attribuut retrieved_context.text geeft je de exacte gebruikte passage, zodat je kunt verifiëren dat het model geen informatie heeft gehallucineerd.

Stap 7: Kruisdocumentvergelijkingen uitvoeren

Stel een analytische vraag die een vergelijking van alle drie documenten vereist:

query3 = "Which medications have muscle-related side effects?"

response3 = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=query3,
    config=types.GenerateContentConfig(
        tools=[
            types.Tool(
                file_search=types.FileSearch(
                    file_search_store_names=[file_search_store.name]
                )
            )
        ]
    ),
)

print(response3.text)

# Check which documents were consulted
metadata = response3.candidates[0].grounding_metadata
for i, chunk in enumerate(metadata.grounding_chunks, 1):
    print(f"  [{i}] {chunk.retrieved_context.title}")

De output identificeert atorvastatine als middel met spiergerelateerde bijwerkingen (myalgie, myopathie, rabdomyolyse) en bevestigt dat de andere medicijnen dergelijke effecten niet vermelden. De groundingmetadata laat zien dat File Search alle drie de documenten heeft geraadpleegd om de vergelijkingsvraag te beantwoorden.

Je hebt nu een werkende assistent voor medische documentatie gebouwd. De kernworkflow blijft hetzelfde: configureer de File Search-tool in je generate_content()-aanroep, haal de responstext op en gebruik groundingmetadata voor verificatie. De store blijft bewaard op de servers van Google, zodat je hem in toekomstige sessies kunt bevragen zonder opnieuw te indexeren.

Vervolgens verken je geavanceerde functies zoals aangepaste chunkingconfiguraties en metadatafilters waarmee je het retrievalgedrag verfijnder kunt sturen.

Geavanceerde functies en maatwerk in de Google File Search Tool

De basisworkflow van File Search dekt de meeste usecases, maar productiesystemen hebben vaak fijnmazigere controle over retrievalgedrag nodig. In deze sectie zie je hoe je chunkingstrategieën aanpast, documenten filtert met metadata, performance optimaliseert en meerdere stores beheert voor verschillende usecases.

Aangepaste chunkingconfiguratie

File Search splitst documenten tijdens het indexeren automatisch in chunks. Standaard wordt een voor algemene documenten geoptimaliseerde strategie gebruikt, maar je kunt dit aanpassen wanneer specifieke documenttypen een andere aanpak vereisen.

Neem het voorbeeld van de medische assistent. Bijsluiters bevatten dense technische informatie in tabellen en korte alinea’s. Kleinere chunks laten je precieze info ophalen, zoals specifieke doseringen of contra-indicaties, zonder irrelevante context mee te nemen. Grotere chunks werken beter voor verhalende secties die meer context vereisen om goed te begrijpen.

Configureer chunkingparameters tijdens het uploaden van documenten:

operation = client.file_search_stores.upload_to_file_search_store(
    file="metformin.pdf",
    file_search_store_name=file_search_store.name,
    config={
        "display_name": "metformin",
        "chunking_config": {
            "white_space_config": {
                "max_tokens_per_chunk": 200,
                "max_overlap_tokens": 20
            }
        }
    }
)

De parameter chunking_config bepaalt hoe File Search je documenten splitst. max_tokens_per_chunk zet de maximale grootte per chunk, terwijl max_overlap_tokens bepaalt hoeveel content overlapt tussen opeenvolgende chunks. Deze overlap zorgt dat informatie die grensoverschrijdend is niet verloren gaat tijdens retrieval.

Die afweging is belangrijk: kortere chunks geven preciezere retrieval maar kunnen bredere context missen, terwijl grotere chunks meer betekenis behouden maar mogelijk irrelevante informatie bevatten. 

Voor technische documentatie met duidelijke sectiegrenzen gebruik je kleinere chunks (150-250 tokens). Voor verhalende documenten zoals onderzoekspapers of rapporten behouden grotere chunks (400-600 tokens) de opbouw en context beter. De officiële File Search-documentatie biedt extra richtlijnen voor chunkgroottes per documenttype.

Metadatafiltering

Wanneer je store tientallen of honderden documenten bevat, beperkt metadatafiltering de scope vóórdat de semantische zoekactie draait. Dit verbetert de precisie en verkort de verwerkingstijd.

Voeg metadata toe tijdens het uploaden van documenten om later te kunnen filteren:

operation = client.file_search_stores.upload_to_file_search_store(
    file="metformin.pdf",
    file_search_store_name=file_search_store.name,
    config={
        "display_name": "metformin",
        "custom_metadata": [
            {"key": "category", "string_value": "diabetes"},
            {"key": "year", "numeric_value": 2017},
            {"key": "drug_class", "string_value": "biguanide"}
        ]
    }
)

De parameter custom_metadata accepteert een array met sleutel-waardeparen. Gebruik string_value voor tekstmetadata zoals categorieën of geneesmiddelklasses, en numeric_value voor jaren, versies of andere numerieke data.

Query met metadatafilters om alleen relevante documenten te doorzoeken:

query = "What are the common side effects?"

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=query,
    config=types.GenerateContentConfig(
        tools=[
            types.Tool(
                file_search=types.FileSearch(
                    file_search_store_names=[file_search_store.name],
                    metadata_filter="category=diabetes"
                )
            )
        ]
    )
)

De parameter metadata_filter beperkt de retrieval tot documenten die aan de opgegeven criteria voldoen. In dit voorbeeld beschouwt File Search alleen documenten met category=diabetes en negeert de bloeddruk- en cholesterolverlagers, ook al staan die in dezelfde store.

Dit is cruciaal wanneer stores heterogene documenten bevatten. Een medische kennisbank kan bijsluiters, onderzoekspapers en richtlijnen bevatten. Filteren op documenttype zorgt ervoor dat je doseringsinformatie uit bijsluiters haalt, niet uit onderzoeksabstracts.

Je kunt metadatafiltering combineren met volledige semantische zoekmogelijkheden. De filter draait eerst om kandidaatdocumenten te selecteren, daarna zoekt de semantische laag de meest relevante passages binnen die documenten.

Performance-optimalisatie

De performance van File Search hangt af van de storegrootte, querycomplexiteit en modelkeuze. Met deze richtlijnen houd je retrieval snel en de kosten beheersbaar.

Grenzen aan storegrootte: Houd individuele stores onder 20GB voor optimale latency. File Search slaat embeddings naast je documenten op, en embeddings nemen ongeveer driemaal de grootte van je originele bestanden in. Een verzameling van 7GB aan PDF’s levert ongeveer 21GB aan opgeslagen data op na indexeren, wat de aanbevolen limiet overschrijdt.

Als je deze limiet nadert, maak dan aparte stores, geordend op categorie, tijdsperiode of toegangspatroon. Voor de medische assistent kun je bijvoorbeeld aparte stores maken voor verschillende geneesmiddelcategorieën in plaats van alle beschikbare medicijnen in één store te indexeren.

Kostenstructuur: File Search rekent $0,15 per 1 miljoen tokens voor indexeren. Eenmaal geïndexeerd kun je duizenden queries draaien zonder extra indexeerkosten. Dit prijsmodel is gunstig voor leeszware workloads waarbij je dezelfde documenten vaak bevraagt.

Modelkeuze: Gebruik gemini-2.5-flash voor de meeste queries. Het verwerkt requests in 1-2 seconden en kost aanzienlijk minder dan gemini-2.5-pro. Reserveer gemini-2.5-pro voor queries die diepgaand redeneren over meerdere bronnen of extreem complexe synthese vereisen. Het kostenverschil tussen modellen weegt bij high-volume applicaties zwaarder dan de indexeerkosten.

Monitor de storegrootte terwijl je documenten toevoegt. Je kunt dit via de API checken, al vindt de grootteberekening plaats aan Googles backend en is die mogelijk niet direct na uploads zichtbaar. Voor volledige specificaties en limieten, zie de Gemini File API-documentatie.

Meerdere stores beheren

Elk Google Cloud-project ondersteunt maximaal 10 File Search-stores. Met meerdere stores kun je documenten scheiden op basis van toegangscontrole, performance-eisen of logische indeling.

Maak gespecialiseerde stores voor verschillende usecases:

# Create separate stores for different document categories
diabetes_store = client.file_search_stores.create(
    config={"display_name": "diabetes-medications"}
)

cardio_store = client.file_search_stores.create(
    config={"display_name": "cardiovascular-medications"}
)

Query meerdere stores in één request:

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="What medications treat both diabetes and heart disease?",
    config=types.GenerateContentConfig(
        tools=[
            types.Tool(
                file_search=types.FileSearch(
                    file_search_store_names=[
                        diabetes_store.name,
                        cardio_store.name
                    ]
                )
            )
        ]
    )
)

File Search haalt op uit alle opgegeven stores en synthetiseert de resultaten. De groundingmetadata toont uit welke store elke citatie afkomstig is, met volledige traceerbaarheid. 

Stores blijven onbeperkt bestaan en moeten handmatig worden verwijderd wanneer ze niet meer nodig zijn. Dat maakt ze geschikt voor productieapplicaties waarin documenten sessie- en deploymentoverstijgend bevraagbaar blijven.

Hierna zie je hoe File Search zich verhoudt tot andere RAG-oplossingen en wanneer je kiest voor managed versus DIY-benaderingen.

Google File Search Tool versus andere File Search- en RAG-tools

File Search is niet je enige optie om RAG-applicaties te bouwen. Begrijpen hoe het zich verhoudt tot alternatieven helpt je het juiste gereedschap te kiezen. Laten we Google’s aanpak vergelijken met OpenAI’s aanbod en traditionele custom builds.

Functie

Google File Search

OpenAI File Search

Custom RAG (LangChain)

Prijsmodel

$0,15/M tokens (alleen index)

0,10/GB dagelijkse opslag

Infrastructuur + ontwikkelkosten

Controle over chunking

Geautomatiseerd met basisconfig

Configureerbaar (800 tokens standaard, 400 overlap)

Volledige controle over strategie

Zoektype

Semantisch (alleen vector)

Hybride (vector + keyword)

Elke methode die je implementeert

Bestandsformaten

150+ types (PDF, DOCX, code, enz.)

6 types (TXT, MD, HTML, DOCX, PPTX, PDF)

Afhankelijk van gebruikte parsers

Installatietijd

Minuten

Minuten

Dagen tot weken

Citaties

Ingebouwd met groundingmetadata

Ingebouwd

Moet je zelf implementeren

Beste voor

Hoog queryvolume, snelle uitrol

Keyword-rijke queries, redelijke controle

Complexe vereisten, volledige maatwerk

Google File Search vs OpenAI File Search

Beide bedrijven bieden hosted RAG, maar verschillen in prijs en mogelijkheden.

Prijs: Google rekent je één keer bij het indexeren af ($2,50 per duizend queries plus $0,10 per GB per dag voor opslag). Als je veel queries draait maar documenten zelden bijwerkt, bespaar je met Google’s model. Als je voortdurend herindexeert, wordt de rekensom interessant.

Configuratiecontrole: Google houdt het simpel met geautomatiseerde chunking en beperkte configuratie. OpenAI geeft je meer controle. Je kunt chunkgrootte (800 tokens standaard) en overlap (400 tokens) instellen. OpenAI draait ook hybride zoekopdrachten die vector- en keywordmatching combineren, terwijl Google puur op semantisch zoeken vertrouwt. Dat is relevant wanneer je queries specifieke technische termen of productcodes bevatten.

Bestandsformaten: Google ondersteunt 150+ bestandstypen, inclusief codebestanden en diverse documentformaten. OpenAI ondersteunt er zes: TXT, MD, HTML, DOCX, PPTX en PDF. Geen van beide gaat goed om met gestructureerde data zoals CSV of JSONL. Daar komen custom builds tot hun recht.

Integratie: Google sluit aan op Gemini-modellen en Google Cloud-services. OpenAI koppelt aan hun modelfamilie en Azure. Beide bieden citaties en brontracking.

Het echte verschil draait om eenvoud versus controle. Google wikkelt alles in één API-call. OpenAI laat je retrieval tunen tegen de prijs van meer complexiteit. Er is geen eenduidige winnaar. Het hangt af van of je voor snelheid of maatwerk gaat in je project.

Mogelijkheden van custom RAG

Je eigen RAG-systeem bouwen met tools zoals LangChain ontgrendelt mogelijkheden die hosted services niet bieden. DataCamps RAG met LangChain-cursus behandelt deze aanpak in detail.

Custom builds maken geavanceerde technieken mogelijk:

  • Semantische splitsing die topicverschuivingen detecteert in plaats van op vaste lengtes te knippen
  • Token-bewuste chunking die modelcontextvensters precies respecteert
  • Hybride retrieval die BM25-keywordsearch mengt met dense vectors
  • Querytransformaties zoals HyDE die hypothetische antwoorden genereren om de zoekactie te verbeteren
  • Graph RAG waarbij documenten worden weergegeven als netwerken van entiteiten en relaties

DataCamps tutorial over RAG-prestaties verbeteren verkent deze technieken met voorbeelden die meetbare kwaliteitsverbeteringen laten zien. De keerzijde is operationele complexiteit: je monitort databaseperformance, tunet embeddingmodellen en handelt updates af over meerdere services.

Wanneer welke aanpak gebruiken

Kies hosted tools zoals File Search wanneer:

  • Je prototypes of proof-of-concepts bouwt waarbij snelheid telt
  • Je usecase in standaardpatronen past (Q&A over docs, kennisbanken, documentatiezoek)
  • Je team geen diepe RAG-expertise heeft
  • Je voorspelbare kosten en minimale operationele overhead wilt

Bouw custom wanneer:

  • Je geavanceerde chunking of gespecialiseerde retrievalmethoden nodig hebt
  • Je werkt met gestructureerde data of ongebruikelijke bestandsformaten
  • Je agentic RAG-systemen bouwt die meerdere strategieën combineren
  • Kostenoptimalisatie op enorme schaal de engineeringinvestering rechtvaardigt
  • Compliance specifieke infrastructuur of modellen vereist

De meeste projecten starten met hosted oplossingen en schakelen pas over op custom builds wanneer de vereisten dat vragen. De technieken uit custom RAG (slimme chunking, hybride zoeken, queryoptimalisatie) blijven richting geven aan hoe je hosted tools inzet. Inzicht in het volledige landschap helpt je betere keuzes te maken naarmate je behoeften evolueren.

Conclusie

Je hebt een compleet RAG-systeem gebouwd met de Google File Search Tool, van het indexeren van FDA-bijsluiters tot queryen met citaties. De medische assistent laat zien hoe beheerde services de infrastructuur afhandelen terwijl jij je richt op de applicatielogica.

File Search werkt goed wanneer je betrouwbare RAG nodig hebt zonder vectordatabases of embeddingpipelines te beheren. De gratis opslag en query-embeddings maken kosten voorspelbaar. Persistente stores elimineren herindexeeroverhead, zodat je queries kunt opschalen zonder infrastructuuronderhoud op te schalen.

Voeg voor productie uitrol kritieke waarborgen toe die in de tutorial omwille van beknoptheid zijn weggelaten. Implementeer foutafhandeling met time-outs voor uploadoperaties en try-catchblokken rond API-calls. Denk na over gegevensprivacy wanneer je documenten naar Google’s servers uploadt, zeker bij gevoelige inhoud. Voeg validatie toe om te verifiëren dat groundingmetadata aanwezig is voordat je citaties opvraagt. Test grondig met domeinexperts om gevallen te vinden waarin het model plausibele maar onjuiste antwoorden genereert ondanks onderbouwing.

Probeer als volgende stap je assistent uit te breiden met metadatafiltering om documenten per categorie te organiseren. Experimenteer met chunkgroottes die passen bij jouw documenttypen. De technieken die je hier hebt geleerd zijn toepasbaar op supportbots, documentatiezoek of kennisassistenten.

FAQs

Moet ik opnieuw indexeren wanneer een document verandert?

Ja. Bijwerken of vervangen van een bestand vereist opnieuw uploaden, zodat de embeddings de nieuwe inhoud weerspiegelen.

Kan ik toegang tot specifieke documenten beheren?

Nog niet op fijnmazig niveau. Je kunt metadatafilters gebruiken om te beperken welke documenten worden bevraagd, maar permissies op gebruikersniveau worden momenteel niet ondersteund.

Wat zijn de limieten voor bestand- en storegrootte?

Individuele bestanden kunnen tot ongeveer 100 MB zijn, en store-tiers lopen op tot grofweg 1 TB. Stores onder 20 GB houden zorgt doorgaans voor snellere retrieval.

Hoe betrouwbaar zijn de citaties?

File Search voegt groundingmetadata toe die laat zien welke documentchunks een antwoord hebben onderbouwd. Deze citaties verhogen de transparantie, maar moeten nog steeds op juistheid worden beoordeeld.

Gebruikt File Search keyword- of vectorretrieval?

Het vertrouwt op semantisch (vectorgebaseerd) zoeken. Als je exacte keywordmatching nodig hebt, heb je een custom of hybride retrievalopzet nodig.

Bexruz (Bex) Tuychiev

Auteur

Bexruz (Bex) Tuychiev

Ik ben een contentmaker op het gebied van data science met meer dan 2 jaar ervaring en een van de grootste achterbannen op Medium. Ik schrijf graag uitgebreide artikelen over AI en ML met een vleugje sarcastische stijl, want je moet toch íets doen om ze wat minder saai te maken. Ik heb meer dan 130 artikelen en een DataCamp-cursus gemaakt, en er is nog een nieuwe in de maak. Mijn content is door meer dan 5 miljoen paar ogen gezien, van wie 20k volgers werden op zowel Medium als LinkedIn. 

Onderwerpen

Gerelateerd