El panorama de la IA para código, brevemente
Cursor, Aider, Cline, Continue.dev, el propio Claude Code: todos se apoyan en los mismos tres o cuatro LLM de vanguardia. La diferencia no está en el modelo, sino en el ciclo agéntico que lo rodea, la indexación de archivos, la aplicación de diferencias y la experiencia de usuario. Si está construyendo uno de estos productos (o un copiloto de programación dentro de su propio producto para desarrolladores), esta página muestra el menú de modelos, la realidad de los costes y el presupuesto de latencia.
Menú de modelos para flujos de trabajo de código
- Claude Haiku 4.5 (
claude-haiku-4-5) — autocompletado (~$0.0001-0.0005 por completado). El ganador en latencia; tiempo hasta el primer token mediante streaming comparable al de llamar directamente al proveedor - Claude Sonnet 5 (
claude-sonnet-5) — chat con la base de código, ediciones en varios archivos y ciclos agénticos. El caballo de batalla al nivel de Cursor, a $1.40 / $7.00 por 1M - Claude Opus 5 (
claude-opus-5) — revisión profunda, crítica de arquitectura y auditoría de seguridad. Más lento (P50 ~3s), pero el razonador más potente, a $3.50 / $17.50 por 1M - GPT-5.6 Sol (
gpt-5-6-sol) — modelo de OpenAI ajustado para código: calidad comparable, preferencias estilísticas diferentes
Los dos flujos principales
import json
from openai import OpenAI
client = OpenAI(api_key="sk-kn-...", base_url="https://api.kunavo.com/v1")
# Code completion (autocomplete-as-you-type)
def complete(file_content: str, cursor_offset: int, file_path: str) -> str:
before = file_content[:cursor_offset]
after = file_content[cursor_offset:]
resp = client.chat.completions.create(
model="claude-haiku-4-5", # FAST for IDE latency
messages=[
{"role": "system", "content": (
"Complete the code at the cursor. Output ONLY the inserted "
"text — no markdown, no explanation."
)},
{"role": "user", "content": (
f"<file path=\"{file_path}\">\n{before}<CURSOR>{after}\n</file>"
)},
],
max_tokens=200,
stop=["<CURSOR>", "</file>"],
)
return resp.choices[0].message.content
# Code review (heavier model). Claude enforces a json_schema
# response_format; json_object it does not.
REVIEW = {
"type": "object",
"properties": {
"comments": {"type": "array", "items": {
"type": "object",
"properties": {"file": {"type": "string"},
"line": {"type": "integer"},
"comment": {"type": "string"}},
"required": ["file", "line", "comment"],
"additionalProperties": False,
}},
"verdict": {"type": "string", "enum": ["approve", "request_changes"]},
},
"required": ["comments", "verdict"],
"additionalProperties": False,
}
def review(diff: str, conventions: str) -> dict:
resp = client.chat.completions.create(
model="claude-opus-5",
messages=[
{"role": "system", "content": [{
"type": "text",
"text": conventions, # team style guide, security policy
"cache_control": {"type": "ephemeral"},
}]},
{"role": "user", "content": f"Review this diff.\n\n{diff}"},
],
response_format={"type": "json_schema",
"json_schema": {"name": "review", "schema": REVIEW}},
max_tokens=2000,
)
return json.loads(resp.choices[0].message.content)Presupuesto de latencia por función
- Autocompletado en línea: TTFT debe ser <200ms. Claude Haiku 4.5. Transmita la salida y aborte al mover el cursor
- Chat con la base de código: TTFT <500ms es aceptable. Sonnet + streaming. Muestre la respuesta mientras se genera
- Edición/refactorización en varios archivos: 5-30s es normal. Muestre el progreso, ejecútelo en segundo plano y muestre la diferencia para su revisión
- Revisión de PR: 10-60s es aceptable. Opus realiza el análisis profundo; dé formato de comentarios accionables
Economía de costes de un producto de código
Consumo realista por desarrollador y por mes (usuario intensivo):
- ~500 completados/día × Haiku ~$0.0003 = $0.15/día = $4-5/mes
- ~30 sesiones de chat/día × Sonnet ~$0.05 = $1.50/día = $30-45/mes
- ~3 revisiones de PR/semana × Opus ~$0.30 = $1/semana = $4/mes
- Usuario intensivo: ~$40-55/mes en costes de API
- Usuario medio: ~$10-15/mes
La mayoría de los productos de IA para código cobran $20/usuario/mes; hay margen, pero es reducido con usuarios intensivos. El almacenamiento en caché de prompts es esencial: el contexto del espacio de trabajo (estructura de archivos, convenciones y archivos recientes) va en la caché; en cada llamada solo está fresco el contexto de edición inmediato. Ahorra un 50-70 % en las entradas. Cómo configurar la caché.
Patrones arquitectónicos que puede copiar
- Prompting FIM (Fill-in-Middle): en lugar de «completar desde aquí», pase
before<CURSOR>afterpara que el modelo use ambos lados - Secuencias de detención:
stop=["<CURSOR>", "</file>", "```\n"]evita que el modelo invente contenido más allá del completado solicitado - Uso de herramientas para ediciones en varios archivos: no pida al modelo que genere 5 archivos en una sola respuesta. Use
tools=[{name: 'edit_file', ...}]para que produzca ediciones estructuradas que pueda aplicar atómicamente - Decodificación especulativa mediante streaming: muestre los primeros ~50 tokens en cuanto lleguen; los usuarios elegirán el adecuado incluso antes de que termine la respuesta completa
Cambiar de proveedor en segundos
Kunavo es compatible con el protocolo de OpenAI. Si creó su asistente con el SDK de OpenAI, cambie base_url y tendrá acceso a Claude y GPT con el mismo código. Consulte Llamar a Claude con el SDK de OpenAI para la migración.
Empiece en: /app/signup — pago por uso desde una recarga de $10 (~30.000 llamadas de autocompletado); el saldo nunca caduca. Referencia del endpoint en /docs/chat y API de Messages nativa de Anthropic en /docs/messages.
Preguntas frecuentes
What does a heavy user of an AI coding assistant cost in API spend?
Roughly $40–55 per month against $20-per-user pricing. That margin only works because prompt caching cuts input cost by 50–70%.
Which model fits which coding-assistant surface?
Inline autocomplete needs time-to-first-token under 200ms, which points to Claude Haiku 4.5. Chat-with-codebase needs under 500ms, which is Claude Sonnet 4.6. PR review tolerates 10–60 seconds, so Claude Opus 4.7 fits there.
How should autocomplete prompts be formatted?
Use Fill-in-Middle prompting: format the request as before<CURSOR>after so the model sees both sides of the caret, and set stop=['<CURSOR>', '</file>'] to prevent overflow.
How should an assistant handle multi-file edits?
Pass a tool definition such as tools=[{name:'edit_file', ...}] and apply the edits atomically, rather than asking the model to dump several whole files into one response.