Integraci贸n con otras herramientas
9Router es compatible con cualquier herramienta que soporte el formato de API de OpenAI. Esta gu铆a cubre patrones de integraci贸n gen茅ricos para varias herramientas y aplicaciones personalizadas.
Resumen
9Router proporciona un endpoint de API compatible con OpenAI que funciona con:
- Scripts y aplicaciones personalizadas
- Clientes de API y herramientas de testing
- Herramientas CLI y utilidades
- Integraciones de terceros
- Frameworks de desarrollo
Patr贸n de configuraci贸n gen茅rico
Cualquier herramienta compatible con OpenAI puede conectarse a 9Router usando estas configuraciones:
9Router local:
Base URL: http://localhost:20128/v1
API Key: your-api-key-from-dashboard
Model: cualquier modelo de 9Router (cc/*, cx/*, glm/*, etc.)
9Router en la nube:
Base URL: https://9router.com/v1
API Key: your-api-key-from-dashboard
Model: cualquier modelo de 9Router (cc/*, cx/*, glm/*, etc.)
Modelos disponibles
Modelos Claude (Anthropic)
cc/claude-opus-4-5-20251101cc/claude-sonnet-4-20250514cc/claude-haiku-4-20250514
Modelos DeepSeek
cx/deepseek-chatcx/deepseek-reasoner
Modelos GLM (Zhipu AI)
glm/glm-4-plusglm/glm-4-flash
Ejemplos de integraci贸n
Python con OpenAI SDK
from openai import OpenAI
client = OpenAI(
api_key="your-api-key-from-dashboard",
base_url="http://localhost:20128/v1"
)
response = client.chat.completions.create(
model="cc/claude-sonnet-4-20250514",
messages=[
{"role": "user", "content": "Hello, how are you?"}
]
)
print(response.choices[0].message.content)
Node.js con OpenAI SDK
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "your-api-key-from-dashboard",
baseURL: "http://localhost:20128/v1"
});
const response = await client.chat.completions.create({
model: "cc/claude-sonnet-4-20250514",
messages: [
{ role: "user", content: "Hello, how are you?" }
]
});
console.log(response.choices[0].message.content);
Comando cURL
curl http://localhost:20128/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key-from-dashboard" \
-d '{
"model": "cc/claude-sonnet-4-20250514",
"messages": [
{"role": "user", "content": "Hello, how are you?"}
]
}'
Cliente HTTP (Postman, Insomnia)
Solicitud:
POST http://localhost:20128/v1/chat/completions
Headers:
Content-Type: application/json
Authorization: Bearer your-api-key-from-dashboard
Body:
{
"model": "cc/claude-sonnet-4-20250514",
"messages": [
{"role": "user", "content": "Hello, how are you?"}
],
"temperature": 0.7,
"max_tokens": 1000
}
Integraci贸n con LangChain
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
llm = ChatOpenAI(
model_name="cc/claude-sonnet-4-20250514",
openai_api_key="your-api-key-from-dashboard",
openai_api_base="http://localhost:20128/v1",
temperature=0.7
)
messages = [HumanMessage(content="Explain quantum computing")]
response = llm(messages)
print(response.content)
Integraci贸n con LlamaIndex
from llama_index.llms import OpenAI
llm = OpenAI(
model="cc/claude-sonnet-4-20250514",
api_key="your-api-key-from-dashboard",
api_base="http://localhost:20128/v1"
)
response = llm.complete("What is machine learning?")
print(response.text)
Ejemplos de scripts personalizados
Script de procesamiento por lotes
import openai
import json
openai.api_key = "your-api-key-from-dashboard"
openai.api_base = "http://localhost:20128/v1"
def process_batch(prompts, model="cx/deepseek-chat"):
results = []
for prompt in prompts:
response = openai.ChatCompletion.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
results.append({
"prompt": prompt,
"response": response.choices[0].message.content
})
return results
prompts = [
"Explain AI in one sentence",
"What is machine learning?",
"Define neural networks"
]
results = process_batch(prompts)
print(json.dumps(results, indent=2))
Manejador de respuestas streaming
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "your-api-key-from-dashboard",
baseURL: "http://localhost:20128/v1"
});
async function streamResponse(prompt) {
const stream = await client.chat.completions.create({
model: "cc/claude-sonnet-4-20250514",
messages: [{ role: "user", content: prompt }],
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
process.stdout.write(content);
}
}
streamResponse("Write a short story about AI");
Comparaci贸n multi-modelo
from openai import OpenAI
client = OpenAI(
api_key="your-api-key-from-dashboard",
base_url="http://localhost:20128/v1"
)
models = [
"cc/claude-sonnet-4-20250514",
"cx/deepseek-chat",
"glm/glm-4-plus"
]
prompt = "Explain quantum computing in simple terms"
for model in models:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
print(f"\n=== {model} ===")
print(response.choices[0].message.content)
Patrones comunes de integraci贸n
Variables de entorno
Almacena credenciales de forma segura:
# .env file
ROUTER_API_KEY=your-api-key-from-dashboard
ROUTER_BASE_URL=http://localhost:20128/v1
ROUTER_MODEL=cc/claude-sonnet-4-20250514
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("ROUTER_API_KEY"),
base_url=os.getenv("ROUTER_BASE_URL")
)
Manejo de errores
from openai import OpenAI, OpenAIError
client = OpenAI(
api_key="your-api-key",
base_url="http://localhost:20128/v1"
)
try:
response = client.chat.completions.create(
model="cc/claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
except OpenAIError as e:
print(f"Error: {e}")
L贸gica de reintentos
import time
from openai import OpenAI, RateLimitError
client = OpenAI(
api_key="your-api-key",
base_url="http://localhost:20128/v1"
)
def chat_with_retry(prompt, max_retries=3):
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model="cc/claude-sonnet-4-20250514",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
except RateLimitError:
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # Exponential backoff
else:
raise
Soluci贸n de problemas
Problemas de conexi贸n
Problema: No se puede conectar a 9Router
# Verifica si 9Router est谩 corriendo
curl http://localhost:20128/health
# Respuesta esperada:
{"status": "ok"}
Soluci贸n:
- Verifica que 9Router est茅 corriendo
- Verifica que el puerto 20128 no est茅 bloqueado
- Aseg煤rate de tener la URL base correcta (incluir
/v1)
Errores de autenticaci贸n
Problema: 401 Unauthorized
Error: Invalid API key
Soluci贸n:
- Verifica la API key desde el dashboard
- Verifica el formato del header de Authorization:
Bearer your-api-key - Aseg煤rate de no tener espacios extras o saltos de l铆nea en la API key
Modelo no encontrado
Problema: 404 Model not found
Error: Model 'cc/claude-opus' not found
Soluci贸n:
- Usa el nombre exacto del modelo (sensible a may煤sculas)
- Verifica los modelos disponibles:
curl http://localhost:20128/v1/models - Verifica que el modelo est茅 habilitado en tu plan
Problemas de timeout
Problema: Request timeout
Error: Request timed out after 30s
Soluci贸n:
- Aumenta el timeout en la configuraci贸n del cliente
- Usa modelos m谩s r谩pidos para tareas sensibles al tiempo
- Verifica la conexi贸n de red a 9Router
Rate limiting
Problema: 429 Too Many Requests
Error: Rate limit exceeded
Soluci贸n:
- Implementa exponential backoff
- Reduce la frecuencia de solicitudes
- Verifica los l铆mites de tasa en el dashboard
- Considera actualizar tu plan
Mejores pr谩cticas
Seguridad
- Almacena las API keys en variables de entorno
- Nunca subas las API keys al control de versiones
- Usa HTTPS para despliegues en la nube
- Rota las API keys regularmente
Rendimiento
- Usa modelos apropiados para la complejidad de la tarea
- Implementa cach茅 para consultas repetidas
- Usa streaming para respuestas largas
- Agrupa solicitudes cuando sea posible
Manejo de errores
- Siempre implementa bloques try-catch
- Agrega l贸gica de reintento con exponential backoff
- Registra errores para debugging
- Proporciona mecanismos de fallback
Optimizaci贸n de costos
- Elige modelos costo-efectivos para tareas simples
- Cachea respuestas cuando sea apropiado
- Monitorea el uso en el dashboard
- Establece l铆mites de solicitudes en el c贸digo
Pr贸ximos pasos
- Configurar Cursor para integraci贸n con IDE
- Configurar Continue para VSCode
- Explorar uso de CLI
- Aprende sobre la selecci贸n de modelos
- Referencia de API