Esencial⏱ 25 minVS Code / Cursor

Creá un agente con herramientas

Ejecutar solo funciones permitidas.

datetime

🎯 Qué vas a lograr en esta lección

¿Qué problema vas a resolver?

Aprenderás a ejecutar solo funciones permitidas. La idea es partir de una necesidad concreta, no de memorizar código.

¿Qué vas a construir?

Tool Routing Agent: un proyecto pequeño para crear una aplicación que consulta documentos o usa herramientas. El nombre técnico identifica la carpeta del proyecto; no necesitás memorizarlo.

¿Por qué es útil?

Te ayuda a obtener respuestas basadas en información disponible y no solo en memoria del modelo.

¿Qué vas a aprender?

Practicarás fragmentos, búsqueda, fuentes, herramientas y aprobación humana. Cada término nuevo se explica antes de usarlo.

Tu primera acción

No instalés ni ejecutes nada todavía. Primero lee las palabras esenciales y observa el ejemplo pequeño. Después identificarás qué dato entra, qué instrucción trabaja y qué resultado aparece.

Avanza una parte a la vez

1
Aprende

Leé las palabras nuevas y el ejemplo pequeño.

2
Practica

Cambiá una sola cosa y ejecuta nuevamente.

3
Comprueba

Respondé las preguntas y usa las pistas cuando las necesites.

4
Cierra

Marcá el checklist y decide si continuar o tomar una pausa.

No necesitás entender toda la página de una vez. Termina una parte, haz una pausa breve y continúa cuando estés listo.
Parte 1

Aprende las palabras esenciales

Leé definiciones cortas y explica cada palabra con un ejemplo propio.

🧱 Conceptos esenciales explicados desde cero

Esta sección no es opcional. Presenta las palabras y procesos que necesitás para comprender el ejemplo. Leé una definición, observa el ejemplo y explícalo con una frase propia antes de avanzar.

agente

Qué significa: Sistema que selecciona herramientas o pasos para alcanzar un objetivo.

Para qué sirve: Permite encadenar decisiones y acciones controladas.

Ejemplo: Elegir entre buscar, calcular o solicitar aprobación.

Confusión frecuente: Un agente necesita límites; no debe tener permisos ilimitados.

herramienta

Qué significa: Función externa que un agente puede invocar.

Para qué sirve: Le permite actuar o consultar.

Ejemplo: search_docs().

Confusión frecuente: Debe limitarse con allowlist.

routing

Qué significa: Decisión sobre qué ruta o herramienta usar.

Para qué sirve: Dirige una solicitud.

Ejemplo: Pregunta documental→RAG.

Confusión frecuente: Debe tener fallback.

estado

Qué significa: Información actual de un sistema u objeto.

Para qué sirve: Determina comportamiento.

Ejemplo: pending/completed.

Confusión frecuente: Cambios deben controlarse.

allowlist

Qué significa: Lista explícita de acciones permitidas.

Para qué sirve: Reduce superficie de riesgo.

Ejemplo: Solo read/search.

Confusión frecuente: Es más segura que permitir todo.

Ejemplo mínimo de flujo RAG

Este ejemplo es deliberadamente pequeño. Su objetivo es mostrar las piezas básicas sin mezclar todavía toda la lógica del proyecto.

pregunta = "¿Cómo instalo el proyecto?"
fragmentos = buscar_documentos(pregunta)
respuesta = responder_con_fuentes(pregunta, fragmentos)
  1. Identificá los nombres nuevos: subraya variables, funciones, tipos, herramientas o pasos.
  2. Señala la entrada: qué dato recibe o qué valor ya está escrito.
  3. Señala el proceso: qué instrucción transforma, valida, consulta o calcula.
  4. Señala la salida: qué resultado puede verse o verificarse.
  5. Explícalo: completa “el programa recibe ___, hace ___ y entrega ___”.
No continués todavía si no podés explicar al menos tres términos y el flujo entrada → proceso → salida sin copiar el texto.

🧠 Conceptos explicados desde cero

No memoricés los nombres. Leé qué significa cada término, observa el ejemplo y trata de explicarlo con tus propias palabras.

tools

Qué significa: tools es un término técnico utilizado en esta lección.

Para qué sirve: Nombrar una parte específica del proceso de tools.

Ejemplo pequeño: Busca tools en el ejemplo y observa qué recibe y qué produce.

Confusión frecuente: No intentés memorizar el nombre: explicá primero su función con tus propias palabras.

routing

Qué significa: routing es un término técnico utilizado en esta lección.

