Descripcion general
La Chat API es una API RESTful para acceder programaticamente a la funcionalidad de modo IA de Fess. Permite obtener respuestas asistidas por IA basadas en resultados de busqueda.
Esta API proporciona dos endpoints:
API sin streaming: Obtiene la respuesta completa de una vez
API con streaming: Obtiene la respuesta en tiempo real en formato Server-Sent Events (SSE)
Requisitos previos
Para usar la Chat API, se requiere la siguiente configuracion:
La funcionalidad de modo IA debe estar habilitada (
rag.chat.enabled=true)El proveedor LLM debe estar configurado
Para el metodo de configuracion detallado, consulte Configuracion de la funcionalidad de modo IA.
API sin streaming
Endpoint
POST /api/v1/chat
Parametros de solicitud
| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
message | String | Si | Mensaje (pregunta) del usuario |
sessionId | String | No | ID de sesion. Especificar para continuar la conversacion |
clear | String | No | Especificar "true" para limpiar la sesion |
Respuesta
Exito (HTTP 200)
{
"status": "ok",
"sessionId": "abc123def456",
"content": "Fess es un servidor de busqueda de texto completo. Sus principales caracteristicas son...",
"sources": [
{
"title": "Descripcion general de Fess",
"url": "https://fess.codelibs.org/ja/overview.html"
},
{
"title": "Lista de funcionalidades",
"url": "https://fess.codelibs.org/ja/features.html"
}
]
}
Error
{
"status": "error",
"message": "Message is required"
}
Codigos de estado HTTP
| Codigo | Descripcion |
|---|---|
| 200 | Solicitud exitosa |
| 400 | Parametros de solicitud invalidos (mensaje vacio, etc.) |
| 404 | Endpoint no encontrado |
| 405 | Metodo HTTP no permitido (solo POST permitido) |
| 500 | Error interno del servidor |
Ejemplos de uso
cURL
# Iniciar nuevo chat
curl -X POST "http://localhost:8080/api/v1/chat" \
-d "message=Que es Fess?"
# Continuar conversacion
curl -X POST "http://localhost:8080/api/v1/chat" \
-d "message=Por favor explicame el metodo de instalacion" \
-d "sessionId=abc123def456"
# Limpiar sesion
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();
}
// Ejemplo de uso
const result = await chat('Por favor explicame las funcionalidades de Fess');
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()
# Ejemplo de uso
result = chat('Como instalo Fess?')
print(result['content'])
print(f"Session ID: {result['sessionId']}")
API con streaming
Endpoint
POST /api/v1/chat/stream
GET /api/v1/chat/stream
Parametros de solicitud
| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
message | String | Si | Mensaje (pregunta) del usuario |
sessionId | String | No | ID de sesion. Especificar para continuar la conversacion |
Formato de respuesta
La API con streaming devuelve respuestas en formato text/event-stream (Server-Sent Events).
Cada evento tiene el siguiente formato:
event: <nombre_evento>
data: <datos_JSON>
Eventos SSE
session
Notifica la informacion de sesion. Se envia al inicio del stream.
{
"sessionId": "abc123def456"
}
phase
Notifica el inicio/fin de las fases de procesamiento.
{
"phase": "intent_analysis",
"status": "start",
"message": "Analyzing user intent..."
}
{
"phase": "search",
"status": "start",
"message": "Searching documents...",
"keywords": "Fess instalacion"
}
{
"phase": "search",
"status": "complete"
}
Tipos de fase:
intent_analysis- Analisis de intencionsearch- Ejecucion de busquedaevaluation- Evaluacion de resultadosgeneration- Generacion de respuesta
chunk
Notifica fragmentos de texto generado.
{
"content": "Fess es"
}
sources
Notifica la informacion de los documentos de referencia.
{
"sources": [
{
"title": "Guia de instalacion",
"url": "https://fess.codelibs.org/ja/install.html"
}
]
}
done
Notifica la finalizacion del procesamiento.
{
"sessionId": "abc123def456",
"htmlContent": "<p>Fess es un servidor de busqueda de texto completo...</p>"
}
error
Notifica errores.
{
"phase": "generation",
"message": "LLM request failed"
}
Ejemplos de uso
cURL
curl -X POST "http://localhost:8080/api/v1/chat/stream" \
-d "message=Por favor explicame las caracteristicas de Fess" \
-H "Accept: text/event-stream" \
--no-buffer
JavaScript (EventSource)
function streamChat(message, sessionId = null) {
const params = new URLSearchParams();
params.append('message', message);
if (sessionId) {
params.append('sessionId', sessionId);
}
// Usar fetch para solicitudes POST
return fetch('/api/v1/chat/stream', {
method: 'POST',
body: params
}).then(response => {
const reader = response.body.getReader();
const decoder = new TextDecoder();
function read() {
return reader.read().then(({ done, value }) => {
if (done) return;
const text = decoder.decode(value);
const lines = text.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = JSON.parse(line.slice(6));
handleEvent(data);
}
}
return read();
});
}
return read();
});
}
function handleEvent(data) {
if (data.content) {
// Mostrar fragmento
document.getElementById('output').textContent += data.content;
} else if (data.phase) {
// Mostrar informacion de fase
console.log(`Phase: ${data.phase} - ${data.status}`);
} else if (data.sources) {
// Mostrar informacion de fuentes
console.log('Sources:', data.sources);
}
}
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
# Ejemplo de uso
for event in stream_chat('Por favor explicame las funcionalidades de Fess'):
if 'content' in event:
print(event['content'], end='', flush=True)
elif 'phase' in event:
print(f"\n[Phase: {event['phase']} - {event['status']}]")
Manejo de errores
Implemente un manejo de errores apropiado al usar la API.
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;
}
}
Limite de tasa
La Chat API tiene un limite de tasa aplicado.
Configuracion predeterminada:
10 solicitudes por minuto
Cuando se excede el limite de tasa, se devuelve un error HTTP 429.
Para la configuracion del limite de tasa, consulte Configuracion de la funcionalidad de modo IA.
Seguridad
Notas de seguridad al usar la Chat API:
Autenticacion: La version actual no requiere autenticacion para la API, pero considere un control de acceso apropiado en entornos de produccion
Limite de tasa: Habilite el limite de tasa para prevenir ataques DoS
Validacion de entrada: Realice validacion de entrada tambien del lado del cliente
CORS: Verifique la configuracion de CORS segun sea necesario
Informacion de referencia
Configuracion de la funcionalidad de modo IA - Configuracion de la funcionalidad de modo IA
Descripcion general de integracion LLM - Descripcion general de integracion LLM
Busqueda con chat de IA - Guia de busqueda con chat para usuarios finales
Descripción de la API - Descripcion general de API