pgx
PGX — Lightweight Postgres for AI agents. Written in Rust. Thousands of isolated databases in one runtime. 🐘
翻译准备中
Chat met open Nederlandse onderwijsdata (CBS + RIO)
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Een controleerbare chatbot voor onderwijsonderzoek. Stel vragen over CBS, RIO en DUO onderwijsdata. De app genereert antwoorden met volledig traceerbare bronnen — elke analyse exporteert automatisch als Python-code die je kunt auditen en reproduceren.查看完整 README ↗
Een controleerbare chatbot voor onderwijsonderzoek.
Stel vragen over CBS, RIO en DUO onderwijsdata. De app genereert antwoorden met volledig traceerbare bronnen — elke analyse exporteert automatisch als Python-code die je kunt auditen en reproduceren.
Voor onderzoeksinstellingen: de AI rekent nooit zelf. Elk getal komt uit een tool die op officiële CBS-, DUO- en RIO-data rekent en is herleidbaar tot de brontabel. Noemt het model toch een getal dat niet in de data staat, dan trekt een controle in code het antwoord in. De tekst stroomt live binnen en de controle draait daarna, dus het getal kan kort zichtbaar zijn voor het wordt ingetrokken; het ingetrokken antwoord blijft herkenbaar. Wat die controles wel en niet dekken staat in Anti-hallucinatie architectuur.
https://github.com/user-attachments/assets/9ab68b2a-7c00-4b2b-82ea-cbba245f1edb
De assistent heeft toegang tot CBS, RIO en DUO via tool calling en genereert antwoorden met volledige herkomstketen — per analysestap toont de app de Python-code die is uitgevoerd.
Elke analyse exporteert zichzelf als draaibare Python-code. Dit is cruciaal voor onderzoeksinstellingen:
Voorbeeld:
from riodata import duo
import pandas as pd
df = duo.load("p02ho1ejrs", "...")
df = df[df["ONDERDEEL"] == "Informatica"]
df = df[df["OPLEIDINGSVORM"] == "VT"]
hbo = df.groupby("STUDIEJAAR")["AANTAL_INGESCHREVENEN"].sum()
print(hbo)
Zie reproducibility.md voor details.
| Bron | Inhoud | Catalogus |
|---|---|---|
| CBS | 125 datasets met onderwijsstatistieken over mbo, hbo en wo; vier daarvan zijn vo-tabellen, alleen als vo-context voor ho | cedanl.github.io/cbs-onderwijsdata |
| RIO | Register van onderwijsinstellingen en opleidingen, met sectorfilter op mbo/hbo/wo (8 resources) | cedanl.github.io/rio-onderwijsdata |
| DUO | 15 open datasets over mbo, hbo en wo: prognoses, diplomering, instroom, adressen; één daarvan (voprognoses) is alleen vo-context voor ho | onderwijsdata.duo.nl |
| ROA | Arbeidsmarkt-prognoses per opleidingsniveau en -sector (AIS 2030, schoolverlaters SIS 2024); in de chat via get_roa_benchmark en in de dashboards | — |
| UWV | Open match vacatures (momentopname mei 2023); in de chat via get_uwv_vacatures en in de dashboards | — |
.env.example)cp .env.example .env
# Vul je API key in .env in
uv sync
Kopieer .env.example naar .env en stel minimaal MODEL en de bijbehorende API key in:
MODEL=anthropic/claude-sonnet-4-6
ANTHROPIC_API_KEY=sk-ant-...
Ondersteunde providers via LiteLLM: Anthropic, OpenAI, Azure OpenAI, Azure AI Foundry, Google Gemini.
Optionele instellingen:
| Variabele | Standaard | Betekenis |
|---|---|---|
AVAILABLE_MODELS | (afgeleid uit API keys) | Kommagescheiden lijst van modellen in de UI-picker, bijv. azure_ai/claude-sonnet-4-6,azure_ai/gpt-4o. Gebruik dit als je meerdere modellen via één provider aanbiedt. |
MAX_TOKENS | 40960 | Maximum tokens per LLM-aanroep |
TEMPERATURE | 0 | Sampling-temperatuur van het model; 0 voor herhaalbare analyses |
SEED | 42 | Vaste seed voor providers die dat ondersteunen; de rest negeert hem |
MAX_TOOL_ITERATIONS | 25 | Maximum tool-aanroepen per vraag |
CBS_ROW_LIMIT | 5000 | Maximum rijen uit CBS-datasets |
RIO_PAGE_SIZE | 50 | Maximum records per RIO-aanroep |
DUO_ROW_LIMIT | 500 | Maximum rijen uit DUO-datasets |
MAX_HISTORY | 40 | Maximum berichten in chat-geschiedenis |
MAX_MESSAGE_CHARS | 4000 | Maximum tekens per nieuw chatbericht; langere berichten weigert de server |
RUN_SLOW_S | 20 | Seconden tot de chat onder de voortgang zegt dat het even kan duren |
RUN_TIMEOUT_S | 300 | Seconden tot een vraag wordt gestopt |
GENEREER_TIMEOUT_S | 480 | Seconden tot een rapport of dashboard aan de serverkant wordt gestopt (onder de 10 min van de frontend, #759) |
make dev
De app herstart automatisch bij bestandswijzigingen.
VS Code devcontainer — poorten worden automatisch doorgestuurd, open gewoon:
http://localhost:8000
devcontainer-cli (plain Docker, geen VS Code) — forwardPorts in devcontainer.json werkt niet zonder VS Code. Gebruik het container-bridge-IP:
make url # print de juiste URL, bijv. http://172.17.0.2:8000
Open die URL in je host-browser.
De catalogus is ook te doorzoeken vanuit een MCP-client (Claude Desktop, Cursor, VS Code), zonder de chat-app te draaien:
uv sync --extra mcp
uv run python mcp_server.py
Drie tools met dezelfde schema's als in de chat: search_catalog (altijd één JSON-envelope met status, kandidaten en vervolgstap), dataset_details en dataset_counts. Geen API-sleutel nodig; de datatools blijven bij de chat. Zie docs/mcp.md voor de clientconfiguratie.