ZVV-MCP

ZVV-MCP

An application that combines Spice.ai with ZVV (Zurich Public Transport) data from opendata.swiss, enabling natural language queries of public transport information through LLM integration.

Category
访问服务器

README

ZVV-MCP mit SpiceAI

Dieses Projekt demonstriert die Integration von SpiceAI in eine Next.js-Anwendung.

Lokale Entwicklung

  1. Installiere die Abhängigkeiten:
npm install
  1. Installiere die SpiceAI-Runtime:
curl https://install.spiceai.org | /bin/bash
  1. Starte die SpiceAI-Runtime:
spice run
  1. Starte den Entwicklungsserver:
npm run dev
  1. Öffne http://localhost:3000 im Browser

Vercel-Deployment

Für das Deployment auf Vercel benötigst du einen Spice.ai-API-Key:

  1. Erstelle einen Account auf spice.ai
  2. Erstelle eine App und generiere einen API-Key
  3. Verknüpfe dein GitHub-Repository mit Vercel
  4. Füge den API-Key als Umgebungsvariable SPICE_API_KEY in deinen Vercel-Projekteinstellungen hinzu
  5. Deploye dein Projekt

Funktionen

  • SQL-Abfragen an SpiceAI senden
  • Ergebnisse in einer Tabelle anzeigen
  • Fehlerbehandlung für fehlgeschlagene Abfragen

Technologien

  • Next.js 14
  • TypeScript
  • SpiceAI Client
  • Vercel Deployment

Übersicht

ZVV-MCP ist eine Anwendung, die Spice.ai mit Daten von opendata.swiss kombiniert, um öffentliche Verkehrsdaten des Zürcher Verkehrsverbunds (ZVV) mittels LLM abfragbar zu machen.

Features

  • Spice.ai Integration: Beschleunigte Datenabfragen für effiziente Verarbeitung großer Verkehrsdatensätze
  • opendata.swiss Anbindung: Zugriff auf offizielle ZVV-Daten
  • LLM-Abfragen: Natürlichsprachliche Abfrage von Verkehrsinformationen
  • Responsive Design: Optimale Nutzung auf allen Geräten

Projektstruktur

  • src/: Quellcode der Anwendung
    • components/: Wiederverwendbare UI-Komponenten
    • pages/: Next.js-Seiten und API-Routes
    • styles/: Globale CSS-Stile
  • public/: Statische Dateien
  • docs/: Dokumentation
  • zvv-data/: Spice.ai Konfiguration und Daten

Technische Architektur

Systemkomponenten

Die Anwendung besteht aus drei Hauptkomponenten:

  1. Next.js Frontend: React-basierte Benutzeroberfläche
  2. Spice.ai Engine: Verarbeitet und analysiert Verkehrsdaten
  3. OpenAI Service: Stellt LLM-Funktionalitäten für natürlichsprachliche Abfragen bereit

Datenfluss

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌──────────────┐
│ GTFS-Daten  │───>│ Spice.ai    │<───│ Next.js     │<───│ Benutzer-    │
│ (opendata)  │    │ Engine      │    │ Frontend    │    │ anfrage      │
└─────────────┘    └──────┬──────┘    └──────┬──────┘    └──────────────┘
                          │                   │
                          │                   │
                          │                   ▼
                          │           ┌─────────────┐
                          └──────────>│ OpenAI LLM  │
                                      │ (GPT-4o)    │
                                      └─────────────┘

Sequenzdiagramm für eine Benutzeranfrage

