【Java-LangChain:使用 ChatGPT API 搭建系统-5】处理输入-思维链推理
第五章,处理输入-思维链推理
在本章中,我们将专注于处理输入,即通过一系列步骤生成有用地输出。
有时,模型在回答特定问题之前需要进行详细地推理。如果您参加过我们之前的课程,您将看到许多这样的例子。有时,模型可能会因为过于匆忙得出结论而在推理过程中出错。因此,我们可以重新构思查询,要求模型在给出最终答案之前提供一系列相关的推理步骤,这样它就可以更长时间、更深入地思考问题。
通常,我们称这种要求模型逐步推理问题的策略为思维链推理
(chain of thought reasoning)。
环境配置
参考第二章的 环境配置小节内容即可。
二,思维链 Prompt
private String delimiter = "###";private String system = "请按照以下步骤回答客户的查询。客户的查询将以四个井号(#)分隔,即 " + delimiter + "。\n" +"\n" +"步骤 1:" + delimiter + " 首先确定用户是否正在询问有关特定产品或产品的问题。产品类别不计入范围。\n" +"\n" +"步骤 2:" + delimiter + " 如果用户询问特定产品,请确认产品是否在以下列表中。所有可用产品:\n" +"\n" +"产品:TechPro 超极本\n" +"类别:计算机和笔记本电脑\n" +"品牌:TechPro\n" +"型号:TP-UB100\n" +"保修期:1 年\n" +"评分:4.5\n" +"特点:13.3 英寸显示屏,8GB RAM,256GB SSD,Intel Core i5 处理器\n" +"描述:一款适用于日常使用的时尚轻便的超极本。\n" +"价格:$799.99\n" +"\n" +"产品:BlueWave 游戏笔记本电脑\n" +"类别:计算机和笔记本电脑\n" +"品牌:BlueWave\n" +"型号:BW-GL200\n" +"保修期:2 年\n" +"评分:4.7\n" +"特点:15.6 英寸显示屏,16GB RAM,512GB SSD,NVIDIA GeForce RTX 3060\n" +"描述:一款高性能的游戏笔记本电脑,提供沉浸式体验。\n" +"价格:$1199.99\n" +"\n" +"产品:PowerLite 可转换笔记本电脑\n" +"类别:计算机和笔记本电脑\n" +"品牌:PowerLite\n" +"型号:PL-CV300\n" +"保修期:1年\n" +"评分:4.3\n" +"特点:14 英寸触摸屏,8GB RAM,256GB SSD,360 度铰链\n" +"描述:一款多功能可转换笔记本电脑,具有响应触摸屏。\n" +"价格:$699.99\n" +"\n" +"产品:TechPro 台式电脑\n" +"类别:计算机和笔记本电脑\n" +"品牌:TechPro\n" +"型号:TP-DT500\n" +"保修期:1年\n" +"评分:4.4\n" +"特点:Intel Core i7 处理器,16GB RAM,1TB HDD,NVIDIA GeForce GTX 1660\n" +"描述:一款功能强大的台式电脑,适用于工作和娱乐。\n" +"价格:$999.99\n" +"\n" +"产品:BlueWave Chromebook\n" +"类别:计算机和笔记本电脑\n" +"品牌:BlueWave\n" +"型号:BW-CB100\n" +"保修期:1 年\n" +"评分:4.1\n" +"特点:11.6 英寸显示屏,4GB RAM,32GB eMMC,Chrome OS\n" +"描述:一款紧凑而价格实惠的 Chromebook,适用于日常任务。\n" +"价格:$249.99\n" +"\n" +"步骤 3:" + delimiter + " 如果消息中包含上述列表中的产品,请列出用户在消息中做出的任何假设,例如笔记本电脑 X 比笔记本电脑 Y 大,或者笔记本电脑 Z 有 2 年保修期。\n" +"\n" +"步骤 4:" + delimiter + " 如果用户做出了任何假设,请根据产品信息确定假设是否正确。\n" +"\n" +"步骤 5:" + delimiter + " 如果用户有任何错误的假设,请先礼貌地纠正客户的错误假设(如果适用)。只提及或引用可用产品列表中的产品,因为这是商店销售的唯一五款产品。以友好的口吻回答客户。\n" +"\n" +"使用以下格式回答问题:\n" +"步骤 1:" + delimiter + " <步骤 1的推理>\n" +"步骤 2:" + delimiter + " <步骤 2 的推理>\n" +"步骤 3:" + delimiter + " <步骤 3 的推理>\n" +"步骤 4:" + delimiter + " <步骤 4 的推理>\n" +"回复客户:{delimiter} <回复客户的内容>\n" +"\n" +"请确保在每个步骤之间使用 {" + delimiter + "} 进行分隔。";
String user = "BlueWave Chromebook 比 TechPro 台式电脑贵多少?";List<ChatMessage> messages = new ArrayList<>();ChatMessage systemMessage = new ChatMessage();systemMessage.setRole("system");systemMessage.setContent(system);messages.add(systemMessage);ChatMessage userMessage = new ChatMessage();userMessage.setRole("user");userMessage.setContent(user);messages.add(userMessage);String message = this.getCompletionFromMessage(messages, 1);log.info("test1:\n{}", message);
步骤 1:### 用户询问特定产品之间的价格差异。步骤 2:### 用户询问的产品是 BlueWave Chromebook 和 TechPro 台式电脑。步骤 3:### 用户假设 BlueWave Chromebook 比 TechPro 台式电脑贵。步骤 4:### 根据产品信息,我们可以确定用户的假设是错误的。回复客户:###TechPro 台式电脑的价格是 $999.99,而 BlueWave Chromebook 的价格是 $249.99。因此,TechPro 台式电脑比 BlueWave Chromebook 贵 $750。请注意,这些是商店销售的唯一五款产品。
String user = delimiter + "你有电视机嘛?" + delimiter;List<ChatMessage> messages = new ArrayList<>();ChatMessage systemMessage = new ChatMessage();systemMessage.setRole("system");systemMessage.setContent(system);messages.add(systemMessage);ChatMessage userMessage = new ChatMessage();userMessage.setRole("user");userMessage.setContent(user);messages.add(userMessage);String message = this.getCompletionFromMessage(messages, 0);log.info("test2:\n{}", message);
步骤 1:### 确定用户是否询问有关特定产品或产品的问题。步骤 2:### 没有电视机在可用产品列表中。回复客户:### 很抱歉,我们目前没有可用的电视机产品。我们的产品范围主要包括计算机和笔记本电脑。如果您对其他产品有任何疑问,请随时告诉我。
三,内心独白
对于某些应用程序,模型的推理过程可能不适合与用户共享。例如,在辅导类应用程序中,我们可能希望鼓励学生自行解决问题,但模型对学生解决方案的推理过程可能会泄露答案。
内心独白是一种可以用来缓解这种情况的策略,这是一种隐藏模型推理过程的高级方法。
内心独白的思想是让模型以一种不会透露答案的方式生成部分输出,这样用户就无法看到完整的推理过程。目标是将这些部分隐藏在一个结构化的格式中,使得传递它们变得容易。然后,在向用户呈现输出之前,对输出进行一些转化,使得只有部分输出是可见的。
String user = delimiter + "你有电视机嘛?" + delimiter;List<ChatMessage> messages = new ArrayList<>();ChatMessage systemMessage = new ChatMessage();systemMessage.setRole("system");systemMessage.setContent(system);messages.add(systemMessage);ChatMessage userMessage = new ChatMessage();userMessage.setRole("user");userMessage.setContent(user);messages.add(userMessage);String message = this.getCompletionFromMessage(messages, 0);//取出最后一行回复内容String lastElement = Arrays.stream(message.split(delimiter)).reduce((first, second) -> second).orElse(null);log.info("test3:\n{}", lastElement);
是的,我们有电视机。我们有多种品牌和型号可供选择。您对哪个品牌或型号感兴趣?
Java快速转换到大模型开发:
配套课程的所有代码已经发布在:https://github.com/Starcloud-Cloud/java-langchain
课程合作请留言
相关文章:
【Java-LangChain:使用 ChatGPT API 搭建系统-5】处理输入-思维链推理
第五章,处理输入-思维链推理 在本章中,我们将专注于处理输入,即通过一系列步骤生成有用地输出。 有时,模型在回答特定问题之前需要进行详细地推理。如果您参加过我们之前的课程,您将看到许多这样的例子。有时…...

