ZVV

ZVV Info

API Dokumentation

Technische Dokumentation

ZVV Info — KI-gestützte Fahrplan-Auskunft für den Schweizer ÖV

# Was ist ZVV Info?

ZVV Info ist eine KI-gestützte Fahrplan-Auskunft für den gesamten Schweizer öffentlichen Verkehr. Nutzer können per Text oder Sprache Fragen zu Fahrplänen, Haltestellen, Abfahrten und Verbindungen stellen.

Im Hintergrund verbindet sich die App über das Model Context Protocol (MCP) mit dem GTFS-Backend, das den gesamten Schweizer ÖV-Fahrplan als SQLite-Datenbank bereitstellt. Das LLM entscheidet selbstständig, welche Datenabfragen nötig sind, führt sie aus und präsentiert die Ergebnisse in einer nutzerfreundlichen Form.

Next.js 15AI SDK 6MCPClaude / GPT / LM StudioSpracheingabeGTFS Schweiz

# Features

Natürliche Sprache

Fragen wie "Wann fährt der nächste Zug ab Zürich HB?" werden vom LLM verstanden und beantwortet.

Spracheingabe

Mikrofon-Button für Voice-to-Text via OpenAI Whisper oder Browser Speech API.

Multi-Model

Echtzeit-Modellwechsel zwischen Claude, GPT und lokalen LLMs (LM Studio).

Live-Fahrplandaten

Alle Daten kommen live vom GTFS-Backend — kein veraltetes Training, sondern aktuelle Abfragen.

Tool Calling

Das LLM ruft automatisch die richtigen Tools auf: Haltestellensuche, Abfahrten, SQL-Queries.

Folgefragen

Nach jeder Antwort werden kontextbezogene, klickbare Folgefragen vorgeschlagen.

Dev Panel

Echtzeit-Statistiken: TTFT, Tokens/s, Latenz, Tool-Calls — für jede Anfrage.

Deep Links

Fragen per URL-Parameter vorausfüllen und automatisch absenden.

# Architektur

Die App folgt einer drei-schichtigen Architektur: Frontend → LLM-Backend → MCP-Datenserver.

Diagramm wird geladen…

Datenfluss (Sequenz)

Diagramm wird geladen…

# MCP-Integration

Die App nutzt das Model Context Protocol (MCP) über @ai-sdk/mcp, um sich dynamisch mit Datenquellen zu verbinden. Tools werden nicht fest verdrahtet, sondern beim Serverstart vom MCP-Backend abgerufen.

Konfigurierte Backends

BackendURLTransportBeschreibung
Schweizer ÖV-Fahrplangtfs.zvv.dev/mcpStreamableHTTPHaltestellen, Linien, Abfahrten, Fahrpläne (GTFS)

Verfügbare Tools

ToolBeschreibung
search_stopsTextsuche nach Haltestellen (Name, Limit)
get_routesLinien filtern nach Typ und/oder Agency
get_departuresAbfahrten ab einer Haltestelle (Stop-ID, Datum, Uhrzeit)
get_trip_detailsAlle Halte einer bestimmten Fahrt
get_agenciesAlle Verkehrsunternehmen auflisten
query_gtfsFreie SQL-SELECT-Abfrage auf die GTFS-Datenbank

# LLM-Modelle

Das Modell kann in Echtzeit gewechselt werden — ohne Neuladen der Seite. Die Auswahl wird pro Request an den Server gesendet.

ProviderModelleHinweise
AnthropicClaude Haiku 4.5, Claude Sonnet 4.5Standard. Exzellentes Tool-Calling.
OpenAIGPT-4o, GPT-4o MiniAuch für Voice Realtime API.
LM Studio (lokal)Qwen3, Gemma, Llama, Mistral u.a.Nur geladene Modelle wählbar. Chat Completions API.

Konfiguration: Modelle werden über Env-Variablen gesteuert:

  • MAIN_MODEL — Standard-Modell (Default: claude-haiku-4-5)
  • ANTHROPIC_API_KEY — Aktiviert Anthropic-Modelle
  • OPENAI_API_KEY — Aktiviert OpenAI-Modelle + Voice
  • LMSTUDIO_BASE_URL + LMSTUDIO_API_KEY — LM Studio Verbindung

# Spracheingabe

Die App bietet einen Mikrofon-Button für Spracheingabe. Das Audio wird transkribiert und als Text-Nachricht gesendet.

MethodeVoraussetzungQualität
OpenAI Whisper APIOPENAI_API_KEY gesetztHoch (Server-seitig)
Browser Speech APIKein API-Key nötigMittel (Browser-abhängig)

# API-Endpunkte

EndpointMethodeBeschreibung
/GETChat-Frontend
/docsGETDokumentation (diese Seite)
/api/chatPOSTChat-Completion mit LLM + MCP Tools
/api/modelsGETVerfügbare LLM-Modelle + Loaded-Status
/api/healthGETBackend-Health-Check (MCP-Verbindungen)
/api/debugGETDebug-Info (Environment, Backends, Tools)

# Dev Panel

Die rechte Seitenleiste zeigt Echtzeit-Metriken für jeden LLM-Request:

TTFTTime To First Token — Latenz bis das erste Token vom LLM ankommt
Tok/sGeschätzte Token-Generierungsrate (Tokens pro Sekunde)
ElapsedGesamtdauer des Requests (Submit → Complete)
StreamDauer der Token-Generierung (First Token → Complete)
CharsZeichenanzahl der generierten Antwort
ToolsAnzahl der Tool-Calls im Request

Zusätzlich zeigt das Panel: Environment-Info (Node.js, Next.js, AI SDK Versionen), Backend-Status mit Latenz, und eine History der letzten 20 Requests.

# Tech-Stack

KomponenteTechnologie
FrameworkNext.js 15 (App Router)
UIReact 19, Tailwind CSS 4
AI IntegrationVercel AI SDK 6 (@ai-sdk/react, @ai-sdk/anthropic, @ai-sdk/openai)
MCP Client@ai-sdk/mcp (StreamableHTTP Transport)
LLM ProvidersAnthropic (Claude), OpenAI (GPT), LM Studio (lokale Modelle)
SpracheOpenAI Whisper API / Browser Speech API
Markdownreact-markdown + remark-gfm
IconsLucide React
DeploymentVercel (Serverless)
DatenquelleGTFS Schweiz via MCP (gtfs.zvv.dev)
SpracheTypeScript 5.7

# Quellcode & Lizenz

Die Fahrplandaten stammen von opentransportdata.swiss und unterliegen den Nutzungsbedingungen von opendata.swiss. Die App selbst ist Open Source.