Para qué sirve: Nombrar una parte específica del proceso de routing.

Ejemplo pequeño: Busca routing en el ejemplo y observa qué recibe y qué produce.

Confusión frecuente: No intentés memorizar el nombre: explicá primero su función con tus propias palabras.

allowlist

Qué significa: allowlist es un término técnico utilizado en esta lección.

Para qué sirve: Nombrar una parte específica del proceso de allowlist.

Ejemplo pequeño: Busca allowlist en el ejemplo y observa qué recibe y qué produce.

Confusión frecuente: No intentés memorizar el nombre: explicá primero su función con tus propias palabras.

arguments

Qué significa: arguments es un término técnico utilizado en esta lección.

Para qué sirve: Nombrar una parte específica del proceso de arguments.

Ejemplo pequeño: Busca arguments en el ejemplo y observa qué recibe y qué produce.

Confusión frecuente: No intentés memorizar el nombre: explicá primero su función con tus propias palabras.

Parte 2

Mirá un ejemplo pequeño

Primero comprende un ejemplo mínimo. Después observa el código completo.

Relacionar una pregunta con un documento

Observá únicamente tres cosas: qué dato existe, qué instrucción se ejecuta y qué resultado aparece.

document = "Python se usa para automatización."
question = "¿Para qué se usa Python?"
print(document, question)
Resultado explicado: RAG añade después búsqueda y generación; primero comprende documento y pregunta.

Antes de continuar, responde con tus palabras:

  1. ¿Qué dato recibe o ya tiene el ejemplo?
  2. ¿Qué instrucción realiza el trabajo?
  3. ¿Qué resultado podés observar?

⌨️ Código completo

from datetime import date

def today() -> str:
    return date.today().isoformat()

def total(values: list[float]) -> float:
    return round(sum(values),2)

tools = {"today":today,"total":total}

def run_tool(name: str,arguments: dict) -> object:
    if name not in tools:
        raise ValueError("Herramienta no permitida")
    return tools[name](**arguments)

print(run_tool("today",{}))
print(run_tool("total",{"values":[12.5,8,4.25]}))
Editar y ejecutar en el navegador

Hacé un cambio pequeño y ejecuta. Este entorno no modifica los archivos descargados.

Python todavía no cargado
El resultado aparecerá aquí.

🖼️ Explicación ilustrada: entrada → proceso → resultado

Piensa en una máquina sencilla: colocas algo en la entrada, la máquina aplica un proceso y entrega un resultado.

Situación

Una persona necesita resolver el problema de «crea un agente con herramientas».

Entrada

El programa recibe datos, instrucciones o archivos relacionados con microproyecto.

Proceso

El código valida la entrada, aplica reglas mediante funciones y prepara una respuesta.

Resultado

El usuario recibe un resultado visible que puede comprobar y comparar.

Ejemplo antes y después

Antes

Antes de ejecutar: solo tenemos datos y una necesidad.

Después

Después de ejecutar: tenemos un resultado producido por pasos identificables.

¿Cómo usarás este ejemplo en el mini proyecto?

Ahora practicarás con un mini proyecto. Primero observarás el ejemplo, después cambiarás una sola parte y finalmente explicarás el resultado.

1. ObservarVer el ejemplo
2. EntenderRelacionar datos y resultado
3. CambiarModificar una sola cosa
4. EjecutarComprobar el resultado
5. ExplicarDecir qué aprendiste

Regla: cambia una sola parte, ejecuta de nuevo y explica qué diferencia observaste. No necesitás reconstruir el proyecto completo.

Parte 3

Practica con un mini proyecto

Hacé un cambio pequeño, ejecuta el código y observa qué cambió.

🧩 Mini proyecto guiado: Creá un agente con herramientas

Completá estos ejercicios pequeños antes del desafío. Podés equivocarte: el sistema te explicará qué repasar y te dará una pista.

Paso 1

Reconoce una palabra nueva

En esta lección aparece tools. ¿Cuál es la mejor forma de aprenderlo?

Paso 2

Hacé un cambio seguro

Querés practicar con el código de Creá un agente con herramientas. ¿Qué cambio es mejor para comenzar?

Paso 3

Comprobá lo que ocurrió

Después de modificar un dato, ¿qué tenés que hacer para saber si aprendiste correctamente?

Paso 4

Tu mini proyecto

Tarea: abre el editor del navegador o el archivo completo. Cambiá un solo dato visible, ejecútalo y observa qué parte del resultado cambió.

Progreso del mini proyecto

Completá los cuatro pasos.

