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.
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:
from google import genai
from google.genai import types
import time
from dotenv import load_dotenv
load_dotenv()
client = genai.Client()Mogelijk gemaakt door
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}")Mogelijk gemaakt door
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 completewhilenot operation.done:
time.sleep(3)
operation = client.operations.get(operation)print(f"{pdf_file} indexed")Mogelijk gemaakt door
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)Mogelijk gemaakt door
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 metforminMogelijk gemaakt door
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 inenumerate(response1.candidates[0].grounding_metadata.grounding_chunks,1):
source_name = chunk.retrieved_context.title
print(f" [{i}] {source_name}")Mogelijk gemaakt door
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)Mogelijk gemaakt door
Hetzelfde API-patroon haalt nu uit meerdere documenten en synthetiseert de informatie. Toegang tot de opgehaalde tekstsnippets:
print("Sources used:")for i, chunk inenumerate(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}")Mogelijk gemaakt door
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...Mogelijk gemaakt door
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 inenumerate(metadata.grounding_chunks,1):print(f" [{i}] {chunk.retrieved_context.title}")Mogelijk gemaakt door
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}}})Mogelijk gemaakt door
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. Deofficië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"}]})Mogelijk gemaakt door
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"))]))Mogelijk gemaakt door
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 deGemini 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"})Mogelijk gemaakt door
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
]))]))Mogelijk gemaakt door
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.
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. DataCampsRAG 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 overRAG-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.
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.
Word een expert in RAG met Weaviate! Voeg tekst en afbeeldingen toe om ze later terug te vinden en probeer vector-, BM25- en hybride zoekopdrachten uit.
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:
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.
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:
Haal je API-sleutel op bij Google AI Studio. Sla deze op in een .env-bestand in je projectmap:
Zet je imports klaar en initialiseer de 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:
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.namebevat een unieke identifier waarnaar je verwijst bij het queryen. Deze ziet eruit alsfileSearchStores/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:
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:
Dit print het gegenereerde antwoord:
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 arraytoolsvertelt 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:
Output:
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_chunksbevat 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:
Hetzelfde API-patroon haalt nu uit meerdere documenten en synthetiseert de informatie. Toegang tot de opgehaalde tekstsnippets:
De output toont fragmenten uit beide bijsluiters:
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:
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:
De parameter
chunking_configbepaalt hoe File Search je documenten splitst.max_tokens_per_chunkzet de maximale grootte per chunk, terwijlmax_overlap_tokensbepaalt 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:
De parameter
custom_metadataaccepteert een array met sleutel-waardeparen. Gebruikstring_valuevoor tekstmetadata zoals categorieën of geneesmiddelklasses, ennumeric_valuevoor jaren, versies of andere numerieke data.Query met metadatafilters om alleen relevante documenten te doorzoeken:
De parameter
metadata_filterbeperkt de retrieval tot documenten die aan de opgegeven criteria voldoen. In dit voorbeeld beschouwt File Search alleen documenten metcategory=diabetesen 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-flashvoor de meeste queries. Het verwerkt requests in 1-2 seconden en kost aanzienlijk minder dangemini-2.5-pro. Reserveergemini-2.5-provoor 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:
Query meerdere stores in één request:
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:
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:
Bouw custom wanneer:
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.