Lanchain结构化输出---JsonOutputParser + Pydantic:强类型结构化解析

Step 1:

用 Pydantic 定义数据结构(你期望的输出格式)

python 复制代码
# BaseModel 是 Python 中一个非常强大的库(Pydantic)提供的基类。你可以把它理解为一个"严格的表单模板"
class ReviewExtract(BaseModel):  
# Field(description=...) 的作用:这里的描述是给大模型看的  
sentiment: str = Field(description="情感倾向:positive/negative/neutral")  
aspects: list[str] = Field(description="提到的产品维度,如 亮度/色温/安装")  
return_related: bool = Field(description="是否涉及退货诉求")  
pain_point: str = Field(description="一句话概括客户痛点")  


'''  
output:

ReviewExtract: 一份数据结构(表格长什么样?)  
'''

Step 2:

创建解析器,绑定 Pydantic 模型

python 复制代码
# JsonOutputParser(pydantic_object=ReviewExtract):创建了一个专门负责"解析 JSON"的工具,并且把刚才定义的"表单模板(ReviewExtract)"交给了它
json_parser = JsonOutputParser(pydantic_object=ReviewExtract)
# get_format_instructions() 会生成一段「格式要求」文本
# 告诉模型必须按 JSON 格式输出,且字段必须匹配 ReviewExtract 的定义
format_instructions = json_parser.get_format_instructions()  


'''  
output:

json_parser: 解析 JSON 的工具  
format_instructions: 一段大模型能读懂的文字指令  
'''

Step 3:

把格式指令注入 Prompt,让模型按要求输出

python 复制代码
# ChatPromptTemplate.from_messages:定义提示词模版
review_prompt = ChatPromptTemplate.from_messages([  
("system", "你是电商评论分析师。请从以下评论中提取信息。\n{format}"),  
("human", "{review}"),  
]).partial(format=format_instructions) # .partial() 预填固定变量  
'''  
format_instructions 通常是由 LangChain 的输出解析器(Output Parser,比如 JsonOutputParser)生成的。它是一段由代码自动生成的"格式要求说明"(例如:"请仅输出一个合法的 JSON 对象,包含 sentiment 和 summary 两个字段...")。  
.partial() 方法的作用是提前把格式指令填充到模板的 {format} 占位符中。  
为什么要这么做? 因为格式要求是固定的,而具体的评论({review})是每次调用时才传入的。提前固定格式,后续每次分析评论时,就只需要动态传入 {review} 即可,代码更加模块化和整洁  
'''  


'''  
output:

review_prompt:一个半成品的提示词  
'''

Step 4:

构建新链:Prompt → LLM → JsonOutputParser

python 复制代码
# 左输出 = 右输入

review_chain = review_prompt | llm | json_parser 


'''  
output:

review_chain:它是一个全自动流水线,你往里面塞入一条原始评论,它就会自动完成"拼装提示词 -> 调用大模型 -> 提取并校验 JSON"这一整套复杂操作,最后直接吐出一个干干净净的 Python 字典给你  
'''

Step 5:

调用并获取结构化结果

python 复制代码
review_result = review_chain.invoke({  
"review": "这灯太暗了,装也难装,想退货。"  
})  
'''  
output:

review_result: 极其干净的 Python 字典  
'''
相关推荐
GISer_Jing6 小时前
Agent核心内容
后端·ai·langchain
Flynn Liang9 小时前
可观测性与成本治理:一次对话的 17 个观测点
java·langchain·可观测性·micrometer·langchain4j·token 成本·llm 监控
郝学胜-神的一滴18 小时前
LangChain Skill 实现(渐进披露 On-Demand Skill,LangChain 官方 Deep Agent Skill 模式)
开发语言·python·langchain·numpy
Flynn Liang1 天前
Rerank 与上下文工程:重排、压缩与引用溯源的收益边界
langchain·rag·langchain4j·rerank·上下文工程·引用溯源
Flynn Liang2 天前
RAG 评估体系:黄金集、检索指标与 LLM-as-Judge 落地
java·langchain·rag·评估·langchain4j·检索指标
啊吧怪不啊吧3 天前
LangChain之绑定工具
langchain
努力的小郑3 天前
数据查到了,回答去哪儿了?一次百炼 + LangChain 排查实录
后端·langchain·agent
承渊政道4 天前
LangChainAI应用开发框架【LangChain与LangGraph介绍】
langchain·大模型·langgraph·ai应用开发
Flynn Liang4 天前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang4 天前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j