Einleitung
Moderne Chatbots basieren oft auf Cloud-APIs wie OpenAI oder Anthropic. Doch mit TanStack AI und einem lokalen Ollama-Server lässt sich ein vollständig selbst gehosteter Chatbot-Agent realisieren, der Datenschutz gewährleistet und keine laufenden API-Kosten verursacht.
TanStack AI ist eine Sammlung von React Hooks für KI-gestützte Benutzeroberflächen. In Kombination mit Ollama als LLM-Backend entsteht ein leistungsfähiger Chat-Agent, der sich als Widget in beliebige Websites einbetten lässt.
Architektur: Wie die Komponenten zusammenspielen
Der Chatbot besteht aus drei Hauptkomponenten:
Frontend (React + TanStack AI): Rendert die Chat-Oberfläche und verwaltet den Konversationsstatus
Backend (Node.js/Express): Vermittelt zwischen Frontend und Ollama, handhabt Streaming
LLM (Ollama): Führt die eigentliche Inferenz lokal auf der GPU aus
┌─────────────────┐ HTTP/SSE ┌─────────────────┐ REST API ┌─────────────────┐
│ React App │ ─────────────── │ Node Backend │ ────────────── │ Ollama │
│ TanStack AI │ Streaming │ Express.js │ │ (GPU-lokal) │
└─────────────────┘ └─────────────────┘ └─────────────────┘TanStack AI: Die React-Hooks für Chat-UIs
TanStack AI basiert auf dem Vercel AI SDK und bietet spezialisierte Hooks für Chat-Anwendungen.
useChat Hook: Das Herzstück
Der useChat Hook verwaltet den kompletten Chat-Status:
import { useChat } from '@tanstack/react-ai';
function ChatComponent() {
const {
messages,
input,
handleInputChange,
handleSubmit,
isLoading,
error
} = useChat({
api: '/api/chat',
initialMessages: []
});
return (
<div className="chat-container">
{messages.map((msg) => (
<div key={msg.id} className={`message ${msg.role}`}>
{msg.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={handleInputChange}
placeholder="Nachricht eingeben..."
/>
<button type="submit" disabled={isLoading}>
Senden
</button>
</form>
</div>
);
}Streaming-Antworten in Echtzeit
TanStack AI unterstützt Server-Sent Events (SSE) für Echtzeit-Streaming. Der Nutzer sieht die Antwort Wort für Wort erscheinen, was das Nutzererlebnis erheblich verbessert.
Backend: Ollama-Integration mit Express
Das Backend verbindet das React-Frontend mit dem lokalen Ollama-Server:
import express from 'express'; import { Ollama } from 'ollama';
const app = express(); const ollama = new Ollama({ host: 'http://localhost:11434' });
app.post('/api/chat', async (req, res) => { const { messages, model = 'llama3.2' } = req.body;
// SSE-Header für Streaming res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive');
const response = await ollama.chat({ model, messages, stream: true });
for await (const chunk of response) { const data = JSON.stringify({ content: chunk.message.content, done: chunk.done }); res.write(data: ${data}\n\n); }
res.end(); });Ollama: Der lokale LLM-Server
Ollama macht das Ausführen von Large Language Models auf eigener Hardware einfach. Nach der Installation genügt ein Befehl zum Laden eines Modells:
Für den Chatbot-Einsatz eignen sich besonders:
Llama 3.2 (8B): Schnell und vielseitig
Mistral (7B): Gute Balance aus Geschwindigkeit und Qualität
Qwen 2.5 (7B): Stark bei Instruktionen und Dialog
System-Prompts für spezialisierte Agenten
Durch angepasste System-Prompts wird der Chatbot zum spezialisierten Agenten:
const systemPrompt = Du bist ein hilfreicher KI-Assistent für
technische Fragen. Antworte präzise und strukturiert.
Wenn du etwas nicht weißt, sage es ehrlich.;
const messages = [
{ role: 'system', content: systemPrompt },
…userMessages
];
Widget-Einbettung: Chat überall verfügbar
Das fertige Chat-Widget lässt sich per Script-Tag in jede Website einbetten:
<script
src="https://chat.example.com/widget.js"
data-api-url="https://chat.example.com"
data-title="AI Assistant"
data-position="bottom-right"
data-primary-color="#3B82F6">
</script>
Das Widget:
Lädt asynchron ohne Performance-Einbußen
Ist vollständig responsiv
Speichert optional den Konversationsverlauf
Unterstützt Theming über CSS-Variablen
Erweiterte Features
Tool-Integration mit MCP
Mit dem Model Context Protocol (MCP) können externe Tools in den Chat integriert werden. Der Agent kann dann Datenbanken abfragen, API aufrufen, Berechnungen durchführen oder Dateien verarbeiten.
Deployment-Optionen
Kubernetes-Deployment
Für produktive Umgebungen empfiehlt sich ein Kubernetes-Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: tanstack-chat
namespace: ai-services
spec:
replicas: 1
selector:
matchLabels:
app: tanstack-chat
template:
spec:
containers:
- name: chat
image: tanstack-chat:latest
ports:
- containerPort: 3000
env:
- name: OLLAMA_URL
value: "http://ollama:11434"
Fazit
TanStack AI mit Ollama ermöglicht den Aufbau leistungsfähiger Chatbot-Agenten ohne Cloud-Abhängigkeiten. Die Kombination aus React-Hooks für das Frontend und lokaler LLM-Inferenz bietet volle Kontrolle über Daten und Kosten. Durch die Widget-Architektur lässt sich der Chat flexibel in bestehende Anwendungen integrieren.