🧪 Error controlado

Solicita una herramienta inexistente y revisa el bloqueo.

🤖 Cursor

Explica este proyecto como tutor.
Describe entrada, procesamiento y salida.
Revisa una función por vez.
No cambies el código sin mi autorización.
Después hazme cinco preguntas.

🖥️ Cómo abrir y ejecutar este proyecto, paso a paso

¿Qué significa “ejecutar”?

Ejecutar un proyecto significa pedirle a Python que lea las instrucciones guardadas en sus archivos y realice el trabajo. No modifica tu computadora completa: trabaja dentro de la carpeta del proyecto.

En estas instrucciones utilizarás la terminal, una ventana donde escribís comandos. Un comando es una instrucción corta para la computadora.

Antes de comenzar, confirma estas cuatro cosas

  1. Descargaste y descomprimiste el proyecto. Un ZIP es una carpeta comprimida. Tenés que abrirlo para obtener una carpeta normal.
  2. Abriste la carpeta del proyecto. Dentro deberían aparecer archivos como main.py, requirements.txt y README.md.
  3. Python está instalado. Esto se prepara en el Nivel 00.
  4. La terminal está ubicada en esa carpeta. Si la terminal está en otra carpeta, Python no encontrará main.py.

Escoge únicamente tu sistema operativo

No ejecutés las dos rutas. Usá macOS si trabajás en una Mac o Windows si utilizás PowerShell.

macOS · Terminal zsh

  1. Abrí Terminal dentro de la carpeta del proyecto.

    Una forma sencilla es abrir la carpeta en Finder, escribir cd en Terminal, arrastrar la carpeta a la ventana y presionar Enter.

    pwd
    ls

    Resultado esperado: pwd muestra la ruta de la carpeta y ls muestra main.py.

  2. Creá el entorno virtual.
    python3 -m venv .venv

    python3 abre Python. -m venv pide crear un entorno virtual. .venv es el nombre de la nueva carpeta.

    Resultado esperado: aparece una carpeta llamada .venv. El comando puede terminar sin mostrar texto.

  3. Activá el entorno.
    source .venv/bin/activate

    Activar significa indicar que los siguientes comandos deben utilizar el Python privado del proyecto.

    Resultado esperado: la terminal suele mostrar (.venv) al inicio de la línea.

  4. Instalá las librerías del proyecto.
    python -m pip install -r requirements.txt

    python -m pip abre el instalador de librerías. -r requirements.txt le indica qué lista debe leer.

    Resultado esperado: aparecen mensajes de instalación o se indica que las librerías ya están instaladas.

  5. Ejecutá el archivo principal.
    python main.py

    Python abre main.py, lee sus instrucciones de arriba hacia abajo y muestra el resultado.

    Resultado esperado: verás el resultado descrito en la sección “Resultado” de esta lección.

Windows · PowerShell

  1. Abrí PowerShell dentro de la carpeta del proyecto.

    En el Explorador de archivos, abrí la carpeta, hacé clic en la barra de dirección, escribí powershell y presioná Enter.

    Get-Location
    dir

    Resultado esperado: Get-Location muestra la carpeta actual y dir muestra main.py.

  2. Creá el entorno virtual.
    python -m venv .venv

    python abre Python. -m venv crea el entorno y .venv es el nombre de la carpeta.

    Resultado esperado: aparece una carpeta llamada .venv.

  3. Activá el entorno.
    .venv\Scripts\Activate.ps1

    PowerShell empieza a utilizar el Python privado de este proyecto.

    Resultado esperado: aparece (.venv) al inicio de la línea. Si PowerShell bloquea el archivo, repasa la lección de entornos virtuales antes de cambiar políticas de seguridad.

  4. Instalá las librerías.
    python -m pip install -r requirements.txt

    pip lee la lista y prepara las herramientas que utiliza el proyecto.

    Resultado esperado: aparecen mensajes de instalación o confirmación.

  5. Ejecutá el archivo principal.
    python main.py

    Python abre y ejecuta las instrucciones de main.py.

    Resultado esperado: verás el resultado descrito en esta lección.

¿Cómo sé que estoy en la carpeta correcta?

Tenés que poder ver main.py al ejecutar ls en macOS o dir en Windows.

¿Cómo detengo un programa?

Los scripts pequeños terminan solos. Si un servidor continúa funcionando, presiona Control + C.

¿Qué hago si dice que falta un archivo?

Revisá la carpeta actual. El error suele indicar que la terminal no está ubicada donde guardaste el proyecto.

