Guía paso a paso para implementar el Advisor Tool de Anthropic: calidad Opus, costo Sonnet
Aprende a implementar el patrón Executor+Advisor de Anthropic en Python: Sonnet corre el trabajo pesado y Opus asesora solo cuando importa. Con max_tokens=2048 reduces el output del advisor de ~5.000 a menos de 800 tokens, logrando calidad enterprise a una fracción del precio.
Cognitiva, agencia chilena de IA, monitorea de cerca cada feature de Anthropic que puede inclinar la balanza costo-calidad para pymes. El Advisor Tool —lanzado en beta en 2026— es uno de los más relevantes del año: permite que un modelo ejecutor rápido y barato consulte a un advisor más inteligente solo cuando lo necesita, todo dentro de una sola llamada a la API. El ángulo que más importa para equipos con presupuesto acotado no es el patrón en sí, sino la palanca de optimización que viene incorporada: el parámetro max_tokens a nivel de herramienta. Según los datos publicados en la documentación oficial de Anthropic, dejarlo sin configurar puede generar entre 4.200 y 5.900 tokens de output del advisor por llamada. Fijarlo en 2.048 reduce esa cifra a entre 630 y 840 tokens —una reducción de aproximadamente 7 veces— con truncación cercana a cero y sin degradación de calidad medible en los benchmarks internos de Anthropic. En esta guía construirás un agente de codificación funcional en Python paso a paso: prerrequisitos, instalación, configuración base, optimización de costo, manejo de conversaciones multi-turno y un caso real. Al final tendrás un sistema operativo que aprovecha la inteligencia de Opus al costo de Sonnet.
Qué es el Advisor Tool y por qué importa el costo
El Advisor Tool es un tipo especial de herramienta del API de Anthropic que conecta dos modelos en una sola solicitud: un executor (el modelo principal, como Sonnet) y un advisor (un modelo más potente, como Opus). El executor decide cuándo llamar al advisor; cuando lo hace, Anthropic corre un sub-inference del advisor con el transcript completo de la conversación y devuelve su consejo al executor —sin que tu código haga una llamada adicional.
El patrón es especialmente útil en tareas de largo aliento: agentes de codificación, pipelines de investigación multi-paso o computer use, donde la mayoría de los turnos son mecánicos pero tener un plan excelente al inicio marca la diferencia.
El problema del costo sin configurar
Sin ninguna restricción, el advisor genera entre 4.200 y 5.900 tokens por llamada en tareas de razonamiento complejo —incluyendo thinking interno— facturados a la tarifa de Opus. Eso anula gran parte del ahorro de usar Sonnet como executor. La solución es directa: el parámetro max_tokens a nivel de herramienta.
| max_tokens | Output medio (tokens) | Llamadas truncadas |
|---|---|---|
| Sin configurar | ~4.200 a 5.900 | N/A |
| 2048 (recomendado) | ~630 a 840 | ~0% |
| 1024 (mínimo) | ~370 a 480 | ~10% |
Prerrequisitos
Antes de empezar, necesitas lo siguiente:
- Cuenta en Anthropic Platform con acceso a la API (platform.anthropic.com).
- Python 3.9 o superior instalado en tu computador.
- La SDK oficial de Anthropic para Python en su versión más reciente, que incluye soporte para la beta del Advisor Tool.
- Variable de entorno ANTHROPIC_API_KEY configurada.
- Acceso a claude-sonnet-4-6 y claude-opus-4-8 en tu cuenta (el advisor requiere claude-opus-4-7 o claude-opus-4-8 según la tabla de compatibilidad oficial).
El Advisor Tool está disponible en el API de Claude y en Claude Platform en AWS. No está disponible en AWS Bedrock, Vertex AI ni Microsoft Foundry al momento de publicar esta guía.
Instalación del SDK
pip install anthropic --upgrade
# Verifica la versión instalada
python3 -c "import anthropic; print(anthropic.__version__)"Implementación base: el patrón Executor+Advisor
El ejemplo completo a continuación muestra un agente de codificación que usa Sonnet como executor y Opus como advisor, con max_tokens=2048 activado para controlar el costo del advisor.
import anthropic
import os
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
# Definicion de la herramienta advisor con max_tokens optimizado
ADVISOR_TOOL = {
"type": "advisor_20260301",
"name": "advisor",
"model": "claude-opus-4-8",
"max_tokens": 2048, # Reduce output de ~5000 a <800 tokens
"max_uses": 3, # Limite por solicitud
}
SYSTEM_PROMPT = """Eres un agente de codificacion experto.
Tienes acceso a una herramienta advisor respaldada por un modelo mas potente.
Llama al advisor ANTES de trabajo sustantivo: antes de escribir codigo,
antes de comprometerte con una arquitectura, antes de declarar que terminaste.
"""
def ejecutar_tarea_codificacion(tarea: str) -> str:
"""Ejecuta una tarea de codificacion con el patron Executor+Advisor."""
messages = [
{"role": "user", "content": tarea}
]
response = client.beta.messages.create(
model="claude-sonnet-4-6", # executor
max_tokens=4096,
betas=["advisor-tool-2026-03-01"],
system=SYSTEM_PROMPT,
tools=[ADVISOR_TOOL],
messages=messages,
)
# Extraer el texto final del response
resultado = ""
for bloque in response.content:
if bloque.type == "text":
resultado += bloque.text
return resultado
# Uso
tarea = "Implementa un rate limiter en Python con el algoritmo token bucket."
respuesta = ejecutar_tarea_codificacion(tarea)
print(respuesta)Qué ocurre internamente
Cuando el executor invoca el advisor, Anthropic corre una inferencia separada del advisor pasándole el transcript completo. El advisor no tiene herramientas propias y sus bloques de thinking se descartan antes de retornar su consejo. Todo ocurre dentro de una sola llamada a /v1/messages: no hay round-trips adicionales desde tu código.
Optimización de costo: max_tokens en detalle
El parámetro max_tokens a nivel de herramienta es el control más efectivo para reducir el costo del advisor. Dos puntos clave que la documentación oficial detalla:
- El top-level max_tokens del request aplica solo al executor, NO al advisor. El advisor puede generar su output sin este límite a menos que configures max_tokens en la definición de la herramienta.
- El valor mínimo permitido es 1024. Si superas el cap del modelo advisor, recibes un error 400.
- Con max_tokens=2048, la truncación es cercana a cero según benchmarks internos de Anthropic (n=40 configuraciones en razonamiento complejo).
- Con max_tokens=1024, la truncación llega al ~10% de las llamadas: úsalo solo si el presupuesto es crítico y el advisor da consejos cortos.
Técnica complementaria: instrucción en prosa al advisor
Para sesgar al advisor hacia respuestas más breves sin un hard ceiling, puedes agregar una instrucción en el mensaje del usuario que el advisor leerá directamente. Anthropic probó este enfoque y encontró que además aumenta la tasa de consultas:
# Agrega esta linea al inicio del mensaje del usuario
NUDGE_ADVISOR = (
"(Advisor: mantén tu orientacion en menos de 80 palabras. "
"Necesito un punto de partida concreto, no un plan exhaustivo.)"
)
mensaje_con_nudge = NUDGE_ADVISOR + "\n\n" + tareaUsa esta técnica junto con max_tokens=2048 para el mejor ratio costo-calidad. Si necesitas un techo garantizado, usa max_tokens solo.
Conversaciones multi-turno
Un agente de codificación real necesita mantener contexto entre turnos. El punto crítico: debes incluir los bloques advisor_tool_result en el historial de mensajes que envías al API en cada turno. Si omites el advisor de tools en un turno posterior mientras el historial tiene esos bloques, recibirás un error 400.
import anthropic
import os
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
ADVISOR_TOOL = {
"type": "advisor_20260301",
"name": "advisor",
"model": "claude-opus-4-8",
"max_tokens": 2048,
"max_uses": 3,
}
def agente_multi_turno(mensajes_iniciales: list, max_turnos: int = 10):
"""Agente con soporte multi-turno y conteo de llamadas al advisor."""
messages = list(mensajes_iniciales)
llamadas_advisor = 0
LIMITE_ADVISOR_GLOBAL = 6 # cap de conversacion
for turno in range(max_turnos):
# Determinar si el advisor sigue activo
tools_activos = [ADVISOR_TOOL] if llamadas_advisor < LIMITE_ADVISOR_GLOBAL else []
response = client.beta.messages.create(
model="claude-sonnet-4-6",
max_tokens=4096,
betas=["advisor-tool-2026-03-01"],
tools=tools_activos,
messages=messages,
)
# Incluir el response completo, con advisor_tool_result
messages.append({"role": "assistant", "content": response.content})
# Contar llamadas al advisor
for bloque in response.content:
if hasattr(bloque, 'type') and bloque.type == "server_tool_use" and bloque.name == "advisor":
llamadas_advisor += 1
if response.stop_reason == "end_turn":
break
return messages, llamadas_advisor
# Ejemplo de uso
conversacion_inicial = [
{"role": "user", "content": "Crea una clase Python para manejar reintentos con backoff exponencial."}
]
mensajes, total_advisor = agente_multi_turno(conversacion_inicial)
print(f"Llamadas al advisor en esta conversacion: {total_advisor}")Cuándo habilitar caché del advisor
El advisor soporta un parámetro caching opcional: actívalo solo si esperas 3 o más llamadas al advisor en una misma conversación. Con dos o menos llamadas, el costo de escritura supera el ahorro de lectura.
Manejo de errores y casos borde
El advisor puede fallar sin que falle la solicitud completa: si ocurre un error en el sub-inference del advisor, el executor recibe un bloque advisor_tool_result_error y continúa sin consejo. Los códigos de error que debes conocer:
- max_uses_exceeded: el executor intentó llamar al advisor más veces del límite max_uses configurado.
- too_many_requests: el sub-inference del advisor fue rate-limited. Los límites del advisor se comparten con las llamadas directas al modelo advisor.
- prompt_too_long: el transcript excedió la ventana de contexto del advisor.
- overloaded: límite de capacidad del advisor. El executor continúa sin consejo.
- execution_time_exceeded: el sub-inference del advisor tardó demasiado.
# Deteccion de consejo truncado: monitorear stop_reason
def analizar_response_advisor(response):
for bloque in response.content:
if hasattr(bloque, 'type') and bloque.type == "advisor_tool_result":
contenido = bloque.content
if hasattr(contenido, 'stop_reason'):
if contenido.stop_reason == "max_tokens":
print("[AVISO] El advisor fue truncado. Considera aumentar max_tokens.")
elif contenido.stop_reason == "end_turn":
print("[OK] El advisor completo su orientacion sin truncacion.")
# Detectar error
if hasattr(contenido, 'type') and contenido.type == "advisor_tool_result_error":
print(f"[ERROR] Advisor fallo con: {contenido.error_code}")
return responseCon max_tokens=2048, el campo stop_reason vendrá como end_turn en la mayoría de las llamadas. Si ves max_tokens frecuentemente, considera subir el límite o revisar la complejidad de las tareas.
Caso de uso completo: agente de revisión de código
El siguiente ejemplo integra todo lo anterior en un agente de revisión de código productivo: recibe un archivo Python, lo analiza con Sonnet y consulta a Opus en los puntos críticos de decisión.
import anthropic
import os
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
SYSTEM_AGENTE_REVISION = """Eres un revisor de codigo experto en Python.
Revisa el codigo del usuario identificando:
1. Bugs concretos (con numero de linea)
2. Problemas de seguridad (inyeccion, secretos expuestos)
3. Problemas de rendimiento criticos
4. Sugerencias de refactor si hay duplicacion obvia
ANTES de emitir tu revision final, llama al advisor para validar
que no omitiste ningun vector de seguridad importante.
"""
ADVISOR_CONFIG = {
"type": "advisor_20260301",
"name": "advisor",
"model": "claude-opus-4-8",
"max_tokens": 2048,
"max_uses": 2,
}
def revisar_codigo(codigo_fuente: str) -> dict:
"""Revisa codigo Python con el patron Executor+Advisor."""
# Instruccion al advisor embebida en el mensaje
nudge_advisor = (
"(Advisor: mantén el analisis en menos de 100 palabras. "
"Prioriza vectores de seguridad que el revisor pudo omitir.)"
)
messages = [{
"role": "user",
"content": nudge_advisor + "\n\nRevisa este codigo:\n\n" + codigo_fuente
}]
response = client.beta.messages.create(
model="claude-sonnet-4-6",
max_tokens=4096,
betas=["advisor-tool-2026-03-01"],
system=SYSTEM_AGENTE_REVISION,
tools=[ADVISOR_CONFIG],
messages=messages,
)
# Separar texto final y metadata de uso
texto_revision = ""
for bloque in response.content:
if hasattr(bloque, 'text'):
texto_revision += bloque.text
# Extraer tokens del advisor desde iterations
tokens_advisor = 0
for it in response.usage.iterations:
if it.get("type") == "advisor_message":
tokens_advisor += it.get("output_tokens", 0)
return {
"revision": texto_revision,
"tokens_executor": response.usage.output_tokens,
"tokens_advisor": tokens_advisor,
}
# Codigo de ejemplo a revisar
codigo_a_revisar = """
import sqlite3
def get_user(username):
conn = sqlite3.connect('usuarios.db')
query = "SELECT * FROM users WHERE username = '" + username + "'"
return conn.execute(query).fetchone()
"""
resultado = revisar_codigo(codigo_a_revisar)
print("=== REVISION ===")
print(resultado["revision"])
print(f"\nTokens executor: {resultado['tokens_executor']}")
print(f"Tokens advisor (Opus): {resultado['tokens_advisor']}")Este ejemplo muestra la vulnerabilidad de inyección SQL clásica: el agente la detectará y, con la llamada al advisor, Opus validará que no haya otros vectores de seguridad omitidos. Los tokens del advisor quedan separados en usage.iterations para que puedas construir tu propio tracking de costos.
Resumen: cuándo usar el Advisor Tool y cuándo no
El patrón Executor+Advisor tiene valor real en los escenarios donde el planificador marca la diferencia: agentes de codificación, pipelines de investigación multi-paso y tareas con decisiones de arquitectura no obvias. No tiene valor en tareas de un solo turno (Q&A simple) ni en workloads donde cada turno genuinamente requiere la capacidad completa del modelo advisor.
- Usa Sonnet executor + Opus advisor para tareas complejas donde hoy usas Sonnet solo: obtienes un lift de calidad a costo similar o menor.
- Usa Haiku executor + Opus advisor si necesitas el menor costo posible con un salto de inteligencia: más caro que Haiku solo, pero más barato que mover el executor a Sonnet.
- Siempre configura max_tokens=2048 como punto de partida: reduce el output del advisor ~7 veces con truncación cercana a cero.
- Habilita caching del advisor solo si esperas 3 o más llamadas por conversación.
- Para workloads mixtos (codificación + lookup), evalúa en tu propio dataset antes de comprometerte con un max_uses fijo.
Para pymes chilenas que ya pagan por Sonnet en sus agentes de automatización, el Advisor Tool es la forma más directa de subir el techo de calidad sin cambiar de modelo principal.
Implementar el Advisor Tool de Anthropic con optimización de costo
Paso a paso para crear un agente Python con el patrón Executor+Advisor, configurando max_tokens=2048 para reducir el costo del advisor aproximadamente 7 veces sin pérdida de calidad.
Prerrequisitos e instalación
Configuración del Advisor Tool
Primera llamada con beta header
Multi-turno y manejo de errores
Preguntas frecuentes
Da el siguiente paso
Hablemos
Cuéntanos sobre tu negocio. Respondemos en 24 horas.
Otros canales
Escríbenos por WhatsApp o agenda una llamada de 30 minutos.