![]()
La lección anterior escaló agentes hacia arriba en la nube. Esta los baja hacia abajo a una sola máquina. Al final, tendrás un asistente de ingeniería funcional que razona, llama a 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 trampa es que cambias 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 sobre construir agentes que sean buenos dentro de esa limitación en lugar de fingir que no existe.
Esta lección cubrirá:
Al completar esta lección, sabrás cómo:
Esta lección asume que has completado las lecciones anteriores y que 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 laptop. Esa diferencia establece expectativas claras.
Los SLMs son buenos en:
Los SLMs son más débiles en:
La estrategia ganadora para agentes locales es entonces: deja que el SLM organice, y que las herramientas hagan el trabajo pesado. El modelo no necesita conocer tu base de código: necesita saber cuándo llamar a read_file y search_docs. Eso juega directamente con las fortalezas del 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 solo cambiando el base_url. Todo lo que aprendiste sobre construir agentes se transfiere directamente; solo cambia el endpoint 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 — así no tienes que optimizar manualmente para cada máquina.
Instala Foundry Local (consulta la documentación para tu SO), luego confirma que funciona:
# Instalar (ejemplo; siga la documentación para su plataforma)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Descargue y ejecute un modelo Qwen, luego inicie el servicio local
foundry model run qwen2.5-7b-instruct
foundry service status
Una vez que el servicio está activo 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, así que no tienes que codificar el puerto.
Un agente solo es un agente si puede llamar a herramientas. Muchos SLMs pueden chatear pero producen llamadas a herramientas poco fiables o malformadas. Los modelos Qwen están entrenados para las llamadas a funciones y generan estructuras de llamadas bien formadas consistentemente — que es justo lo que convierte un modelo de chat local en un agente local.
El flujo es el ciclo 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 ganan 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 de vectores local y permites que el agente recupere los fragmentos relevantes bajo demanda.
Usamos Chroma, una tienda de vectores incrustada que se ejecuta en proceso sin necesidad de un servidor para gestionar. El pipeline 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 Agentic RAG de la Lección 5 — el único cambio es que todos los componentes se ejecutan en tu máquina.
MCP es un transporte, no un servicio en la nube. Un servidor MCP puede ejecutarse como un proceso local sobre 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 git, consultas a bases de datos — completamente offline.
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 de usuario) y trata sus salidas como entradas para validar.
Local primero no significa solo local. Los sistemas maduros enrutran según sensibilidad y dificultad:
| Situación | Dónde se ejecuta |
|---|---|
| Código/datos sensibles o sin conexión | SLM local |
| Tarea sencilla y acotada | SLM local (barato, rápido) |
| Razonamiento multi-salto complejo en datos no sensibles | Modelo en la nube |
| Todo, durante un corte de red | SLM local (degradación gradual) |
Esto refleja la idea de enrutamiento de modelos de la Lección 16 — excepto que uno de los “modelos” ahora es tu propia máquina. Un diseño robusto recurre a lo local cuando la nube no está disponible, para que el agente degrade su calidad en lugar de fallar abruptamente.
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 se ejecuta completamente en tu estación de trabajo y puede:
No se usa inferencia en la nube en ningún momento.
El asistente se conecta a Foundry Local mediante el endpoint compatible con OpenAI, por lo que el código del agente luce 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 punto de enlace 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 normales limitadas 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 comprobación de sandbox — incluso localmente, una herramienta que lee rutas arbitrarias es un riesgo. El notebook mantiene cada herramienta limitada a la raíz de un solo proyecto.
Pon a prueba tu comprensión antes de pasar a la tarea.
1. Da dos razones concretas para ejecutar un agente localmente en lugar 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 con llamadas a funciones en lugar de cualquier SLM?
5. En la canalización 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 aún?
7. Describe una regla de enrutamiento híbrida sensata que incluya un modelo local.
8. ¿Cuál es una cifra mínima realista de RAM para ejecutar el agente local de esta lección, y qué ventajas ofrece más RAM?
Extiende el asistente de ingeniería local para convertirlo en un revisor de documentación local para un pequeño proyecto de tu elección (usa una de las carpetas de lección 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 comprobación sandbox que read_file.
Luego escribe un párrafo corto sobre qué moverías a la nube y qué mantendrías local para este revisor, y por qué. Se te 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 despliegue: la Lección 16 elevó 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 a 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.