┌─────────┐          ┌─────────┐          ┌──────────┐          ┌────────┐
│ Benutzer│          │ Frontend│          │ OpenAI   │          │Spice.ai│
└────┬────┘          └────┬────┘          └─────┬────┘          └────┬───┘
     │                     │                     │                    │
     │ Stellt Frage        │                     │                    │
     │ zu ZVV-Linien       │                     │                    │
     │────────────────────>│                     │                    │
     │                     │                     │                    │
     │                     │ Verbindungsstatus   │                    │
     │                     │ abfragen            │                    │
     │                     │───────────────────────────────────────────>
     │                     │                     │                    │
     │                     │ Daten-Metadaten     │                    │
     │                     │<───────────────────────────────────────────
     │                     │                     │                    │
     │                     │ LLM-Anfrage mit     │                    │
     │                     │ Kontext & Frage     │                    │
     │                     │────────────────────>│                    │
     │                     │                     │                    │
     │                     │ LLM-Antwort         │                    │
     │                     │<────────────────────│                    │
     │                     │                     │                    │
     │ Antwort anzeigen    │                     │                    │
     │<────────────────────│                     │                    │
     │                     │                     │                    │
┌────┴────┐          ┌────┴────┐          ┌─────┴────┐          ┌────┴───┐
│ Benutzer│          │ Frontend│          │ OpenAI   │          │Spice.ai│
└─────────┘          └─────────┘          └──────────┘          └────────┘

Installation

Voraussetzungen

  • Node.js (>= 14.x)
  • npm oder yarn
  • Spice.ai CLI (siehe docs/installation.md)
  • Docker (optional, für Containerisierung)

Setup

# Projektabhängigkeiten installieren
npm install

# Spice.ai installieren (siehe docs/installation.md für Details)
curl -fsSL https://raw.githubusercontent.com/spiceai/spiceai/trunk/install/install.sh | bash

# Spice.ai Projekt initialisieren
spice init zvv-data

Entwicklung

# Next.js Entwicklungsserver starten
npm run dev

# In einem separaten Terminal: Spice.ai Runtime starten
cd zvv-data
spice run

Daten

ZVV GTFS-Daten

Das Projekt verwendet GTFS-Daten (General Transit Feed Specification) vom Zürcher Verkehrsverbund. Die Daten werden im data/-Verzeichnis erwartet und sind in der spicepod.yaml konfiguriert.

Hinweis: Die CSV-Datendateien sind sehr groß und werden nicht im Git-Repository gespeichert. Sie müssen separat heruntergeladen und im data/-Verzeichnis platziert werden.

Folgende Dateien werden benötigt:

  • stops.csv - Haltestellen (~5.791 Einträge)
  • routes.csv - Linien (~383 Einträge)
  • trips.csv - Fahrten (~205.526 Einträge)
  • stop_times.csv - Fahrplanzeiten (~3.456.460 Einträge)
  • calendar.csv - Betriebstage (~1.695 Einträge)
  • transfers.csv - Umsteigeverbindungen (~10.342 Einträge)
  • agency.csv - Verkehrsunternehmen
  • shapes.csv - Streckenverläufe
  • calendar_dates.csv - Zusätzliche Betriebstage/Ausnahmen

Die Daten können von opendata.swiss heruntergeladen werden.

Best Practices

Entwicklung

  • Komponenten-Design: Funktionale React-Komponenten mit Hooks verwenden
  • Typisierung: TypeScript für statische Typprüfung und bessere IDE-Unterstützung
  • State Management: React Context für geteilten Zustand zwischen Komponenten
  • CSS-Organisation: Tailwind-Klassen für konsistentes Design

Datenverarbeitung

  • Daten-Caching: Spice.ai Beschleunigung für schnelle Abfragen großer Datensätze
  • Inkrementelles Laden: Nur benötigte Daten laden, um Leistung zu optimieren
  • Error Handling: Robuste Fehlerbehandlung für API-Aufrufe und Datenverarbeitung

LLM-Integration

  • Prompt Engineering: Präzise System-Prompts für genaue Antworten
  • Kontext-Management: Relevante Daten ins LLM-Prompt aufnehmen
  • Antwort-Parsing: Strukturierte Verarbeitung der LLM-Antworten

Produktion

npm run build
npm start

Dokumentation

Technologie-Stack

  • Frontend: Next.js, React, TypeScript, Tailwind CSS
  • Datenverarbeitung: Spice.ai
  • Datenquellen: opendata.swiss (GTFS-Daten)
  • KI-Modelle: OpenAI GPT-4o für natürlichsprachliche Abfragen

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选