
JsonOutputParser JsonOutputParser即JSON输出解析器 是一种用于将大模型的自由文本输出转换为结构化JSON数据的工具。 本案例是指定提示词指明返回 json 格式 # 创建聊天提示模板包含系统角色设定和用户问题输入chat_promptChatPromptTemplate.from_messages([(system,你是一个{role}请简短回答我提出的问题结果返回json格式q字段表示问题a字段表示答案。),(human,请回答:{question})])# 使用指定的角色和问题生成具体的提示内容promptchat_prompt.invoke({role:AI助手,question:什么是LangChain简洁回答100字以内})logger.info(prompt)# 初始化模型modelinit_chat_model(modelqwen-plus,model_provideropenai,api_keyos.getenv(aliQwen-api),base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1)# 调用模型获取回答结果resultmodel.invoke(prompt)logger.info(f模型原始输出:\n{result})print(**60)# 创建JSON输出解析器实例parserJsonOutputParser()# 调用解析器处理结果数据将输入转换为JSON格式的响应responseparser.invoke(result)logger.info(f解析后的结构化结果:\n{response})logger.info(\n)# 打印类型logger.info(f结果类型:{type(response)})# class dictStrOutputParser 字符串解析器StrOutputParser 它是LangChain中最简单的输出解析器它可以简单地将任何输入转换为字符串。 从结果中提取content字段转换为字符串输出。 # 创建聊天提示模板包含系统角色设定和用户问题输入chat_promptChatPromptTemplate.from_messages([(system,你是一个{role}请简短回答我提出的问题),(human,请回答:{question})])# 使用指定的角色和问题生成具体的提示内容promptchat_prompt.invoke({role:AI助手,question:什么是LangChain简洁回答100字以内})logger.info(prompt)# 初始化聊天模型modelinit_chat_model(modelqwen-plus,model_provideropenai,api_keyos.getenv(aliQwen-api),base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1)# 调用模型获取回答结果resultmodel.invoke(prompt)logger.info(f模型原始输出:\n{result})# 创建字符串输出解析器用于解析模型返回的结果parserStrOutputParser()# 打印解析后的结构化结果responseparser.invoke(result)logger.info(f解析后的结构化结果:\n{response})logger.info(\n)# 打印类型logger.info(f结果类型:{type(response)})StructuredOutput_Pydantic PydanticOutputParser 是 LangChain 输出解析器体系中最常用、最强大的结构化解析器之一。 它与 JsonOutputParser 类似但功能更强 —— 能直接基于 Pydantic 模型 定义输出结构 并利用其类型校验与自动文档能力。 对于结构更复杂、具有强类型约束的需求PydanticOutputParser 则是最佳选择。 它结合了Pydantic模型的强大功能提供了类型验证、数据转换等高级功能 importosfromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportPydanticOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromloguruimportloggerfrompydanticimportBaseModel,Field,field_validatorclassProduct(BaseModel): 产品信息模型类用于定义产品的结构化数据格式 属性: name (str): 产品名称 category (str): 产品类别 description (str): 产品简介长度必须大于等于10个字符 name:strField(description产品名称)category:strField(description产品类别)description:strField(description产品简介)field_validator(description)defvalidate_description(cls,value): 验证产品简介字段的长度 参数: value (str): 待验证的产品简介文本 返回: str: 验证通过的产品简介文本 异常: ValueError: 当产品简介长度小于10个字符时抛出 iflen(value)10:raiseValueError(产品简介长度必须大于等于10)returnvalue# 创建Pydantic输出解析器实例用于解析模型输出为Product对象parserPydanticOutputParser(pydantic_objectProduct)# 获取格式化指令用于指导模型输出符合Product模型的JSON格式format_instructionsparser.get_format_instructions()# 创建聊天提示模板包含系统消息和人类消息prompt_templateChatPromptTemplate.from_messages([(system,你是一个AI助手你只能输出结构化的json数据\n{format_instructions}),(human,请你输出标题为{topic}的新闻内容)])# 格式化提示消息填充主题和格式化指令promptprompt_template.format_messages(topic华为Mate X7,format_instructionsformat_instructions)# 记录格式化后的提示消息logger.info(prompt)# 创建模型modelinit_chat_model(modelqwen-plus,model_provideropenai,api_keyos.getenv(aliQwen-api),base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1)# 调用模型获取结果resultmodel.invoke(prompt)# 记录模型返回的结果logger.info(f模型原始输出:\n{result.content})# 使用解析器将模型结果解析为Product对象responseparser.invoke(result)# 打印解析后的结构化结果logger.info(f解析后的结构化结果:\n{response})# 打印类型logger.info(f结果类型:{type(response)})StructuredOutput_TypedDictllminit_chat_model(modelqwen-plus,model_provideropenai,api_keyos.getenv(aliQwen-api),base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1)classAnimal(TypedDict):animal:Annotated[str,动物]emoji:Annotated[str,表情]classAnimalList(TypedDict):animals:Annotated[list[Animal],动物与表情列表]# ListAnimalmessages[{role:user,content:任意生成三种动物以及他们的 emoji 表情}]llm_with_structured_outputllm.with_structured_output(AnimalList)respllm_with_structured_output.invoke(messages)print(resp)