零基础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.pswp.cn/bicheng/86729.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86729.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86729.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高通手机跑AI系列之——人脸变化算法

环境准备 手机 测试手机型号:Redmi K60 Pro 处理器:第二代骁龙8移动--8gen2 运行内存:8.0GB ,LPDDR5X-8400,67.0 GB/s 摄像头:前置16MP后置50MP8MP2MP AI算力:NPU 48Tops INT8 &&…

TortoiseSVN 安装教程

前言 TortoiseSVN 是一款流行的 免费开源 的 Subversion (SVN) 客户端,专门为 Windows 操作系统 设计。它通过 Windows 资源管理器集成 提供直观的图形化界面,使用户可以轻松管理版本控制的文件和目录,无需使用命令行。 主要特点 资源管理器…

多张图片生成PDF每张图片生成pdf的一页

需要的库 <!-- 生成pdf--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><!-- https://mvnrepository.com/artifact/commons-net/commons-n…

Java基础 Map集合框架 LinkedHashMap

LinkedHashMap LinkedHashMap类架构与继承关系核心特性继承自 HashMap有序性插入顺序访问顺序 双向链表结构非线程安全1.并发修改导致数据丢失2.并发迭代导致 ConcurrentModificationException3.并发修改导致链表结构破坏解决方案1. 使用 Collections.synchronizedMap&#xff…

MySQL 离线安装MariaDB

描述 离线环境下安装MySQL数据库&#xff0c;也就是MariaDB 操作 1、找到自带的mysql rpm -qa | grep -i ^mysql-rpm -qa | grep -i ^maria-2、卸载对应的包 rpm --nodeps -ev mysql-libs-5.1.73-8.el6_8.x86_64安装 MariaDb 离线安装包官网下载&#xff1a;地址 这个文…

JSON简介及其应用

JSON简介及其应用 A Brief Introduction and Applications of JSON By JacksonML 1. JSON的概念 JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式&#xff0c;采用键值对&#xff08;key-value&#xff09;的方式组织数据&#xff0c;…

RNN(循环神经网络)与LSTM(长短期记忆网络)输出的详细对比分析

今天在与同事探讨RNN时&#xff0c;引出了一个主题&#xff0c;RNN和LSTM的输出有什么区别。 以下是关于传统RNN&#xff08;循环神经网络&#xff09;与LSTM&#xff08;长短期记忆网络&#xff09;隐藏层内容、输出结果及模型区别的详细对比分析&#xff0c;结合结构原理、数…

【闲谈】技术债:软件开发的隐形杀手

编程中的“技术债”&#xff1a;隐形杀手与化解之道 在软件开发的世界里&#xff0c;我们常谈性能、安全、架构设计、用户体验等话题&#xff0c;但有一个常被忽视的概念却如影随形、悄然吞噬着项目的健康——技术债&#xff08;Technical Debt&#xff09;。 本文将带你深入…

Elasticsearch | 索引和模板字段管理:增加新字段的详细操作

关注CodingTechWork 背景介绍 Elasticsearch 是一款基于 Lucene 的搜索和数据分析引擎&#xff0c;广泛应用于日志分析、全文检索等领域。在使用 Elasticsearch 时&#xff0c;字段是存储在索引中的数据单位&#xff0c;字段的定义决定了数据的存储方式及其检索效率。因此&…

HTML表格中<tfoot>标签用法详解

在HTML中&#xff0c;<tfoot>标签用于定义表格的页脚&#xff08;表脚&#xff09;&#xff0c;通常包含汇总信息&#xff08;如总计、平均值等&#xff09;。其核心特点和使用方法如下&#xff1a; 基本特性 位置灵活 <tfoot>必须位于<table>内&#xff0c…

深度学习正负样本比例的影响及其调节方法

在深度学习中&#xff0c;数据是模型性能的决定性因素之一。特别是在二分类问题中&#xff0c;正负样本的比例对模型训练的影响尤为显著。本文将探讨正负样本比例对深度学习的影响&#xff0c;并给出相应的调节方法和代码示例。 什么是正负样本比例&#xff1f; 在二分类问题…

【公司经营】安全公司产品经营

一、产品经营 1.1 产品矩阵设计方法&#xff1a;风险场景驱动​ ​分层产品架构​ ​基础层​&#xff1a;防火墙/WAF/EDR&#xff08;标准化硬件软件&#xff09;​分析层​&#xff1a;SOC平台/XDR&#xff08;年订阅制&#xff0c;SaaS化交付&#xff09;​响应层​&#…

鸿蒙 Scroll 组件深度解析:丝滑滚动交互全场景实现

一、引言&#xff1a;Scroll—— 内容溢出场景的交互中枢 在鸿蒙应用开发中&#xff0c;当界面内容超出屏幕可视范围时&#xff0c;Scroll 容器组件成为实现流畅滚动交互的核心方案。作为从 API 7 开始支持的基础组件&#xff0c;它通过极简的属性配置与强大的滚动控制能力&am…

第十节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 菜单管理(下)

Vben5 系列文章目录 💻 基础篇 ✅ 第一节:Vben Admin 最新 v5.0 (vben5) 快速入门 ✅ 第二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - Python Flask 后端开发详解(附源码) ✅ 第三节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 对接后端登录接口(上) ✅ 第四节:Vben Ad…

c#激光设备行业ERP软件进销存软件库存管理软件财务管理软件

# 激光设备行业ERP软件进销存软件库存管理软件财务管理软件 # 开发背景 本软件是给广东河源某客户开发的激光设备行业ERP软件进销存软件库存管理软件财务管理软件 # 功能描述 软件由基础资料、库存管理、 属性管理、 用户管理、 销售管理、 财务管理。主要功能模块是库存管理…

python学习打卡day57

DAY 57 经典时序模型1 知识点回顾 序列数据的处理&#xff1a; 处理非平稳性&#xff1a;n阶差分处理季节性&#xff1a;季节性差分自回归性无需处理 模型的选择 AR(p) 自回归模型&#xff1a;当前值受到过去p个值的影响MA(q) 移动平均模型&#xff1a;当前值收到短期冲击的影响…

python小记(十七):Python 使用“继承”来管理yaml文件

Python 使用“继承”来管理yaml文件 引言 引言 在 Python 中有时候我们会把参数都储存在yaml文件中然后进行调用。当我们在进行一个很大的项目的时候&#xff0c;我们可能先需要一个base.yaml文件&#xff0c;然后再使用一个task1.yaml文件进行参数导入&#xff0c;并且task1.…

Windows搭建opencv cuda开发环境并验证是否成功

编译opencv cuda源码 电脑安装cuda 12.0或者11.8&#xff0c;根据你的电脑配置自行选择 下载opencv 源码 git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git 在opencv目录里新建 build 文件夹 cd build后 cmake…

【go】初学者入门环境配置,GOPATH,GOROOT,GOCACHE,以及GoLand使用配置注意

一、环境变量配置步骤 1. 打开环境变量设置 Win R 后输入 sysdm.cpl → 点击 确定在弹出窗口中点击 高级 → 环境变量 2. 配置 GOROOT&#xff08;Go语言安装根目录&#xff09; 作用&#xff1a;告诉系统Go语言的安装位置&#xff08;编译器、标准库等核心文件所在路径&a…

gantt-task-react的改造使用

gantt-task-react的镜像地址 例子 改造1&#xff1a;切断父子关联关系&#xff0c;父为project组件&#xff0c;子为task组件&#xff0c; 原来的功能是task组件拖动会影响到父组件&#xff0c;现在切断两者关联关系&#xff0c;数据都用task组件&#xff0c; 给task组件重…