java Spring Boot RequestHeader设置请求头,当请求头中没有Authorization 直接400问题解决
我在接口中 写了一个接收请求头参数 Authorization 但是目前代理一个问题 那就是 当请求时 请求头中没有这个Authorization 就会直接因为参数不匹配 找不到指向 这里其实很简单 我们设置 value 为我们需要的字段内容 required 是否必填 我们设置为 false 就可以了 这样 没有也…...

[CISCN2019 华北赛区 Day1 Web5]CyberPunk 二次报错注入
buu上 做点 首先就是打开环境 开始信息收集 发现源代码中存在?file 提示我们多半是包含 我原本去试了试 ../../etc/passwd 失败了 直接伪协议上吧 php://filter/readconvert.base64-encode/resourceindex.phpconfirm.phpsearch.phpchange.phpdelete.php 我们通过伪协议全…...

双机并联逆变器自适应虚拟阻抗下垂控制(Droop)策略Simulink仿真模型
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

8月份,誉天79名学员通过HCIE认证!
八月份,誉天又有79名学员顺利通过了HCIE认证,其中:云计算46人、Datacom14人、云服务8人、存储7人、安全3人、大数据1人。一起祝贺他们吧~...

Quarto 入门教程 (2):如何使用并编译出不同文档
接着上一期内容:手把手教你使用 Quarto 构建文档 (1),本文介绍如何使用 Quarto,并编译出文档(PDF,MS Word,html)等。 安装 根据官方链接,选择适合自己电脑的 Quarto 版本并下载&am…...

