输出解析器 (Output Parsers)
模型的原始输出通常是文本(str)或消息对象(AIMessage)。在开发应用时,我们往往需要结构化的数据(如 JSON、List、Date 等)以便程序处理。输出解析器就是为了解决这个问题。
常见解析器
1. StrOutputParser (最常用)
将 AIMessage 或其他消息对象直接转换为字符串内容。这在 LCEL 链中非常常用,用于简化输出。
python
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
# 假设 message 是 model.invoke() 的结果
parsed_output = parser.invoke(message)
# parsed_output 直接就是字符串 "..."2. JsonOutputParser
要求模型输出 JSON 格式,并将其解析为 Python 字典。
注意: 配合 JsonOutputParser 使用时,通常需要在提示词中明确指示模型“请以 JSON 格式输出”。
python
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
# 定义期望的数据结构
class Joke(BaseModel):
setup: str = Field(description="笑话的铺垫")
punchline: str = Field(description="笑话的笑点")
parser = JsonOutputParser(pydantic_object=Joke)
# 提示词中注入格式说明
prompt = ChatPromptTemplate.from_template(
"讲一个关于{topic}的笑话。\n{format_instructions}"
)
# 初始化模型
model = ChatOpenAI(model="gpt-3.5-turbo")
# 链式调用
chain = prompt | model | parser
response = chain.invoke({
"topic": "冰淇淋",
"format_instructions": parser.get_format_instructions()
})
print(response)
# 输出: {'setup': '为什么冰淇淋从不被邀请参加派对?', 'punchline': '因为它们一来就融化了气氛!'}
# 类型为 dict3. PydanticOutputParser
功能与 JsonOutputParser 类似,但提供更严格的校验,直接返回 Pydantic 对象实例。
最佳实践
在构建 LCEL 链时,解析器通常是链的最后一环:
python
chain = prompt | model | StrOutputParser()这样 chain.invoke(...) 的返回值就是直接可用的数据,而不是需要二次处理的消息对象。
恭喜你完成了初级教程!接下来,让我们进入 中级教程:构建应用,学习如何将这些组件串联起来。
LangChain中文文档