当前位置: 首页 > news >正文

零基础langchain实战二:大模型输出格式化成json

零基础langchain实战一:模型、提示词和解析器-CSDN博客

书接上文

大模型输出格式化

在下面例子中:我们需要将大模型的输出格式化成json。

import os
from dotenv import load_dotenvload_dotenv()  # 加载 .env 文件
api_key = os.getenv("DEEPSEEK_API_KEY")from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="deepseek-chat",temperature=0.0,max_tokens=None,timeout=None,max_retries=2,base_url="https://api.deepseek.com",api_key=api_key,
)

 调用ResponseSchema定义输出格式json:

最后生成的json格式为:

from langchain.output_parsers import ResponseSchema
from langchain.output_parsers import StructuredOutputParseraffection_schema = ResponseSchema(name="affection", description="评价这段话总体的情感是积极的还是消极的,并为其打分,输出为-1.0 至 1.0 的一位小数")
positive_content_schema = ResponseSchema(name="positive", description="总结这段话评价了物品的哪些优点,列举出物品的优点。如果没有输出 None")
negative_content_schema = ResponseSchema(name="negative", description="总结这段话评价了物品的哪些缺点,列举出物品的缺点。如果没有输出 None")response_schema = [affection_schema, positive_content_schema, negative_content_schema]

因此实例化三个ResponseSchema,一个相当于json中的一个key。

并将三个实例添加到列表中。

output_parser = StructuredOutputParser.from_response_schemas(response_schema)
format_instructions = output_parser.get_format_instructions()

StructuredOutputParser:创建一个 结构化输出解析器,用于将 LLM 的文本输出解析为预定义的结构化格式。

format instructions:生成 格式化指令,这些指令会直接插入到提示模板中,指导 LLM 如何按结构化格式输出结果。

按照之前的方法定义system_prompt:

from langchain.prompts import ChatPromptTemplateprompt = """下面这段话是用户评价商品的一段话 \请你帮忙判断这段话总体来说为“好评”还是“差评” \告诉我用户为物品的哪些特征打“好评” \哪些特征打差评text:{comment}{format_instructions}
"""prompt_template = ChatPromptTemplate.from_template(prompt)prompt_template.messages[0].prompt
comment = """尺码正常买就行,不用买太大。 \鞋底非常高~鞋楦较宽,高脚背胖脚也能穿。 \鞋底非常软弹,很容易踩开,确实超出预期。 \鞋子非常轻,真的很轻哈哈哈~差不多和竞训碳板鞋一样轻了[爱心_blue][爱心_blue]。 \因为是防泼水鞋面嘛,所以鞋面有点不透气,室外温度30度穿这鞋会有点热,可以秋天再入手。 \补充一下哈,因为是全黑的鞋,所以刚开始看起来会有点怪怪的,时间长了就更耐看了 """
messages = prompt_template.format_messages(comment = comment,format_instructions = format_instructions)print(messages[0].content)

输出如下:

调用大模型:

response = llm.invoke(messages)
print(response.content)

输出如下:

最后调用先前的 结构化输出解析器 将大模型输出结果解析成json格式:

output_dict = output_parser.parse(response.content)

最后的结果为:

总结:

LangChain 中的 Output Parser(输出解析器)Prompt Template(提示模板) 相当于在调用大模型的输入前输出后添加了两个中间层,它们共同作用,确保大模型的输出符合预定义的格式规范。这种设计的核心目标是让大模型的输出更结构化、可解析、可验证,从而满足实际应用的需求。

Q&A:

  •         为什么需要这两个中间层?

1, 解决自由文本的不确定性

大模型默认输出是自由文本,但实际应用中需要结构化数据(如 JSON、表格)。例如,智能客服需要提取订单号、价格、物流信息等字段。

示例:如果用户问“我的订单什么时候到货?”,模型需要从回答中提取字段,而不是返回一段话。


 2,提高开发效率和可维护性
通过预定义格式,开发者无需手动处理自由文本的解析逻辑,框架自动完成字段提取和类型校验。
优势:
        减少代码量(如 50% 以上的开发效率提升)。
        错误隔离性强(格式校验失败时抛出明确异常,如 OutputParserException)。


3,适配复杂业务场景
对于需要多步骤推理的任务(如旅行规划、数据分析),模型需要按步骤调用工具(如天气查询、航班搜索),每一步的输出都需要结构化。

http://www.lqws.cn/news/555283.html

相关文章:

  • 【SpringSecurity鉴权】
  • 深入剖析AI大模型:Dify的介绍
  • centos指令
  • 利用GPU加速TensorFlow
  • 一文读懂Kubernetes(K8s)
  • 设计模式 (四)
  • Gradio全解13——MCP详解(4)——TypeScript包命令:npm与npx
  • maven多模块、多层级项目 如何只构建指定的项目
  • TypeScript 中的 WebSocket 入门
  • stream使用案例
  • 【Docker基础】Docker容器管理:docker stats及其参数详解
  • JavaScript中Object()的解析与应用
  • 深入详解:决策树算法的概念、原理、实现与应用场景
  • 思维提升篇-数学抽象与计算机实现
  • ChatboxAI 搭载 GPT 与 DeepSeek,引领科研与知识库管理变革
  • 华为云Flexus+DeepSeek征文|利用华为云一键部署的Dify平台构建高效智能电商客服系统实战
  • 我的世界模组开发进阶教程——机械动力的数据生成(2)
  • 系统架构设计师论文分享-论ATAM的使用
  • nginx基本使用 linux(mac下的)
  • 计算机网络——概述
  • AI代码助手实践指南
  • Linux-读者写者问题
  • 【世纪龙科技】新能源汽车动力电池总成装调与检修教学软件
  • 如何在anaconda上创建虚拟环境--windows下
  • 大模型在急性冠脉综合征预测及诊疗方案制定中的应用研究
  • C++算法学习专题:双指针
  • (五)神经网络
  • 《Go语言高级编程》RPC 入门
  • 思科交换机接口显示inactive原因
  • c# 比较两个list 之间元素差异