!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/)
        
    *   [LangChain Expression Language (LCEL)](/v0.1/docs/expression_language/)
*   [Modules](/v0.1/docs/modules/)
    
    *   [Model I/O](/v0.1/docs/modules/model_io/)
        
        *   [Quickstart](/v0.1/docs/modules/model_io/quick_start/)
        *   [Concepts](/v0.1/docs/modules/model_io/concepts/)
        *   [Prompts](/v0.1/docs/modules/model_io/prompts/)
            
        *   [LLMs](/v0.1/docs/modules/model_io/llms/)
            
        *   [Chat Models](/v0.1/docs/modules/model_io/chat/)
            
        *   [Model I/O](/v0.1/docs/modules/model_io/)
        *   [Output Parsers](/v0.1/docs/modules/model_io/output_parsers/)
            
            *   [Quick Start](/v0.1/docs/modules/model_io/output_parsers/quick_start/)
            *   [Custom output parsers](/v0.1/docs/modules/model_io/output_parsers/custom/)
            *   [Output Parser Types](/v0.1/docs/modules/model_io/output_parsers/types/)
                
                *   [String output parser](/v0.1/docs/modules/model_io/output_parsers/types/string/)
                *   [HTTP Response Output Parser](/v0.1/docs/modules/model_io/output_parsers/types/http_response/)
                *   [JSON Output Functions Parser](/v0.1/docs/modules/model_io/output_parsers/types/json_functions/)
                *   [Bytes output parser](/v0.1/docs/modules/model_io/output_parsers/types/bytes/)
                *   [Combining output parsers](/v0.1/docs/modules/model_io/output_parsers/types/combining_output_parser/)
                *   [List parser](/v0.1/docs/modules/model_io/output_parsers/types/csv/)
                *   [Custom list parser](/v0.1/docs/modules/model_io/output_parsers/types/custom_list_parser/)
                *   [Datetime parser](/v0.1/docs/modules/model_io/output_parsers/types/datetime/)
                *   [OpenAI Tools](/v0.1/docs/modules/model_io/output_parsers/types/openai_tools/)
                *   [Auto-fixing parser](/v0.1/docs/modules/model_io/output_parsers/types/output_fixing/)
                *   [Structured output parser](/v0.1/docs/modules/model_io/output_parsers/types/structured/)
                *   [XML output parser](/v0.1/docs/modules/model_io/output_parsers/types/xml/)
    *   [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/)
*   [Modules](/v0.1/docs/modules/)
*   [Model I/O](/v0.1/docs/modules/model_io/)
*   [Output Parsers](/v0.1/docs/modules/model_io/output_parsers/)
*   [Output Parser Types](/v0.1/docs/modules/model_io/output_parsers/types/)
*   Auto-fixing parser

Auto-fixing parser
==================

This output parser wraps another output parser, and in the event that the first one fails it calls out to another LLM to fix any errors.

But we can do other things besides throw errors. Specifically, we can pass the misformatted output, along with the formatted instructions, to the model and ask it to fix it.

For this example, we'll use the structured output parser. Here's what happens if we pass it a result that does not comply with the schema:

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 { z } from "zod";import { ChatOpenAI } from "@langchain/openai";import {  StructuredOutputParser,  OutputFixingParser,} from "langchain/output_parsers";export const run = async () => {  const parser = StructuredOutputParser.fromZodSchema(    z.object({      answer: z.string().describe("answer to the user's question"),      sources: z        .array(z.string())        .describe("sources used to answer the question, should be websites."),    })  );  /** This is a bad output because sources is a string, not a list */  const badOutput = `\`\`\`json  {    "answer": "foo",    "sources": "foo.com"  }  \`\`\``;  try {    await parser.parse(badOutput);  } catch (e) {    console.log("Failed to parse bad output: ", e);    /*    Failed to parse bad output:  OutputParserException [Error]: Failed to parse. Text: ```json      {        "answer": "foo",        "sources": "foo.com"      }      ```. Error: [      {        "code": "invalid_type",        "expected": "array",        "received": "string",        "path": [          "sources"        ],        "message": "Expected array, received string"      }    ]    at StructuredOutputParser.parse (/Users/ankushgola/Code/langchainjs/langchain/src/output_parsers/structured.ts:71:13)    at run (/Users/ankushgola/Code/langchainjs/examples/src/prompts/fix_parser.ts:25:18)    at <anonymous> (/Users/ankushgola/Code/langchainjs/examples/src/index.ts:33:22)   */  }  const fixParser = OutputFixingParser.fromLLM(    new ChatOpenAI({ temperature: 0 }),    parser  );  const output = await fixParser.parse(badOutput);  console.log("Fixed output: ", output);  // Fixed output:  { answer: 'foo', sources: [ 'foo.com' ] }};

#### API Reference:

*   [ChatOpenAI](https://api.js.langchain.com/classes/langchain_openai.ChatOpenAI.html) from `@langchain/openai`
*   [StructuredOutputParser](https://api.js.langchain.com/classes/langchain_output_parsers.StructuredOutputParser.html) from `langchain/output_parsers`
*   [OutputFixingParser](https://api.js.langchain.com/classes/langchain_output_parsers.OutputFixingParser.html) from `langchain/output_parsers`

* * *

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

[

Previous

OpenAI Tools

](/v0.1/docs/modules/model_io/output_parsers/types/openai_tools/)[

Next

Structured output parser

](/v0.1/docs/modules/model_io/output_parsers/types/structured/)

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.