¿Qué son los Cortex Agents?
Un Cortex Agent es un LLM que puede usar herramientas para completar tareas complejas de múltiples pasos:
- Recibe una pregunta o instrucción
- Decide qué herramienta usar (búsqueda, SQL, API)
- Ejecuta la herramienta
- Interpreta el resultado
- Decide el siguiente paso o responde
Herramientas disponibles
| Herramienta | Tipo | Para qué |
|---|---|---|
cortex_analyst_tool | Built-in | Texto → SQL sobre datos estructurados |
cortex_search_tool | Built-in | Búsqueda semántica sobre documentos |
sql_exec_tool | Built-in | Ejecutar SQL arbitrario |
| Python functions | Custom | Llamar APIs externas, calcular |
Crear un Agente
from snowflake.cortex.agents import CortexAgent
agente = CortexAgent(
session=session,
model="claude-3-5-sonnet",
tools=[
# Cortex Analyst para datos estructurados
{"type": "cortex_analyst", "semantic_model_file": "@stage/modelo.yaml"},
# Cortex Search para documentación
{"type": "cortex_search", "service": "busqueda_docs"},
],
instructions="""Eres un asistente de datos de ventas de LATAM.
Responde con datos precisos cuando sea posible.
Si no tienes información, dilo claramente."""
)
# Conversación multi-turno
respuesta = agente.run("¿Cuáles fueron las ventas de México en el Q3?")
print(respuesta.message)
# El agente recuerda el contexto
respuesta2 = agente.run("¿Y comparado con el Q2?")
print(respuesta2.message)
Ejemplo completo: Asistente de Análisis
import streamlit as st
from snowflake.snowpark.context import get_active_session
from snowflake.cortex.agents import CortexAgent
session = get_active_session()
@st.cache_resource
def get_agent():
return CortexAgent(
session=session,
model="claude-3-5-sonnet",
tools=[
{"type": "cortex_analyst", "semantic_model_file": "@models/ventas_model.yaml"},
{"type": "cortex_search", "service": "documentacion_busqueda"},
],
instructions="Eres un analista de ventas senior de LATAM. Responde en español."
)
agent = get_agent()
st.title("Asistente de Análisis LATAM")
if "history" not in st.session_state:
st.session_state.history = []
for msg in st.session_state.history:
with st.chat_message(msg["role"]):
st.markdown(msg["content"])
if prompt := st.chat_input("¿Qué quieres analizar?"):
st.session_state.history.append({"role": "user", "content": prompt})
with st.chat_message("assistant"):
with st.spinner("Analizando..."):
response = agent.run(prompt)
st.markdown(response.message)
st.session_state.history.append({"role": "assistant", "content": response.message})
Gestión de versiones y aliases
-- Crear un agente como objeto de Snowflake (alternativa declarativa)
CREATE CORTEX AGENT asistente_ventas
COMMENT = 'Agente de análisis de ventas LATAM'
AS $$
{
"model": "claude-3-5-sonnet",
"tools": [
{"type": "cortex_analyst", "semantic_model_file": "@stage/modelo.yaml"}
]
}
$$;
-- Versionar y crear alias
ALTER CORTEX AGENT asistente_ventas ADD VERSION v2 USING $$...$$;
ALTER CORTEX AGENT asistente_ventas SET DEFAULT VERSION = v2;
Casos de uso empresariales
- Analista de negocio que puede hacer preguntas sobre datos sin saber SQL
- Helpdesk automático que combina búsqueda en documentos + consulta de datos del cliente
- Asistente de FinOps que analiza costos y sugiere optimizaciones
- Monitor de alertas que explica anomalías en lenguaje natural