¿Debo repetir todo cada vez?

El entorno se crea e instala una vez. En una sesión nueva normalmente solo activas .venv y ejecutás python main.py.

Términos que aparecerán más adelante

FastAPI

Librería de Python para crear APIs y servidores web. Sus proyectos se ejecutan con un comando diferente a python main.py.

Lo vas a aprender en: Nivel 06 · Crea tu primera API.

Notebook

Documento interactivo que combina pequeños bloques de código, resultados y explicaciones. Es común en análisis de datos.

En este curso: es un recurso opcional. No necesitás usar notebooks para completar las lecciones actuales. Consulta la introducción a notebooks cuando aparezca el término.

Herramienta externa

Programa o servicio que no forma parte de Python, por ejemplo una base de datos, navegador, servicio de nube o modelo de IA.

Regla: no la instales ni ejecutes hasta llegar a la lección que la explica y revisar su README.

🧩 Tres niveles de desafío

  1. Esencial: cambia un dato y verifica el resultado.
  2. Práctica: agrega validación y un mensaje de error claro.
  3. Avanzado: separa responsabilidades, añade pruebas y documenta la arquitectura.

🧪 Comprobaciones programando

Ejecutá un caso controlado y deja que el código compruebe condiciones importantes.

1. Caso normalUsá datos comunes.
2. Valor límiteProbá cero, vacío, máximo o mínimo.
3. Error esperadoComprobá que el mensaje ayude a corregirlo.
response = {
    "answer": "Respuesta de ejemplo",
    "sources": ["documento-1"],
}

assert response["answer"].strip()
assert isinstance(response["sources"], list)
assert response["sources"]

print("✅ Estructura válida")
Qué estás aprendiendo: La prueba valida estructura, campos obligatorios y fuentes sin gastar créditos.

Después de ejecutarlo

  • ¿Qué condición comprueba cada assert?
  • ¿Qué cambio hace fallar la comprobación?
  • ¿El mensaje explica qué tenés que corregir?
  • ¿Podés agregar otro caso?
Parte 4

Comprobá lo que entendiste

Respondé una pregunta a la vez. Podés usar pistas y volver a intentarlo.

❓ Comprueba lo que entendiste

Respondé sobre Creá un agente con herramientas. Verás una explicación completa y podrás intentarlo nuevamente.

Pregunta 1 de 5 · Selección

¿Cuál describe mejor la entrada principal?

Pregunta 2 de 5 · Selección

¿Qué describe mejor el procesamiento?

Pregunta 3 de 5 · Selección

¿Qué error esperado debería manejarse?

Pregunta 4 de 5 · Respuesta breve

Pregunta 5 de 5 · Respuesta breve

Resultado de la evaluación

Completá las cinco preguntas.

Parte 5

Cerrá la lección

Resume lo aprendido, completa el checklist y decide tu siguiente paso.

📝 Resumen

  1. Ejecutaste una referencia funcional.
  2. Identificaste entrada, procesamiento y salida.
  3. Modificaste un comportamiento.
  4. Provocaste y reparaste un error.
  5. Preparaste una mejora para GitHub.

✅ Checklist

🚀 Mejoras futuras y dónde las aprenderás

No son obligatorias ahora. Son mejoras que aplicarás cuando aprendas las herramientas correspondientes.

Separar la configuración del código

Qué mejora: Evita editar el programa cuando cambia una ruta, clave o preferencia.

Dónde lo aprenderás: en la lección «Protege tokens con .env», del nivel APIs y servicios externos.

Añadir pruebas automatizadas

Qué mejora: Comprueba que una modificación no rompa lo existente.

Dónde lo aprenderás: en la lección «Escribe pruebas unitarias», del nivel Testing y despliegue.

Registrar la ejecución

Qué mejora: Ayuda a entender fallos sin imprimir datos sensibles.

Dónde lo aprenderás: en la lección «Configura observabilidad», del nivel Testing y despliegue.

Mejorar mensajes y validación

Qué mejora: Explica qué dato falta y cómo corregirlo.

Dónde lo aprenderás: en la lección «Entrada de datos segura», del nivel Fundamentos de Python.

Documentar decisiones y limitaciones

Qué mejora: Permite que otra persona comprenda y evalúe el proyecto.

Dónde lo aprenderás: en la lección «Construye casos de estudio», del nivel Portafolio profesional.

Crear una demostración

Qué mejora: Muestra el problema, funcionamiento y evidencia.

Dónde lo aprenderás: en la lección «Crea un índice HTML», del nivel Portafolio profesional.