!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())

[Skip to main content](#__docusaurus_skipToContent_fallback)

LangChain v0.2 is coming soon! Preview the new docs [here](/v0.2/docs/introduction/).

[

![🦜️🔗 Langchain](/v0.1/img/brand/wordmark.png)![🦜️🔗 Langchain](/v0.1/img/brand/wordmark-dark.png)

](/v0.1/)[Docs](/v0.1/docs/get_started/introduction/)[Use cases](/v0.1/docs/use_cases/)[Integrations](/v0.1/docs/integrations/platforms/)[API Reference](https://api.js.langchain.com)

[More](#)

*   [People](/v0.1/docs/people/)
*   [Community](/v0.1/docs/community/)
*   [Tutorials](/v0.1/docs/additional_resources/tutorials/)
*   [Contributing](/v0.1/docs/contributing/)

[v0.1](#)

*   [v0.2](https://js.langchain.com/v0.2/docs/introduction)
*   [v0.1](/v0.1/docs/get_started/introduction/)

[🦜🔗](#)

*   [LangSmith](https://smith.langchain.com)
*   [LangSmith Docs](https://docs.smith.langchain.com)
*   [LangChain Hub](https://smith.langchain.com/hub)
*   [LangServe](https://github.com/langchain-ai/langserve)
*   [Python Docs](https://python.langchain.com/)

[Chat](https://chatjs.langchain.com)[](https://github.com/langchain-ai/langchainjs)

Search

*   [Get started](/v0.1/docs/get_started/)
    
    *   [Introduction](/v0.1/docs/get_started/introduction/)
    *   [Installation](/v0.1/docs/get_started/installation/)
    *   [Quickstart](/v0.1/docs/get_started/quickstart/)
*   [LangChain Expression Language](/v0.1/docs/expression_language/)
    
    *   [Get started](/v0.1/docs/expression_language/get_started/)
    *   [Why use LCEL?](/v0.1/docs/expression_language/why/)
    *   [Interface](/v0.1/docs/expression_language/interface/)
    *   [Streaming](/v0.1/docs/expression_language/streaming/)
    *   [How to](/v0.1/docs/expression_language/how_to/routing/)
        
    *   [Cookbook](/v0.1/docs/expression_language/cookbook/)
        
        *   [Prompt + LLM](/v0.1/docs/expression_language/cookbook/prompt_llm_parser/)
        *   [Multiple chains](/v0.1/docs/expression_language/cookbook/multiple_chains/)
        *   [Retrieval augmented generation (RAG)](/v0.1/docs/expression_language/cookbook/retrieval/)
        *   [Querying a SQL DB](/v0.1/docs/expression_language/cookbook/sql_db/)
        *   [Adding memory](/v0.1/docs/expression_language/cookbook/adding_memory/)
        *   [Using tools](/v0.1/docs/expression_language/cookbook/tools/)
        *   [Agents](/v0.1/docs/expression_language/cookbook/agents/)
    *   [LangChain Expression Language (LCEL)](/v0.1/docs/expression_language/)
*   [Modules](/v0.1/docs/modules/)
    
    *   [Model I/O](/v0.1/docs/modules/model_io/)
        
    *   [Retrieval](/v0.1/docs/modules/data_connection/)
        
    *   [Chains](/v0.1/docs/modules/chains/)
    *   [Agents](/v0.1/docs/modules/agents/)
        
    *   [More](/v0.1/docs/modules/memory/)
        
*   [Security](/v0.1/docs/security/)
*   [Guides](/v0.1/docs/guides/)
    
*   [Ecosystem](/v0.1/docs/ecosystem/)
    
*   [LangGraph](/v0.1/docs/langgraph/)
*   * * *
    

*   [](/v0.1/)
*   [LangChain Expression Language](/v0.1/docs/expression_language/)
*   [Cookbook](/v0.1/docs/expression_language/cookbook/)
*   Prompt + LLM

Prompt + LLM
============

One of the most foundational Expression Language compositions is taking:

`PromptTemplate` / `ChatPromptTemplate` -> `LLM` / `ChatModel` -> `OutputParser`

Almost all other chains you build will use this building block.

Interactive tutorial

The screencast below interactively walks through a simple prompt template + LLM chain. You can update and run the code as it's being written in the video!

PromptTemplate + LLM[​](#prompttemplate--llm "Direct link to PromptTemplate + LLM")
-----------------------------------------------------------------------------------

A PromptTemplate -> LLM is a core chain that is used in most other larger chains/systems.

tip

See [this section for general instructions on installing integration packages](/v0.1/docs/get_started/installation/#installing-integration-packages).

*   npm
*   Yarn
*   pnpm

    npm install @langchain/openai

    yarn add @langchain/openai

    pnpm add @langchain/openai

    import { ChatOpenAI } from "@langchain/openai";import { PromptTemplate } from "@langchain/core/prompts";const model = new ChatOpenAI({});const promptTemplate = PromptTemplate.fromTemplate(  "Tell me a joke about {topic}");const chain = promptTemplate.pipe(model);const result = await chain.invoke({ topic: "bears" });console.log(result);/*  AIMessage {    content: "Why don't bears wear shoes?\n\nBecause they have bear feet!",  }*/

#### API Reference:

*   [ChatOpenAI](https://api.js.langchain.com/classes/langchain_openai.ChatOpenAI.html) from `@langchain/openai`
*   [PromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.PromptTemplate.html) from `@langchain/core/prompts`

Often times we want to attach kwargs to the model that's passed in. To do this, runnables contain a `.bind` method. Here's how you can use it:

### Attaching stop sequences[​](#attaching-stop-sequences "Direct link to Attaching stop sequences")

Interactive tutorial

The screencast below interactively walks through an example. You can update and run the code as it's being written in the video!

    import { ChatOpenAI } from "@langchain/openai";import { PromptTemplate } from "@langchain/core/prompts";const prompt = PromptTemplate.fromTemplate(`Tell me a joke about {subject}`);const model = new ChatOpenAI({});const chain = prompt.pipe(model.bind({ stop: ["\n"] }));const result = await chain.invoke({ subject: "bears" });console.log(result);/*  AIMessage {    contents: "Why don't bears use cell phones?"  }*/

#### API Reference:

*   [ChatOpenAI](https://api.js.langchain.com/classes/langchain_openai.ChatOpenAI.html) from `@langchain/openai`
*   [PromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.PromptTemplate.html) from `@langchain/core/prompts`

### Attaching function call information[​](#attaching-function-call-information "Direct link to Attaching function call information")

Interactive tutorial

The screencast below interactively walks through an example. You can update and run the code as it's being written in the video!

    import { ChatOpenAI } from "@langchain/openai";import { PromptTemplate } from "@langchain/core/prompts";const prompt = PromptTemplate.fromTemplate(`Tell me a joke about {subject}`);const model = new ChatOpenAI({});const functionSchema = [  {    name: "joke",    description: "A joke",    parameters: {      type: "object",      properties: {        setup: {          type: "string",          description: "The setup for the joke",        },        punchline: {          type: "string",          description: "The punchline for the joke",        },      },      required: ["setup", "punchline"],    },  },];const chain = prompt.pipe(  model.bind({    functions: functionSchema,    function_call: { name: "joke" },  }));const result = await chain.invoke({ subject: "bears" });console.log(result);/*  AIMessage {    content: "",    additional_kwargs: {      function_call: {        name: "joke",        arguments: '{\n  "setup": "Why don\'t bears wear shoes?",\n  "punchline": "Because they have bear feet!"\n}'      }    }  }*/

#### API Reference:

*   [ChatOpenAI](https://api.js.langchain.com/classes/langchain_openai.ChatOpenAI.html) from `@langchain/openai`
*   [PromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.PromptTemplate.html) from `@langchain/core/prompts`

PromptTemplate + LLM + OutputParser[​](#prompttemplate--llm--outputparser "Direct link to PromptTemplate + LLM + OutputParser")
-------------------------------------------------------------------------------------------------------------------------------

Interactive tutorial

The screencast below interactively walks through an example. You can update and run the code as it's being written in the video!

We can also add in an output parser to conveniently transform the raw LLM/ChatModel output into a consistent string format:

    import { ChatOpenAI } from "@langchain/openai";import { PromptTemplate } from "@langchain/core/prompts";import { RunnableSequence } from "@langchain/core/runnables";import { StringOutputParser } from "@langchain/core/output_parsers";const model = new ChatOpenAI({});const promptTemplate = PromptTemplate.fromTemplate(  "Tell me a joke about {topic}");const outputParser = new StringOutputParser();const chain = RunnableSequence.from([promptTemplate, model, outputParser]);const result = await chain.invoke({ topic: "bears" });console.log(result);/*  "Why don't bears wear shoes?\n\nBecause they have bear feet!"*/

#### API Reference:

*   [ChatOpenAI](https://api.js.langchain.com/classes/langchain_openai.ChatOpenAI.html) from `@langchain/openai`
*   [PromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.PromptTemplate.html) from `@langchain/core/prompts`
*   [RunnableSequence](https://api.js.langchain.com/classes/langchain_core_runnables.RunnableSequence.html) from `@langchain/core/runnables`
*   [StringOutputParser](https://api.js.langchain.com/classes/langchain_core_output_parsers.StringOutputParser.html) from `@langchain/core/output_parsers`

* * *

#### Help us out by providing feedback on this documentation page:

[

Previous

Cookbook

](/v0.1/docs/expression_language/cookbook/)[

Next

Multiple chains

](/v0.1/docs/expression_language/cookbook/multiple_chains/)

Community

*   [Discord](https://discord.gg/cU2adEyC7w)
*   [Twitter](https://twitter.com/LangChainAI)

GitHub

*   [Python](https://github.com/langchain-ai/langchain)
*   [JS/TS](https://github.com/langchain-ai/langchainjs)

More

*   [Homepage](https://langchain.com)
*   [Blog](https://blog.langchain.dev)

Copyright © 2024 LangChain, Inc.