Übersicht
Die Chat API ist eine RESTful API für den programmatischen Zugriff auf die AI-Modus-Funktion von Fess. Sie können KI-gestützte Antworten basierend auf Suchergebnissen erhalten.
Diese API bietet zwei Endpunkte:
Nicht-Streaming-API: Vollständige Antwort auf einmal abrufen
Streaming-API: Antworten in Echtzeit über Server-Sent Events (SSE)
Voraussetzungen
Um die Chat API zu verwenden, sind folgende Einstellungen erforderlich:
AI-Modus-Funktion ist aktiviert (
rag.chat.enabled=true)LLM-Provider ist konfiguriert
Für detaillierte Konfiguration siehe AI-Modus-Funktion konfigurieren.
Nicht-Streaming-API
Endpunkt
POST /api/v1/chat
Request-Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
message | String | Ja | Benutzernachricht (Frage) |
sessionId | String | Nein | Sitzungs-ID für Gespräch fortsetzen |
clear | String | Nein | "true" um Sitzung zu löschen |
Response
Erfolg (HTTP 200)
{
"status": "ok",
"sessionId": "abc123def456",
"content": "Fess ist ein Volltextsuchserver. Hauptmerkmale sind...",
"sources": [
{
"title": "Fess Übersicht",
"url": "https://fess.codelibs.org/de/overview.html"
},
{
"title": "Funktionsliste",
"url": "https://fess.codelibs.org/de/features.html"
}
]
}
Fehler
{
"status": "error",
"message": "Message is required"
}
HTTP-Statuscodes
| Code | Beschreibung |
|---|---|
| 200 | Request erfolgreich |
| 400 | Ungültige Request-Parameter (z.B. message leer) |
| 404 | Endpunkt nicht gefunden |
| 405 | HTTP-Methode nicht erlaubt (nur POST erlaubt) |
| 500 | Interner Serverfehler |
Verwendungsbeispiele
cURL
# Neuen Chat starten
curl -X POST "http://localhost:8080/api/v1/chat" \
-d "message=Was ist Fess?"
# Gespräch fortsetzen
curl -X POST "http://localhost:8080/api/v1/chat" \
-d "message=Wie installiere ich es?" \
-d "sessionId=abc123def456"
# Sitzung löschen
curl -X POST "http://localhost:8080/api/v1/chat" \
-d "sessionId=abc123def456" \
-d "clear=true"
JavaScript
async function chat(message, sessionId = null) {
const params = new URLSearchParams();
params.append('message', message);
if (sessionId) {
params.append('sessionId', sessionId);
}
const response = await fetch('/api/v1/chat', {
method: 'POST',
body: params
});
return await response.json();
}
// Verwendung
const result = await chat('Erzähle mir über Fess-Funktionen');
console.log(result.content);
console.log('Session ID:', result.sessionId);
Python
import requests
def chat(message, session_id=None):
data = {'message': message}
if session_id:
data['sessionId'] = session_id
response = requests.post(
'http://localhost:8080/api/v1/chat',
data=data
)
return response.json()
# Verwendung
result = chat('Wie installiere ich Fess?')
print(result['content'])
print(f"Session ID: {result['sessionId']}")
Streaming-API
Endpunkt
POST /api/v1/chat/stream
GET /api/v1/chat/stream
Request-Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
message | String | Ja | Benutzernachricht (Frage) |
sessionId | String | Nein | Sitzungs-ID für Gespräch fortsetzen |
Response-Format
Die Streaming-API gibt Antworten im text/event-stream Format (Server-Sent Events) zurück.
Jedes Ereignis hat folgendes Format:
event: <Ereignisname>
data: <JSON-Daten>
SSE-Ereignisse
session
Übermittelt Sitzungsinformationen. Wird zu Beginn des Streams gesendet.
{
"sessionId": "abc123def456"
}
phase
Benachrichtigt über Start/Ende einer Verarbeitungsphase.
{
"phase": "search",
"status": "start",
"message": "Searching documents...",
"keywords": "Fess Installation"
}
Phasentypen:
intent_analysis- Absichtsanalysesearch- Suchausführungevaluation- Ergebnisbewertunggeneration- Antwortgenerierung
chunk
Übermittelt generierte Textfragmente.
{
"content": "Fess ist"
}
sources
Übermittelt Quelldokument-Informationen.
{
"sources": [
{
"title": "Installationsanleitung",
"url": "https://fess.codelibs.org/de/install.html"
}
]
}
done
Benachrichtigt über Verarbeitungsabschluss.
{
"sessionId": "abc123def456",
"htmlContent": "<p>Fess ist ein Volltextsuchserver...</p>"
}
error
Benachrichtigt über Fehler.
{
"phase": "generation",
"message": "LLM request failed"
}
Verwendungsbeispiele
cURL
curl -X POST "http://localhost:8080/api/v1/chat/stream" \
-d "message=Erzähle mir über Fess-Funktionen" \
-H "Accept: text/event-stream" \
--no-buffer
Python
import requests
def stream_chat(message, session_id=None):
data = {'message': message}
if session_id:
data['sessionId'] = session_id
response = requests.post(
'http://localhost:8080/api/v1/chat/stream',
data=data,
stream=True,
headers={'Accept': 'text/event-stream'}
)
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('data: '):
import json
data = json.loads(line[6:])
yield data
# Verwendung
for event in stream_chat('Erzähle mir über Fess-Funktionen'):
if 'content' in event:
print(event['content'], end='', flush=True)
elif 'phase' in event:
print(f"\n[Phase: {event['phase']} - {event['status']}]")
Fehlerbehandlung
Bei der Verwendung der API sollten Sie eine geeignete Fehlerbehandlung implementieren.
async function chatWithErrorHandling(message, sessionId = null) {
try {
const params = new URLSearchParams();
params.append('message', message);
if (sessionId) {
params.append('sessionId', sessionId);
}
const response = await fetch('/api/v1/chat', {
method: 'POST',
body: params
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'API request failed');
}
const result = await response.json();
if (result.status === 'error') {
throw new Error(result.message);
}
return result;
} catch (error) {
console.error('Chat API error:', error);
throw error;
}
}
Rate Limiting
Für die Chat API gelten Rate Limits.
Standardeinstellungen:
10 Anfragen pro Minute
Bei Überschreitung des Rate Limits wird HTTP 429 zurückgegeben.
Für Rate-Limit-Konfiguration siehe AI-Modus-Funktion konfigurieren.
Sicherheit
Sicherheitshinweise bei Verwendung der Chat API:
Authentifizierung: In der aktuellen Version ist keine Authentifizierung erforderlich, aber erwägen Sie in Produktionsumgebungen eine angemessene Zugriffskontrolle
Rate Limiting: Aktivieren Sie Rate Limiting zum Schutz vor DoS-Angriffen
Eingabevalidierung: Führen Sie auch clientseitig eine Eingabevalidierung durch
CORS: Überprüfen Sie bei Bedarf die CORS-Einstellungen
Referenzinformationen
AI-Modus-Funktion konfigurieren - AI-Modus-Funktionskonfiguration
Übersicht LLM-Integration - LLM-Integration Übersicht
KI-Chat-Suche - Endbenutzer-Chat-Suchanleitung
API-Übersicht - API-Übersicht