![]()
La lección anterior aumentó la escala de los agentes hacia arriba en la nube. Esta los trae hacia abajo a una sola máquina. Al final tendrás un asistente de ingeniería funcional que razona, usa herramientas, lee tus archivos y busca en tu documentación — sin una sola llamada de inferencia en la nube.
¿Por qué querrías eso? Tres razones que surgen constantemente en el trabajo de ingeniería real:
La desventaja es que estás intercambiando un modelo de frontera en la nube por un Modelo de Lenguaje Pequeño (SLM) que se ejecuta en tu CPU, GPU o NPU. Esta lección trata de construir agentes que sean buenos dentro de esa limitación, en lugar de pretender que la limitación no existe.
Esta lección cubrirá:
Después de completar esta lección, sabrás cómo:
Esta lección asume que has completado las lecciones previas y estás cómodo con:
También necesitarás:
requirements.txt, además de foundry-local-sdk, openai y chromadb para esta lección.Un modelo de frontera en la nube tiene cientos de miles de millones de parámetros y un centro de datos detrás. Un SLM tiene unos pocos miles de millones de parámetros y debe caber en la RAM de tu portátil. Esa diferencia establece expectativas claras.
Los SLMs son buenos en:
Los SLMs son débiles en:
La estrategia ganadora para agentes locales es entonces: dejar que el SLM orqueste, y dejar que las herramientas hagan el trabajo pesado. El modelo no necesita conocer tu base de código — solo necesita saber cuándo llamar a read_file y search_docs. Esto juega directamente con las fortalezas de un SLM.
flowchart LR
U[Desarrollador] --> A[Agente SLM Local]
A -->|decide qué herramienta| T1[leer_archivo]
A -->|decide qué herramienta| T2[buscar_docs RAG]
A -->|decide qué herramienta| T3[analizar_código]
T1 --> A
T2 --> A
T3 --> A
A --> R[Respuesta, completamente en el dispositivo]
Microsoft Foundry Local es un entorno de ejecución ligero que descarga, administra y sirve modelos completamente en tu máquina. Su característica más importante para nosotros es que expone un endpoint HTTP compatible con OpenAI — lo que significa que el SDK de OpenAI y el cliente OpenAI del Microsoft Agent Framework funcionan con él con solo cambiar la base_url. Todo lo que aprendiste sobre construir agentes se transfiere directamente; solo el endpoint cambia de la nube a localhost.
Foundry Local también selecciona automáticamente la mejor versión de un modelo para tu hardware — una versión para CPU, una para CUDA/GPU o una para NPU — para que no tengas que optimizar manualmente por máquina.
Instala Foundry Local (consulta la documentación para tu sistema operativo), luego verifica que funcione:
# Instalar (ejemplo; sigue la documentación para tu plataforma)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Descarga y ejecuta un modelo Qwen, luego inicia el servicio local
foundry model run qwen2.5-7b-instruct
foundry service status
Una vez que el servicio está en ejecución, tienes un endpoint local compatible con OpenAI (típicamente http://localhost:PORT/v1). El notebook usa foundry-local-sdk para descubrir el endpoint automáticamente, por lo que no tienes que codificar el puerto.
Un agente es solo un agente si puede llamar herramientas. Muchos SLMs pueden chatear pero generan llamadas a funciones poco confiables o mal formadas. Los modelos Qwen están entrenados para llamadas a funciones y emiten estructuras de llamadas a herramientas bien formadas consistentemente — lo que es exactamente lo que convierte un modelo de chat local en un agente local.
El flujo es el bucle estándar de llamadas a herramientas que ya conoces, solo que ejecutándose en el dispositivo:
sequenceDiagram
participant U as Usuario
participant A as Agente Qwen (local)
participant T as Herramienta Local
U->>A: "¿Qué hace auth.py?"
A->>A: Decidir: llamar a read_file
A->>T: read_file("auth.py")
T-->>A: contenido del archivo
A->>A: Razonar sobre el contenido
A-->>U: Explicación
La búsqueda en documentación es donde los agentes locales demuestran su valor. En lugar de esperar que el SLM haya memorizado la documentación de tu framework, incrustas esos documentos en una base de datos vectorial local y dejas que el agente recupere los fragmentos relevantes bajo demanda.
Usamos Chroma, un almacén vectorial incrustado que se ejecuta en el proceso sin servidor que manejar. La cadena de procesamiento es completamente local: modelo de incrustación local → vectores locales → recuperación local → SLM local.
flowchart TB
D[Tus documentos / código] --> E[Modelo de incrustación local]
E --> V[(Base de datos vectorial Chroma - en disco)]
Q[Consulta del agente] --> QE[Incrustar consulta localmente]
QE --> V
V -->|fragmentos top-k| A[Agente Qwen]
A --> Ans[Respuesta fundamentada]
Este es el mismo patrón de RAG Agente de la Lección 5 — el único cambio es que cada componente se ejecuta en tu máquina.
MCP es un transporte, no un servicio en la nube. Un servidor MCP puede funcionar como un proceso local en stdio, exponiendo herramientas a tu agente mediante el protocolo estándar. Esto te permite reutilizar el ecosistema creciente de servidores MCP — acceso al sistema de archivos, operaciones de git, consultas a bases de datos — completamente sin conexión.
La postura de seguridad es diferente a la de la nube, pero no inexistente: un servidor MCP local sigue ejecutándose con los permisos de tu usuario, así que limita lo que puede tocar (un directorio de proyecto, no toda tu carpeta personal) y trata sus salidas como entradas para validar.
Local primero no significa solo local. Los sistemas maduros enrután según sensibilidad y dificultad:
| Situación | Dónde se ejecuta |
|---|---|
| Código/datos sensibles, o sin conexión | SLM Local |
| Tarea simple y acotada | SLM Local (barato, rápido) |
| Razonamiento difícil de múltiples pasos en datos no sensibles | Modelo en la nube |
| Todo, durante un corte | SLM Local (degradación gradual) |
Esto refleja la idea de enrutamiento de modelo de la Lección 16 — excepto que uno de los “modelos” ahora es tu propia máquina. Un diseño robusto cae al local cuando la nube no está disponible, así que el agente se degrada en calidad en vez de fallar completamente.
flowchart LR
Q[Solicitud] --> S{¿Sensitivo o desconectado?}
S -->|sí| L[SLM local]
S -->|no| C{¿Necesita razonamiento profundo?}
C -->|no| L
C -->|sí| Cloud[Modelo en la nube]
L --> Out[Respuesta]
Cloud --> Out
Abre code_samples/17-local-agent-foundry-local.ipynb y trabaja con él. Construirás un asistente de ingeniería local que ejecuta completamente en tu estación de trabajo y puede:
No se usa ningún tipo de inferencia en la nube en ningún momento.
El asistente se conecta a Foundry Local a través del endpoint compatible con OpenAI, así que el código del agente se ve casi idéntico a las lecciones en la nube — solo cambia el cliente:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local descubre/descarga el modelo y nos proporciona un endpoint local.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key es un marcador de posición local
Las herramientas son funciones Python ordinarias restringidas a un directorio de proyecto:
def read_file(path: str) -> str:
\"\"\"Read a file, but only inside the sandboxed project directory.\"\"\"
full = (PROJECT_ROOT / path).resolve()
if PROJECT_ROOT not in full.parents and full != PROJECT_ROOT:
return \"Access denied: path is outside the project directory.\"
return full.read_text(encoding=\"utf-8\")
Nota la verificación del entorno restringido — incluso localmente, una herramienta que lee rutas arbitrarias es un riesgo. El notebook mantiene cada herramienta restringida a una sola raíz de proyecto.
Prueba tu comprensión antes de pasar a la tarea.
1. Da dos razones concretas para ejecutar un agente localmente en vez de en la nube.
2. ¿Cuál es la división recomendada del trabajo entre un SLM y sus herramientas en un agente local, y por qué?
3. ¿Qué hace posible reutilizar el código de agentes en la nube con Foundry Local?
4. ¿Por qué usamos específicamente un modelo Qwen para llamadas a funciones y no cualquier SLM?
5. En la cadena RAG local, ¿qué componentes se ejecutan en la máquina?
6. Un servidor MCP local se ejecuta en tu máquina. ¿Eso lo hace automáticamente seguro? ¿Qué precaución debes tomar?
7. Describe una regla de enrutamiento híbrido sensata que incluya un modelo local.
8. ¿Cuál es una cifra realista mínima de RAM para ejecutar el agente local en esta lección, y qué ventaja te da más RAM?
Extiende el asistente de ingeniería local en un revisor local de documentación para un proyecto pequeño de tu elección (usa una de las carpetas de lecciones de este repositorio si quieres).
Tu entrega debe:
Agregar una herramienta find_todos que escanee el proyecto en busca de comentarios TODO/FIXME y los devuelva con archivo y número de línea — manteniendo la misma verificación del entorno restringido que read_file.
Luego escribe un párrafo corto sobre qué moverías a la nube y qué mantendrías localmente para este revisor, y por qué. Se evaluará si los componentes locales están conectados correctamente y si tu razonamiento híbrido es sólido, no la calidad del modelo.
En esta lección construiste un agente que se ejecuta completamente en tu propia máquina:
Esto completa el arco de implementación: la Lección 16 escaló agentes a Microsoft Foundry, y esta lección los redujo a una sola estación de trabajo. La próxima lección se enfoca en mantener seguros los agentes desplegados.
Desplegando agentes escalables
Descargo de responsabilidad: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.