> For the complete documentation index, see [llms.txt](https://altero.gitbook.io/langchain-book-by-altero/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://altero.gitbook.io/langchain-book-by-altero/ch03-output-parser/08.-output-fixing-parser.md).

# 08. Output Fixing Parser

`OutputFixingParser` menyediakan kemampuan untuk secara otomatis memperbaiki kesalahan yang mungkin terjadi selama proses penguraian output. Pada dasarnya dirancang untuk membungkus parser lain, seperti `PydanticOutputParser`, dan jika parser tersebut mengembalikan output atau kesalahan dalam format yang tidak dapat ditangani, parser tersebut akan melakukan pemanggilan LLM tambahan untuk memperbaiki kesalahan tersebut.

Kunci dari pendekatan ini adalah, jika upaya pertama menghasilkan hasil yang tidak sesuai dengan skema, `OutputFixingParser` secara otomatis mengenali output yang cacat dan mengirimkannya kembali ke model dengan instruksi baru untuk memperbaikinya. Dengan demikian, instruksi perbaikan harus menunjukkan dengan tepat kesalahannya dan menyertakan instruksi khusus untuk merekonstruksi data dalam format yang benar.

Sebagai contoh, Anda mungkin telah mencoba menggunakan `PydanticOutputParser` untuk menghasilkan output yang sesuai dengan skema data tertentu, tetapi menemukan bahwa beberapa field hilang atau tipe datanya salah. Dalam kasus ini, `OutputFixingParser` mengambil langkah berikutnya dan mengirimkan permintaan baru ke LLM dengan instruksi untuk memperbaiki kesalahan tersebut. Berdasarkan instruksi ini, LLM akan menghasilkan output baru dengan kesalahan yang telah diperbaiki.

```python
# File konfigurasi untuk mengelola API KEY sebagai variabel lingkungan
from dotenv import load_dotenv

# Memuat informasi KUNCI API
load_dotenv()
```

```
True
```

```python
from langchain_openai import ChatOpenAI
from langchain.output_parsers import PydanticOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from typing import List


class Actor(BaseModel):
    name: str = Field(description="name of an actor")
    film_names: List[str] = Field(description="list of names of films they starred in")


actor_query = "Generate the filmography for a random actor."

parser = PydanticOutputParser(pydantic_object=Actor)
```

```python
# secara tidak sengaja memasukkan format yang salah
misformatted = "{'name': 'Tom Hanks', 'film_names': ['Forrest Gump']}"

# mencoba mem-parsing data yang dimasukkan dalam format yang salah
parse_data = parser.parse(misformatted)

# Keluaran code tersebut akan menghasilkan kesalahan
```

Mari gunakan `OutputFixingParser` untuk memperbaiki format yang salah.

```python
from langchain.output_parsers import OutputFixingParser

new_parser = OutputFixingParser.from_llm(parser=parser, llm=ChatOpenAI())
```

```python
# output salah format
misformated
```

```
{'name': 'Tom Hanks', 'film_names': ['Forrest Gump']}
```

```python
# gunakan OutputFixingParser untuk mem-parsing keluaran yang salah format
actor = new_parser.parse(misformatted)
```

```python
# hasil yang diuraikan
actor
```

```
name='Tom Hanks' film_names=['Forrest Gump']
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://altero.gitbook.io/langchain-book-by-altero/ch03-output-parser/08.-output-fixing-parser.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
