Integraciones · LangChain
Acceso seguro a la base de datos para tus agentes de LangChain
No entregues SQL en bruto a un agente de LangChain. Que lea a través de una capa de recuperación acotada y de solo lectura, y envía cada INSERT, UPDATE o DELETE que proponga a una comprobación allow/deny antes de que tu código ejecute la sentencia.
Con Claix son dos llamadas HTTP desde tus herramientas: Retrieve para lecturas y Guard para escrituras. Compatible con LangGraph, MCP y A2A.
De un vistazo
Qué necesitas en LangChain
| Qué necesitas | Qué usar en LangChain | Endpoint Claix |
|---|---|---|
| Respuestas desde datos en vivo | Herramienta propia (o MCP) que hace POST a Retrieve | POST /retrieve/{agent_name} |
| Escrituras seguras | Acción con nombre: monta SQL → Guard → ejecuta si allow | POST /check-sql |
| Saber qué pasó | Trazas Claix + webhooks de alerta | Guard Traces |
| Parada de emergencia | Script de ops o herramienta de admin | POST /agents/pause/{agent_id} |
El problema
Por qué una credencial de base de datos no basta
Un agente de LangChain con herramientas decide qué herramienta llamar y con qué argumentos. Si una de ellas es un SQL toolkit, un helper tipo SQLDatabaseChain o un motor con permisos de escritura, el modelo puede enviar cualquier sentencia que esa credencial permita.
Un system prompt que diga que nunca borre nada es una petición al modelo, no una restricción sobre la base de datos. El control tiene que estar fuera del modelo y dar siempre la misma respuesta.
Comparativa
Cuatro formas de conectar un agente LangChain a una base de datos
| Enfoque | ¿Puede cambiar datos? | ¿Tablas/columnas acotadas? | ¿Respuestas tipadas? | ¿Reglas de escritura? | Auditoría |
|---|---|---|---|---|---|
| SQL toolkit (lectura/escritura) | Todo lo que el rol permita | Solo GRANTs manuales | No | Solo el prompt | Logs de tu app |
| SQL toolkit (solo lectura) | No | GRANTs manuales | No | N/A | Logs de tu app |
| MCP genérico de base de datos | Depende | Depende | Depende | Depende | Depende |
| Claix Retrieve + Guard | Solo tras allow | Por ruta y agente | Sí | Reglas en lenguaje natural | Trazas completas |
Cómo funciona
Qué hace Claix por tu agente de LangChain
Retrieve (lecturas)
Conecta cualquier base SQL con un rol de solo lectura. Define rutas y agentes. Tu herramienta de LangChain pregunta en lenguaje natural; Claix responde dentro del perímetro que marques—valores tipados para el siguiente paso del grafo.
Guard (escrituras)
Escribes reglas en lenguaje natural. Cuando el agente propone un cambio, tu herramienta llama primero a Guard. Claix decide; tu código ejecuta. Ningún modelo decide en el momento de la comprobación.
Trazas
Cada consulta y cada veredicto quedan registrados, con webhooks opcionales cuando algo se bloquea.
Configuración
Conecta tu base de datos a LangChain con Claix
Expón acciones con nombre, no SQL libre. El modelo solo rellena parámetros; tu código controla auth, plantillas y ejecución.
- 01
Dale a Claix un rol de solo lectura
Crea un rol con SELECT en las tablas que el agente necesita. Conéctalo para que Claix redacte el Data Map.
- 02
Crea una ruta y un agente
Elige tablas y columnas, escribe una guía corta, adjunta la ruta y usa el modo razonado para respuestas tipadas.
- 03
Guarda la API key fuera del prompt
Variable de entorno o gestor de secretos como x-api-key (o Bearer). Nunca en el system prompt ni en la descripción de la herramienta.
- 04
Añade una herramienta Retrieve
Un @tool de LangChain que haga POST a /retrieve/{agent_name}. El modelo solo rellena la pregunta.
- 05
Escribe reglas de Guard
Por ejemplo: los agentes pueden cambiar el estado de una reserva pero nunca borrarla; ninguna sentencia puede cambiar más de 5 filas.
- 06
Monta una herramienta de escritura con Guard
Solo acciones con nombre: monta una sentencia parametrizada, POST /check-sql, ejecuta solo si allowed es true.
- 07
Alertas y kill switch
Engancha los webhooks de denegación a tu notificador. Pausa con POST /agents/pause/{agent_id}. Limita consultas correctas por periodo.
Retrieve
Una herramienta Retrieve que el modelo puede llamar
El modelo solo rellena la pregunta; tu código controla la URL, la auth y el parseo. ¿Prefieres MCP? El mismo agente está disponible como claix.retrieve.ask.
import os
import httpx
from langchain_core.tools import tool
CLAIX_KEY = os.environ["CLAIX_API_KEY"]
RETRIEVE_URL = "https://claix.dev/retrieve/restaurant-ops"
@tool
def ask_database(question: str, format: str = "string") -> str:
"""Ask a question about live operational data."""
response = httpx.post(
RETRIEVE_URL,
headers={"x-api-key": CLAIX_KEY, "Content-Type": "application/json"},
json={"questions": [{"question": question, "format": format}]},
timeout=30.0,
)
response.raise_for_status()
answers = response.json().get("ia_response") or []
return str(answers[0] if answers else "")Guard
Una herramienta de escritura con Guard
Monta la sentencia desde una plantilla, compruébala y ejecuta solo si allow. Usa $1/$2 en Postgres y ? en MySQL/MariaDB. Devuelve el motivo de denegación al agente.
import os
import httpx
from langchain_core.tools import tool
CLAIX_KEY = os.environ["CLAIX_API_KEY"]
CHECK_URL = "https://claix.dev/check-sql"
def run_write(sql: str, params: list) -> dict:
check = httpx.post(
CHECK_URL,
headers={"x-api-key": CLAIX_KEY, "Content-Type": "application/json"},
json={"sql": sql, "params": params},
timeout=15.0,
)
check.raise_for_status()
verdict = check.json()
if verdict.get("allowed") is not True:
return {"ok": False, "reason": verdict.get("reason")}
# Only here: execute with your write credential
return {"ok": True, "decision_id": verdict.get("decision_id")}
@tool
def cancel_reservation(reservation_id: int) -> str:
"""Cancel one reservation by id. Never deletes rows."""
result = run_write(
"UPDATE reservations SET status = $1 WHERE id = $2",
["cancelled", reservation_id],
)
if not result["ok"]:
return f"Denied: {result.get('reason')}"
return f"Cancelled reservation {reservation_id}"Ejemplo
Un asistente de operaciones de restaurante
| Qué pide el usuario | Qué ocurre | Resultado |
|---|---|---|
| ¿Cuántas mesas hay reservadas esta noche? | Herramienta Retrieve con format int | Un número que el grafo puede usar |
| ¿Hay alguien de turno después de medianoche? | Retrieve con format boolean | true/false para el siguiente paso |
| Cancelar la reserva 4812 | Herramienta cancel_reservation → Guard | Permitido; luego corre tu escritura |
| Borrar todas las reservas del mes pasado | El agente no tiene DELETE libre | No puede; o Guard lo deniega |
Seguridad
Checklist para agentes LangChain con acceso a la base
Solo lectura para Claix
Usa un rol de solo lectura para la conexión de Claix.
Sin herramientas de SQL libre
Expón acciones con nombre y plantillas. Mantén la credencial de escritura fuera de la lista de herramientas del agente hasta después de Guard.
Cerrar en fallo
Ejecuta solo con HTTP 200 y allowed: true.
Secretos y límites
API key en env/secretos; una sentencia por comprobación; límites de llamadas y revisión regular de trazas.
Precios
Precios y un ejemplo de coste
Cada cuenta tiene 30 llamadas correctas al mes gratis, sin tarjeta. Solo pagas las llamadas correctas (HTTP 200).
| Retrieve · IA gestionada Claix | 0,10 € / pregunta |
|---|---|
| Retrieve · tu clave LLM (BYOK) | 0,02 € / pregunta |
| Guard | 0,01 € / comprobación |
| Enterprise | Self-hosted · a medida |
Ejemplo: 1.000 preguntas y 1.000 comprobaciones ≈ 100 € + 10 € con IA gestionada, o 20 € + 10 € con tu propia clave (antes de las 30 gratis y los tokens del proveedor).
Preguntas frecuentes
- ¿Cómo doy a un agente de LangChain acceso seguro a mi base de datos?
- Conecta la base a una capa controlada con un rol de solo lectura, expón solo tablas y columnas concretas con una herramienta Retrieve, y pasa cada escritura por una comprobación allow/deny antes de que tu código ejecute. Claix lo hace con dos llamadas HTTP desde tus herramientas.
- ¿Puede un agente de LangChain borrar mi base de datos?
- Puede si le das un SQL toolkit con permisos de borrado y confías en el prompt. Para evitarlo, usa un rol de solo lectura para lecturas, expón solo acciones de escritura con nombre y exige un veredicto allow de Guard antes de escribir.
- ¿Basta el SQL toolkit de LangChain?
- Un rol de solo lectura es una buena base. No acota columnas por agente sin GRANTs a mano, devuelve filas o texto sin tipar y no te da reglas para las escrituras que querrás permitir más adelante.
- ¿Claix sustituye a LangChain?
- No. Claix es una capa de recuperación controlada y de comprobación de escrituras que llamas desde LangChain, LangGraph, MCP o A2A. Tu framework de agentes se mantiene.
- ¿Claix ejecuta el INSERT, UPDATE o DELETE?
- No. Retrieve usa un rol de solo lectura y Guard solo responde si el cambio propuesto está permitido. Tu código de LangChain lo ejecuta.
- ¿Qué bases de datos admite?
- Cualquier base SQL, incluidos Postgres, MySQL y MariaDB, y entornos compatibles con Postgres como Supabase.
- ¿Puedo usar mi propia clave de LLM?
- Sí. Con tu clave de OpenAI, Google, Anthropic o xAI, la tarifa de Claix baja de 0,10 € a 0,02 € por pregunta y pagas al proveedor directamente.
- ¿Puedo hospedarlo yo?
- El self-hosting está disponible en el plan Enterprise.
Conecta Claix a tu agente de LangChain
Lecturas acotadas, escrituras comprobadas, trazas y pausa. Treinta llamadas correctas al mes gratis—suficiente para probar el flujo completo.