如何使用輸出修正解析器
這個 輸出解析器 包裝了另一個輸出解析器,並且在第一個解析器失敗時,它會調用另一個 LLM 來修正任何錯誤。
但除了拋出錯誤之外,我們還可以做其他事情。具體來說,我們可以將格式錯誤的輸出以及格式化指示傳遞給模型,並要求它修正。
對於這個範例,我們將使用上面的 Pydantic 輸出解析器。以下是當我們傳遞不符合架構的結果時會發生的情況
from typing import List
from langchain_core.exceptions import OutputParserException
from langchain_core.output_parsers import PydanticOutputParser
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
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)
misformatted = "{'name': 'Tom Hanks', 'film_names': ['Forrest Gump']}"
try:
parser.parse(misformatted)
except OutputParserException as e:
print(e)
Invalid json output: {'name': 'Tom Hanks', 'film_names': ['Forrest Gump']}
For troubleshooting, visit: https://langchain-python.dev.org.tw/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE
現在我們可以建構和使用 OutputFixingParser
。這個輸出解析器以另一個輸出解析器作為參數,但也包含一個 LLM,用於嘗試修正任何格式錯誤。
from langchain.output_parsers import OutputFixingParser
new_parser = OutputFixingParser.from_llm(parser=parser, llm=ChatOpenAI())
API 參考:OutputFixingParser
new_parser.parse(misformatted)
Actor(name='Tom Hanks', film_names=['Forrest Gump'])
查找關於 OutputFixingParser 的 API 文件。