如何使用输出修复解析器
此 输出解析器 包装了另一个输出解析器,并且在第一个解析器失败时,会调用另一个大语言模型来修复任何错误。
但我们可以做除了抛出错误之外的其他事情。具体来说,我们可以将格式错误的输出连同格式化后的指令一起传递给模型,并让它进行修复。
对于本示例,我们将使用上述 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://python.langchain.com/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE
现在我们可以构建并使用一个 OutputFixingParser。该输出解析器接受另一个输出解析器作为参数,同时还接受一个用于尝试纠正任何格式错误的语言模型(LLM)。
from langchain.output_parsers import OutputFixingParser
new_parser = OutputFixingParser.from_llm(parser=parser, llm=ChatOpenAI())
API 参考:输出修复解析器
new_parser.parse(misformatted)
Actor(name='Tom Hanks', film_names=['Forrest Gump'])
查找 OutputFixingParser 的 API 文档。