0aff31e2d3
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8.2 KiB
8.2 KiB
Ejercicios del Curso de LangChain
Este repositorio contiene los ejercicios prácticos del curso de LangChain con TypeScript.
Recursos
- Cliente del Agente (demo): https://jabiinfante.github.io/langchain.js-agent-client-dummy/
Requisitos Previos
1. Cuentas y API Keys necesarias
Mistral AI (Requerido)
- Crear cuenta en https://console.mistral.ai/
- Ir a "API Keys" y generar una nueva key
- Guardar la key como
MISTRAL_API_KEY
LangSmith (Requerido para trazabilidad)
- Crear cuenta en https://smith.langchain.com/
- Ir a "Settings" → "API Keys" y crear una nueva key
- Guardar la key como
LANGCHAIN_API_KEY
Google AI / Gemini (Opcional)
- Ir a https://aistudio.google.com/apikey
- Crear una API Key
- Guardar la key como
GOOGLE_API_KEY
Cohere (Requerido para reranking en el agente)
- Crear cuenta en https://dashboard.cohere.com/
- Ir a "API Keys" y copiar la key
- Guardar la key como
COHERE_API_KEY
Qdrant (Opcional - solo para ejercicios 05 y 06)
- Crear cuenta en https://cloud.qdrant.io/
- Crear un cluster gratuito
- Obtener la URL del cluster y la API Key
- Guardar como
QDRANT_URLyQDRANT_API_KEY
2. Configurar variables de entorno
Crear un archivo .env en la raíz del proyecto:
# === Mistral AI (Requerido) ===
MISTRAL_API_KEY=tu_api_key_de_mistral
# === LangSmith (Requerido para trazabilidad) ===
LANGCHAIN_API_KEY=tu_api_key_de_langsmith
LANGCHAIN_TRACING_V2=true
LANGCHAIN_PROJECT=curso-langchain
# === Google AI / Gemini (Opcional) ===
GOOGLE_API_KEY=tu_api_key_de_google
# === Cohere (Requerido para reranking) ===
COHERE_API_KEY=tu_api_key_de_cohere
# === Qdrant (Opcional - solo para ejercicios 05 y 06) ===
QDRANT_URL=https://tu-cluster.qdrant.io
QDRANT_API_KEY=tu_api_key_de_qdrant
3. Instalar dependencias
npm install
Catálogo de Ejercicios
| # | Script | Archivo | Descripción |
|---|---|---|---|
| 01 | npm run 01:comments |
01_comments_classifier.ts |
Clasificador de Comentarios - Analiza comentarios usando Structured Output con Zod. Demuestra withStructuredOutput() y batch() para procesar múltiples inputs. |
| 02 | npm run 02:poet |
02_cyber_poet.ts |
Poeta Cibernético - Combina Tools y Structured Output. El LLM genera un poema y usa una herramienta para contar palabras con precisión. |
| 03 | npm run 03:homework |
03_homework_maker.ts |
Generador de Tareas - Agente multi-tool con bucle agentic manual. Usa Wikipedia, Calculator y WordCount para generar tareas escolares adaptadas al nivel del alumno. |
| 04 | npm run 04:agent |
04_webserver_for_agent.ts |
Servidor Web con Agente - Integra un agente ReAct con Fastify y SSE para streaming en tiempo real. Incluye memoria persistente, RAG sobre guiones de Nolan, tasas de cambio y generación de fichas de películas en .docx. |
| 05 | npm run 05:indexer |
05_mdn-vector-indexer.ts |
Indexador de Documentación - Pipeline de indexación RAG que carga documentación de MDN, la divide en chunks y la almacena en Qdrant. |
| 06 | npm run 06:indexer |
06_nollan-indexer.ts |
Indexador de Guiones de Nolan - Pipeline de indexación RAG que carga guiones de películas de Christopher Nolan desde IMSDB y los almacena en Qdrant. |
Estructura del Proyecto
src/
├── 01_comments_classifier.ts # Structured Output + batch
├── 02_cyber_poet.ts # Tools + Structured Output
├── 03_homework_maker.ts # Agentic Loop + PromptTemplate + múltiples tools
├── 04_webserver_for_agent.ts # Fastify + SSE + Agent con memoria
├── 05_mdn-vector-indexer.ts # Web scraping + chunking + Qdrant
├── 06_nollan-indexer.ts # Indexación de guiones de Nolan + Qdrant
│
├── agents_wrapper/
│ └── agent.ts # Wrapper del agente con streaming y contextSchema
│
└── helpers/
├── comments-mock.ts # Datos de prueba para ejercicio 01
├── constants.ts # Constantes compartidas (OUTPUT_DIR)
├── helper.ts # Utilidad promptUser() para input interactivo
├── middlewares.ts # Middleware trimMessages para limitar contexto
└── tools.ts # Herramientas: wordCount, wikipedia, exchangeRates, storageKnowledge, buildFilmDocument
template/
└── plantilla_ficha.docx # Plantilla Word para generar fichas de películas
output_docx/ # Directorio donde se generan los documentos .docx
Conceptos por Ejercicio
01 - Clasificador de Comentarios
- Zod: Definición de esquemas para validación
- withStructuredOutput(): Forzar respuestas JSON estructuradas
- batch(): Procesar múltiples inputs en paralelo
02 - Poeta Cibernético
- tool(): Crear herramientas personalizadas
- bindTools(): Conectar herramientas al modelo
- tool_calls: El LLM solicita usar herramientas
- ToolMessage: Devolver resultados de herramientas
03 - Generador de Tareas
- Agentic Loop: Bucle while que procesa tool_calls hasta completar
- PromptTemplate: Plantillas con variables dinámicas
- Múltiples Tools: Wikipedia, Calculator, WordCount
- promptUser(): Input interactivo en consola
04 - Servidor Web con Agente
- createAgent(): Crear agente ReAct con herramientas
- Checkpointer (SQLite): Memoria persistente de conversaciones
- SSE (Server-Sent Events): Streaming de respuestas al cliente
- contextSchema: Inyección de dependencias a las tools
- dynamicSystemPromptMiddleware: System prompt que se regenera en cada invocación (incluye fecha actual)
- QdrantVectorStore / MemoryVectorStore: Fallback automático si Qdrant no está disponible
- Herramientas disponibles en el agente:
storage_knowledge— RAG sobre guiones de películas de Christopher Nolan (Interstellar, Inception) con reranking via Cohereget_exchange_rates— Tasas de cambio actuales via Frankfurter APIget_historical_rates— Tasas de cambio históricas de una fecha concretabuild_film_document— Genera una ficha de película en.docxusando una plantilla Wordcalculator— Calculadora matemática
05 - Indexador de Documentación
- CheerioWebBaseLoader: Web scraping de HTML
- RecursiveCharacterTextSplitter: División de documentos en chunks
- Embeddings: Representación vectorial de texto
- QdrantVectorStore: Base de datos vectorial para búsqueda semántica
- Deduplicación: Eliminar vectores existentes antes de re-indexar
06 - Indexador de Guiones de Nolan
- CheerioWebBaseLoader: Web scraping de guiones desde IMSDB
- RecursiveCharacterTextSplitter: División en chunks con overlap
- Batch indexing: Inserción por lotes para respetar límites de la API de embeddings
- CohereRerank: Reranking de resultados (usado en el agente del ejercicio 04)
Orden Recomendado
- 01_comments_classifier - Conceptos básicos de Structured Output
- 02_cyber_poet - Introducción a Tools
- 03_homework_maker - Agentic Loop manual con múltiples tools
- 06_nollan-indexer - Indexar guiones de Nolan en Qdrant (necesario para el agente)
- 04_webserver_for_agent - Agente completo con servidor web, streaming y generación de documentos
- 05_mdn-vector-indexer - Indexación de documentación MDN para RAG (opcional)