【C++设计模式之命令模式:行为型】分析及示例
简介 命令模式是一种行为型设计模式,它将请求封装成一个对象,从而使不同的请求可以被参数化、队列化或记录化。这种模式允许请求的发送者和接收者进行解耦,同时提供更高的灵活性和可扩展性。 描述 命令模式的核心思想是通过命令对象来封装…...

二、Excel VBA 简单使用
Excel VBA 从入门到出门一、Excel VBA 是个啥?二、Excel VBA 简单使用 👋Excel VBA 简单使用 ⚽️1. 如何在Excel中手动编写VBA代码⚽️2. 如何在 Excel 中运行 VBA 代码⚽️3. 如何在Excel中记录VBA代码⚽️4. 如何在Excel中编辑录制的VBA代码⚽️5. 如…...
获取url后面的参数
方式一 final String queryString request.getQueryString(); System.out.println(queryString); //解码 System.out.println(URLDecoder.decode(queryString, StandardCharsets.UTF_8));测试: pageSize25&pageNum1&sort%5B%27id%27%5Ddesc&sort%5B%…...

python入门篇07-数据容器(序列 集合 字典,json初识)基础(下)
全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文传送门 2. python基础使用2.1 序列2.1.1 序列定义2.1.2 序列参数解释2.1.3 列表list切片2.1.4 元组tuple切片2.1.5 字符串str切片 2.2 集合定义2.2.1 set集合-基本语法2.2.2 set集合-添加元素.add()2.2.3 set集合- 移除元…...

阿里云服务器公网带宽价格表“按固定带宽”计费模式
阿里云服务器公网带宽计费模式按固定带宽”计费多少钱1M?地域不同带宽价格不同,北京、杭州、深圳等大陆地域价格是23元/Mbps每月,中国香港1M带宽价格是30元一个月,美国硅谷是30元一个月,日本东京1M带宽是25元一个月&am…...
MTK的充电方案—PMIC充电
MTK目前有三套充电方案,主要如下: (1)线性充电——linering charge(PMIC充电) 充9停1,充电电流不能太大,目前最大能做到1.2A; (2)switch charge(…...

【Overload游戏引擎分析】画场景栅格的Shader分析
Overload引擎地址: GitHub - adriengivry/Overload: 3D Game engine with editor 一、栅格绘制基本原理 Overload Editor启动之后,场景视图中有栅格线,这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现࿰…...

智能化物流管理:全国快递物流查询API的角色与优势
前言 当今社会,物流行业已经成为了国民经济的重要组成部分,而快递物流则是物流行业中的一个重要分支。随着信息技术的不断发展,智能化物流管理正逐渐成为快递物流领域的趋势,而全国快递物流查询API作为其中的一部分,在…...

Spring Boot如何配置CORS支持
Spring Boot如何配置CORS支持 CORS(跨源资源共享)是一种Web浏览器的安全性功能,用于控制网页上的脚本文件从不同的源加载其他网页资源。在开发现代Web应用程序时,通常需要跨域请求不同的资源,如API服务或其他Web应用程…...

Mybatis 拦截器(Mybatis插件原理)
Mybatis为我们提供了拦截器机制用于插件的开发,使用拦截器可以无侵入的开发Mybatis插件,Mybatis允许我们在SQL执行的过程中进行拦截,提供了以下可供拦截的接口: Executor:执行器ParameterHandler:参数处理…...

AXI总线协议基础--几分钟熟悉通道信号和基础架构
目录 一、AXI协议基础 1.1读写通道的基本架构图 1.2猝发操作举例 1.3传输顺序 二、各个通道中的信号描述 2.1全局信号 2.2写地址通道信号 2.3写数据通道信号 2.4写响应通道信号 2.5读地址通道信号 2.6读数据通道 三、通道握手 3.1单一信息传输时的握手过程 3.2不…...

matlab数学建模方法与实践 笔记汇总
matlab数学建模方法与实践 笔记汇总 写在最前面笔记1:快速入门1.导入数据2.数据探索3.多项式拟合4.发布功能5.数据类型6、全部代码 笔记2:数据的准备1.数据的读取与写入excel、txt读图读视频 2.数据预处理缺失值噪声过滤数据归约数据变换 3.数据统计4.数…...

[UE虚幻引擎] DTCopyFile 插件说明 – 使用蓝图拷贝复制文件 (Windows)
本插件可以在虚幻引擎中使用蓝图对系统的其他文件进行拷贝复制操作。 1. 节点说明 Async Copy File 异步复制文件 Param Source File : 要复制的源文件的完整路径。Param Target File : 要复制的目标文件的完整路径。Param Force Copy : 如果为true,则如果目标…...

如何用ChatGPT学或教英文?5个使用ChatGPT的应用场景!
原文:百度安全验证 AI工具ChatGPT的出现大幅改变许多领域的运作方式,就连「学英文」也不例外!我发现ChatGPT应用在英语的学习与教学上非常有意思。 究竟ChatGPT如何改变英文学习者(学生)与教学者(老师)呢? 有5个应用场景我感到…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...