{"componentChunkName":"component---src-gatsby-theme-chronoblog-templates-note-js","path":"/notes/langchain-overview-nodejs/","result":{"data":{"mdx":{"parent":{"__typename":"File","fields":{"gitLogLatestDate":"2026-06-14 23:40:15 +0200"}},"id":"801ed5b3-c3da-5ca7-a638-2b99aa66fba9","excerpt":"LangChain.js  is a framework for LLM applications in TypeScript and Node.js. It standardizes how you wire prompts, models, tools, document…","frontmatter":{"title":"LangChain overview for Node.js","date":"2026-06-15 00:01:00 UTC","job_ad":null,"job_ad_id":null,"job_ad_url":null,"tags":["langchain","ai","llm","node"],"cover":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAPoAAAD6AG1e1JrAAABHElEQVQoz41Si27DIAzk/39w09okatdNXQMJSSBgXjdBqk2pUDcky2CfLfs4hj9OSulZFo9pVivO/te2dwgRZo3QOkArD7IlgfSAZ8+bbTHnCEoZfFwMmmZE00gIHjYM9nhWa/CwM6y15epdgne4W50KVuNlmQN4T+hvFuPgQURwLkCOAUIQBCcsc0SMscQzhve21LDMhVo8lPJYdeZIQ3CL82lC1w3gvYMxK1Ztcf006DqBth0guINzDlpt8bYVOJ9msHGIaJupcHN5NyDarxJjKhPWFVBZ2fsER6k0ytMSWdy+LI6HEa8vPXgfsMwal/OKw5tAc5Q/vvYxVQ7z6lI6yJGgdSySybzm2CQ9prtf9V5a1V9+quN/iP8b/0oPpMmMWLAAAAAASUVORK5CYII=","aspectRatio":2.0869565217391304,"src":"/static/fb7a529916e520c53bf26c02f29570c1/c4ecb/cover.png","srcSet":"/static/fb7a529916e520c53bf26c02f29570c1/57ab0/cover.png 192w,\n/static/fb7a529916e520c53bf26c02f29570c1/f4739/cover.png 384w,\n/static/fb7a529916e520c53bf26c02f29570c1/c4ecb/cover.png 768w","srcWebp":"/static/fb7a529916e520c53bf26c02f29570c1/dd090/cover.webp","srcSetWebp":"/static/fb7a529916e520c53bf26c02f29570c1/ae504/cover.webp 192w,\n/static/fb7a529916e520c53bf26c02f29570c1/fef30/cover.webp 384w,\n/static/fb7a529916e520c53bf26c02f29570c1/dd090/cover.webp 768w","sizes":"(max-width: 768px) 100vw, 768px","presentationWidth":768,"presentationHeight":366},"resize":{"src":"/static/fb7a529916e520c53bf26c02f29570c1/c4ecb/cover.png"}}}},"fields":{"slug":"/notes/langchain-overview-nodejs/","readingTime":{"text":"4 min read"}},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"LangChain overview for Node.js\",\n  \"date\": \"2026-06-15 00:01:00 UTC\",\n  \"cover\": \"./cover.png\",\n  \"tags\": [\"langchain\", \"ai\", \"llm\", \"node\"],\n  \"canonical_url\": \"https://sevic.dev/notes/langchain-overview-nodejs/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/langchain/overview\"\n  }), \"LangChain.js\"), \" is a framework for LLM applications in TypeScript and Node.js. It standardizes how you wire prompts, models, tools, document loaders, embeddings, and retrievers into reusable pipelines and agents.\"), mdx(\"h3\", {\n    \"id\": \"langchain-deep-agents-langgraph-and-langsmith\"\n  }, \"LangChain, Deep Agents, LangGraph, and LangSmith\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Project\"), mdx(\"th\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Role\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), mdx(\"a\", _extends({\n    parentName: \"td\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/langchain/overview\"\n  }), \"LangChain\")), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"High-level APIs: LCEL chains, \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"createAgent\"), \", loaders, retrievers\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), mdx(\"a\", _extends({\n    parentName: \"td\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/deepagents/overview\"\n  }), \"Deep Agents\")), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Batteries-included agent harness: planning, subagents, filesystem, context management\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), mdx(\"a\", _extends({\n    parentName: \"td\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/langgraph/overview\"\n  }), \"LangGraph\")), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Low-level orchestration; LangChain agents run on LangGraph under the hood\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), mdx(\"a\", _extends({\n    parentName: \"td\"\n  }, {\n    \"href\": \"https://docs.smith.langchain.com/\"\n  }), \"LangSmith\")), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Tracing, debugging, and evaluation for LangChain and LangGraph apps\")))), mdx(\"p\", null, \"Use Deep Agents for complex multi-step tasks out of the box. Use LangChain's \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"createAgent\"), \" when you want a minimal harness you compose with middleware. Reach for LangGraph when you need custom stateful workflows, branching, or fine-grained control over the agent loop.\"), mdx(\"h3\", {\n    \"id\": \"packages\"\n  }, \"Packages\"), mdx(\"p\", null, \"Install the core packages first (\", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/langchain/install\"\n  }), \"install guide\"), \"):\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"npm i langchain @langchain/core @langchain/openai zod\\n\")), mdx(\"p\", null, \"Provider-specific integrations live in separate packages:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"langchain\"), \" - \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"createAgent\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"tool\"), \", and high-level chain helpers\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"zod\"), \" - tool input schemas when defining tools with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"tool()\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@langchain/core\"), \" - prompts, output parsers, Runnable interface, LCEL\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@langchain/openai\"), \" - \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ChatOpenAI\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"OpenAIEmbeddings\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@langchain/textsplitters\"), \" - document chunking (used in the \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/rag-openai-embeddings-pgvector-langchain/\"\n  }), \"RAG post\"), \")\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Standalone integration packages for other providers and tools (see the \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/integrations/providers/overview\"\n  }), \"integrations page\"), \")\")), mdx(\"p\", null, \"For raw API access, see the \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/chatgpt-api-nodejs/\"\n  }), \"Chat Completions\"), \" and \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/llm-integration-openai-responses-api/\"\n  }), \"OpenAI Responses API\"), \" posts. For provider-agnostic text and agents, see the \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/llm-integration-vercel-ai-sdk/\"\n  }), \"Vercel AI SDK\"), \" and \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/ai-agents-openai-sdk/\"\n  }), \"OpenAI Agents SDK\"), \" posts.\"), mdx(\"h3\", {\n    \"id\": \"when-to-use-langchain\"\n  }, \"When to use LangChain\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Tool\"), mdx(\"th\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Best for\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Raw \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"openai\"), \" package\"), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Minimal calls, full control, least abstraction\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), mdx(\"a\", _extends({\n    parentName: \"td\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/llm-integration-vercel-ai-sdk/\"\n  }), \"Vercel AI SDK\")), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Provider-agnostic \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"generateText\"), \", streaming, embeddings, tool loops\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), mdx(\"a\", _extends({\n    parentName: \"td\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/ai-agents-openai-sdk/\"\n  }), \"OpenAI Agents SDK\")), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Official agent loop, handoffs, guardrails\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"LangChain\")), mdx(\"td\", _extends({\n    parentName: \"tr\"\n  }, {\n    \"align\": null\n  }), \"Document ingestion, retrievers, LCEL chains, \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"createAgent\"), \", swappable vector stores\")))), mdx(\"p\", null, \"Reach for LangChain when RAG or multi-step LLM pipelines grow beyond a few manual API calls.\"), mdx(\"h3\", {\n    \"id\": \"prerequisites\"\n  }, \"Prerequisites\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"OpenAI account\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Generated API key\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Enabled billing\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Node.js version 26\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"langchain\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@langchain/core\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@langchain/openai\"), \", and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"zod\"), \" installed\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"OPENAI_API_KEY\"), \" set in the environment\")), mdx(\"h3\", {\n    \"id\": \"core-concepts\"\n  }, \"Core concepts\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Document\"), \" - a chunk of text with optional metadata. Loaders produce \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Document\"), \" instances; splitters break long sources into retrieval-friendly pieces.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"import { Document } from '@langchain/core/documents';\\n\\nconst doc = new Document({\\n  pageContent: 'LangChain helps compose LLM pipelines.',\\n  metadata: { source: 'intro' }\\n});\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Runnable\"), \" - any component with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".invoke()\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".stream()\"), \", or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".batch()\"), \". Prompts, models, parsers, and composed chains are all Runnables.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"LCEL (LangChain Expression Language)\"), \" - chain Runnables with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".pipe()\"), \". Data flows left to right: prompt \\u2192 model \\u2192 parser. The same \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".invoke()\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".stream()\"), \", and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".batch()\"), \" interface applies to every Runnable in the chain.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"import { ChatPromptTemplate } from '@langchain/core/prompts';\\nimport { StringOutputParser } from '@langchain/core/output_parsers';\\nimport { ChatOpenAI } from '@langchain/openai';\\n\\nconst prompt = ChatPromptTemplate.fromMessages([\\n  ['system', 'Answer in one sentence.'],\\n  ['human', '{question}']\\n]);\\n\\nconst model = new ChatOpenAI({ model: 'gpt-5.5' });\\nconst chain = prompt.pipe(model).pipe(new StringOutputParser());\\n\\nconst answer = await chain.invoke({ question: 'What is LangChain?' });\\nconsole.log(answer);\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Agents\"), \" - LangChain's current high-level agent API is \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/langchain/agents\"\n  }), mdx(\"inlineCode\", {\n    parentName: \"a\"\n  }, \"createAgent\")), \". Pass a model string or chat model, optional tools (with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"zod\"), \" schemas), and an optional checkpointer for conversation memory (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"@langchain/langgraph\"), \"):\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"import { createAgent } from 'langchain';\\n\\nconst agent = createAgent({\\n  model: 'gpt-5.5',\\n  tools: []\\n});\\n\\nconst result = await agent.invoke({\\n  messages: [{ role: 'user', content: 'What is LangChain?' }]\\n});\\n\")), mdx(\"h3\", {\n    \"id\": \"what-langchain-can-do\"\n  }, \"What LangChain can do\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Load and split documents\"), \" - PDF, HTML, CSV, directories; token- or character-based splitters\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Embeddings and vector stores\"), \" - OpenAI embeddings with pgvector, Pinecone, Chroma, and others\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Retrievers and RAG chains\"), \" - fetch relevant context, then call a model (see the \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/rag-openai-embeddings-pgvector-langchain/\"\n  }), \"RAG with pgvector post\"), \")\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Conversation memory\"), \" - short-term memory via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@langchain/langgraph\"), \" \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/langgraph/persistence\"\n  }), \"checkpointers\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"thread_id\"), \"; long-term memory via \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://docs.langchain.com/oss/javascript/langgraph/stores\"\n  }), \"stores\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Tools and agents\"), \" - \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"createAgent\"), \" with tools and middleware; for production agents you may also prefer the \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/ai-agents-vercel-ai-sdk/\"\n  }), \"Vercel AI SDK agents post\"), \" or \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://sevic.dev/notes/ai-agents-openai-sdk/\"\n  }), \"OpenAI Agents SDK post\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Observability\"), \" - trace runs with \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://docs.smith.langchain.com/\"\n  }), \"LangSmith\"), \" (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"LANGSMITH_TRACING=true\"), \"); optional \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://docs.langchain.com/langsmith/engine\"\n  }), \"LangSmith Engine\"), \" monitors traces and flags issues\")), mdx(\"h3\", {\n    \"id\": \"streaming-and-batch\"\n  }, \"Streaming and batch\"), mdx(\"p\", null, \"The same LCEL chain supports streaming and batch invocation:\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-js\"\n  }), \"for await (const chunk of await chain.stream({ question: 'What is LCEL?' })) {\\n  process.stdout.write(chunk);\\n}\\n\\nconst answers = await chain.batch([\\n  { question: 'What is a Runnable?' },\\n  { question: 'What is a retriever?' }\\n]);\\n\")), mdx(\"h3\", {\n    \"id\": \"demo\"\n  }, \"Demo\"), mdx(\"p\", null, \"Runnable LCEL scripts for this post live in the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"langchain-overview-nodejs-demo\"), \" folder. Get access via \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://sevic.dev/demos\"\n  }), \"code demos\"), \".\"));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"id":"801ed5b3-c3da-5ca7-a638-2b99aa66fba9"}},"staticQueryHashes":["1961101537","2542493696"]}