ArquitecturaAvanzado50 min
LangChain en Producción
Chains · Agents · Memory · LCEL · el framework que conecta todo
LangChainAgentsChains
✓ Guía gratuita · Acceso completo
Mapa rápido · salta al paso que te interese
01
LCEL: LangChain Expression Language
LCEL es el nuevo estándar para componer chains. Usa el operador pipe (|) para conectar componentes de forma declarativa.
lib/chains/basic.ts
import { ChatAnthropic } from '@langchain/anthropic'
import { ChatPromptTemplate } from '@langchain/core/prompts'
import { StringOutputParser } from '@langchain/core/output_parsers'
const model = new ChatAnthropic({
model: 'claude-sonnet-4-20250514',
})
const prompt = ChatPromptTemplate.fromMessages([
['system', 'Eres un experto en {topic}. Responde de forma concisa.'],
['human', '{question}'],
])
// LCEL: componentes conectados con |
const chain = prompt.pipe(model).pipe(new StringOutputParser())
// Uso
const result = await chain.invoke({
topic: 'inteligencia artificial',
question: '¿Qué es un transformer?',
})
console.log(result)Tip Pro
LCEL soporta streaming nativo. Cambia invoke por stream para obtener tokens uno a uno.
02
Chains útiles para producción
lib/chains/summarize.ts
import { loadSummarizationChain } from 'langchain/chains'
import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'
import { ChatAnthropic } from '@langchain/anthropic'
const model = new ChatAnthropic({ model: 'claude-sonnet-4-20250514' })
export async function summarizeLongDocument(text: string): Promise<string> {
// 1. Dividir documento largo en chunks
const splitter = new RecursiveCharacterTextSplitter({
chunkSize: 4000,
chunkOverlap: 200,
})
const docs = await splitter.createDocuments([text])
// 2. Usar chain de summarization (map-reduce)
const chain = loadSummarizationChain(model, {
type: 'map_reduce',
})
// 3. Ejecutar
const result = await chain.invoke({ input_documents: docs })
return result.text
}lib/chains/extract.ts
import { ChatAnthropic } from '@langchain/anthropic'
import { z } from 'zod'
const model = new ChatAnthropic({ model: 'claude-sonnet-4-20250514' })
// Schema de extracción
const PersonSchema = z.object({
name: z.string().describe('Nombre completo'),
email: z.string().email().optional(),
company: z.string().optional(),
role: z.string().optional(),
})
export async function extractPerson(text: string) {
const structuredModel = model.withStructuredOutput(PersonSchema)
return structuredModel.invoke(
`Extrae la información de la persona de este texto: ${text}`
)
}03
Agents con tools
lib/agents/researcher.ts
import { ChatAnthropic } from '@langchain/anthropic'
import { TavilySearchResults } from '@langchain/community/tools/tavily_search'
import { createReactAgent } from '@langchain/langgraph/prebuilt'
const model = new ChatAnthropic({ model: 'claude-sonnet-4-20250514' })
// Tool de búsqueda web
const searchTool = new TavilySearchResults({
maxResults: 3,
})
// Crear agent con tools
const agent = createReactAgent({
llm: model,
tools: [searchTool],
})
export async function research(query: string) {
const result = await agent.invoke({
messages: [{ role: 'user', content: query }],
})
return result.messages[result.messages.length - 1].content
}
// Uso
const answer = await research('¿Cuáles son las últimas noticias sobre Claude AI?')¿Quieres el sistema completo?
500+ páginas, 25 capítulos, código de producción, acceso a todas las guías del Arsenal.
Curso Completo · €29PayPal · Acceso inmediato