【Java-LangChain:使用 ChatGPT API 搭建系统-3】评估输入-分类

第三章 评估输入-分类

在本章中,我们将重点讨论评估输入任务,这对于确保系统的质量和安全性至关重要。

对于需要处理不同情况下的许多独立指令集的任务,首先对查询类型进行分类,并以此为基础确定要使用哪些指令,具有诸多益处。

这可以通过定义固定的类别和 hard-coding 与处理给定类别任务相关的指令来实现。

例如,在构建客户服务助手时,首先对查询类型进行分类,然后根据该分类确定要使用哪些指令,这一点可能非常重要。

举个具体的例子,如果用户要求关闭其帐户,那么二级指令可能是添加有关如何关闭账户的额外说明;而如果用户询问特定产品的信息,则二级指令可能会添加更多的产品信息。

环境配置

参考第二章的 环境配置小节内容即可。

对用户指令进行分类

在这里,我们使用系统消息 (system_message) 作为系统的全局指导,并选用 # 作为分隔符。

分隔符是一种用于区分指令或输出中不同部分的工具,它能帮助模型识别各个部分,从而提高系统在执行特定任务时的准确性和效率。

在这个例子中,我们选择使用 # 作为分隔符。

# 是一个理想的分隔符,因为它可以被视为一个独立的 token。

 private String delimiter = "###";

这是我们的 system message,我们正在以下面的方式询问模型。


private String system = "你将获得客户服务查询。\n" +"每个客户服务查询都将用{delimiter}字符分隔。\n" +"将每个查询分类到一个主要类别和一个次要类别中。\n" +"以 JSON 格式提供你的输出,包含以下键:primary 和 secondary。\n" +"\n" +"主要类别:计费(Billing)、技术支持(Technical Support)、账户管理(Account Management)或一般咨询(General Inquiry)。\n" +"\n" +"计费次要类别:\n" +"取消订阅或升级(Unsubscribe or upgrade)\n" +"添加付款方式(Add a payment method)\n" +"收费解释(Explanation for charge)\n" +"争议费用(Dispute a charge)\n" +"\n" +"技术支持次要类别:\n" +"常规故障排除(General troubleshooting)\n" +"设备兼容性(Device compatibility)\n" +"软件更新(Software updates)\n" +"\n" +"账户管理次要类别:\n" +"重置密码(Password reset)\n" +"更新个人信息(Update personal information)\n" +"关闭账户(Close account)\n" +"账户安全(Account security)\n" +"\n" +"一般咨询次要类别:\n" +"产品信息(Product information)\n" +"定价(Pricing)\n" +"反馈(Feedback)\n" +"与人工对话(Speak to a human)";

现在我们来看一个用户消息(user message)的例子。

   String message = "我希望你删除我的个人资料和所有用户数据。";

将这个消息格式化为一个消息列表,系统消息和用户消息使用"####"进行分隔。 我们思考一下,作为人类,这句话属于哪个类别:“我想让您删除我的个人资料。“这句话看上去属于"账户管理”,或者属于"关闭账户”。

        String message = "我希望你删除我的个人资料和所有用户数据。";List<ChatMessage> chatMessages = new ArrayList<>();ChatMessage chatMessage = new ChatMessage();chatMessage.setRole("system");chatMessage.setContent(system);chatMessages.add(chatMessage);ChatMessage chatMessage2 = new ChatMessage();chatMessage2.setRole("user");chatMessage2.setContent(delimiter + message + delimiter);chatMessages.add(chatMessage2);String result = this.getCompletionFromMessage(chatMessages, 1);log.info("test1:\n{}", result);
{"primary": "账户管理", "secondary": "关闭账户"}

让我们看看模型是如何思考的, 模型的分类是将"账户管理"作为"primary",“关闭账户"作为"secondary”。
请求结构化输出(如 JSON)的好处是,您可以轻松地将其读入某个对象中,如果您使用其他语言,也可以转换为其他对象,然后输入到后续步骤中。

这是另一个用户消息: "告诉我更多关于你们的平板电视的信息"我们运用相同的消息列表来获取模型的响应,然后打印出来。
这里返回了另一个分类结果,并且看起来应该是正确的。

String message = "告诉我更多有关你们的平板电脑的信息";List<ChatMessage> chatMessages = new ArrayList<>();ChatMessage chatMessage = new ChatMessage();chatMessage.setRole("system");chatMessage.setContent(system);chatMessages.add(chatMessage);ChatMessage chatMessage2 = new ChatMessage();chatMessage2.setRole("user");chatMessage2.setContent(delimiter + message + delimiter);chatMessages.add(chatMessage2);String result = this.getCompletionFromMessage(chatMessages, 1);log.info("test2:\n{}", result);
{"primary": "一般咨询","secondary": "产品信息"
}

如果您有任何特定的问题或需要更详细的信息,请告诉我,我会尽力回答。
因此,根据客户咨询的分类,我们现在可以提供一套更具体的指令来处理后续步骤。
在这种情况下,我们可能会添加关于电视的额外信息,而在其他情况下,我们可能希望提供关闭账户的链接或类似的内容。 在接下来的章节中,我们将进一步了解处理输入的不同方法.

Java快速转换到大模型开发:
配套课程的所有代码已经发布在:https://github.com/Starcloud-Cloud/java-langchain
课程合作请留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94867.shtml

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

相关文章

英伟达NVIDIA驱动安装

一般&#xff0c;我们新的显卡上机或者新系统可能就需要重新安装显卡驱动。或者是我们在配置深度学习环境时候&#xff0c;需要手动安装驱动。 官网地址&#xff1a;官方高级驱动搜索 | NVIDIA 我们选择好自己需要的驱动后直接安装即可 下载的时候&#xff0c;选择自己需要的驱…

计算机竞赛 深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序

文章目录 0 简介1 背景意义2 数据集3 数据探索4 数据增广(数据集补充)5 垃圾图像分类5.1 迁移学习5.1.1 什么是迁移学习&#xff1f;5.1.2 为什么要迁移学习&#xff1f; 5.2 模型选择5.3 训练环境5.3.1 硬件配置5.3.2 软件配置 5.4 训练过程5.5 模型分类效果(PC端) 6 构建垃圾…

第一篇:数组定义JavaScript

数组的定义 数组是一种特殊的变量&#xff0c;能够用来一次存放一个以上的值。 一维数组的定义 //使用字面量[]方式定义 var arr [1,2,3] console.log(arr)//1,2,3使用构造函数的方式定义 var arr new Array()//定义了一个空数组 var arr new Array(10)//定义了长度为1…

微服务网关:Spring Cloud Zuul 升级 Spring Cloud Gateway 的核心要点

1. 服务路由 1.1. Zuul 接收请求&#xff1a; 在routes路由规则中&#xff0c;根据path去匹配&#xff0c;如果匹配中&#xff0c;就使用对应的路由规则进行请求转发如果无法从routes中匹配&#xff0c;则根据path用“/”去截取第一段作为服务名进行请求转发&#xff0c;转发…

spring-boot 操作 mongodb 数据库

如何使用 spring-boot 操作 mongodb 数据库 配置文件&#xff1a; spring:data:mongodb:host: 127.0.0.1database: fly_articleDbport: 27017# 可以采取 mysql 写法# uri: mongodb://127.0.0.1/fly_articleDb依赖信息: <?xml version"1.0" encoding"UTF-…

JavaSE | 初识Java(一) | JDK \ JRE \ JVM

Java初识 Java 是一门半编译型、半解释型语言。先通过 javac 编译程序把源文件进行编译&#xff0c;编译后生成的 .class 文件是由字节 码组成的平台无关、面向 JVM 的文件。最后启动 java 虚拟机 来运行 .class 文件&#xff0c;此时 JVM 会将字节码转换成平台能够理…

线程的概述

#include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 功能&#xff1a;创建一个子线程 参数&#xff1a; -thread:传出参数&#xff0c;线程创建成功后&#xff0c;子线程的ID被写到…

1092:求出e的值

#include <iostream> using namespace std;int main() {//1.定义变量double e 1.0f;double factorial 1.0f;int n 0;//2.输入数据cin >> n;for(int i 1; i < n; i){factorial factorial * i;e 1.0 / factorial;}printf("%.10lf",e);return 0; }…

日常工作报告生成器微信小程序源码 支持日报,周报,月报,年终终结

相信大家上班都会有做工作报告的情况吧 那么这款小程序就是大家的福音了 只要输入你的工作内容或者岗位自动生成你的工作报告 支持报,周报,月报,年终终结 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88391810 源码下载2&#xff1a;评论留言或私信…

docker资源控制

一&#xff0c;cpu资源控制 cgroups&#xff0c;是一个非常强大的linux内核工具&#xff0c;他不仅可以限制被 namespace 隔离起来的资源&#xff0c; 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups&#xff08;Control groups&#xff09;实现了对资源…

竞赛选题 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

C++ 封装成库

一、好处 1、所有工程师在移植或创建该设备驱动时&#xff0c;花费的代价超小 2、随着使用者的增多&#xff0c;它饱经考验&#xff0c;不断趋于稳定&#xff0c;变为当之无愧的公共代码 3、库对外的接口(函数名及其参数声明)是不变的&#xff0c;当所有常用设备都实现库化时…

因为在此系统上禁止运行脚本

问题&#xff1a; 解决办法&#xff1a; vue项目搭建中"因为在此系统上禁止运行脚本"报错&#xff0c;解决方法 - 你的剧本 - 博客园 (cnblogs.com)

经典算法-枚举法(百钱买百鸡问题)

题目&#xff1a; 条件&#xff1a;现有 100 元&#xff0c;一共要买公鸡、母鸡、小鸡三种鸡&#xff0c;已知公鸡 5 元一只&#xff0c;母鸡 3 元一只&#xff0c;1 元可以买三只小鸡。 要求&#xff1a;公鸡、母鸡、小鸡都要有&#xff0c;一共买 100 只鸡。有哪几种买法&am…

YOLOv8轻量化模型:BiLevelRoutingAttention 结合C2f | CVPR2023

💡💡💡本文解决什么问题:BiLevelRoutingAttention ,通过双层路由(bi-level routing)提出了一种新颖的动态稀疏注意力(dynamic sparse attention ) BiLevelRoutingAttention 和C2f结合 | 轻量化的同时在数据集并有小幅涨点; YOLO轻量化模型专栏:http://t.csdnimg…

RDP协议流程详解(一)Connection Initiation阶段

Connetction Initiation是RDP连接的第一个阶段&#xff0c;具体包含两个消息RDP Negotiation Request和RDP Negotiation Response&#xff0c;下面结合协议数据包详细分析。 &#xff08;1&#xff09;RDP Negotiation Request 从数据包可以清晰看到此时的协议栈依次是TCP-TPKT…

反序列化漏洞

原理 反序列化是对象变成可以传输的字符串。 PHP反序列化的时候&#xff0c;基本都是围绕着serialize()&#xff0c;unserialize()这两个函数 serialize() 和 unserialize() 在 PHP内部没有漏洞的&#xff0c;产生反序列化漏洞是因为应用程序在处理对象、魔术函数以及序列化…

虚拟机的三种网络连接模式

文章目录 桥接模式NAT模式主机模式 桥接模式 虚拟系统占用主机网段中的一个IP地址&#xff0c;可以正常上网 NAT模式 主机生成一个非本主机的网段的IP的网卡&#xff0c;同时虚拟系统中使用一个该网段的IP地质&#xff0c;网络数据能通过主机的网卡来代理发送出去&#xff0…

mysql面试题12:讲一讲MySQL中什么是半同步复制?底层实现?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:讲一讲mysql中什么是半同步复制?底层实现? MySQL中的半同步复制(Semi-Synchronous Replication)是一种复制模式,它在主服务器将数据写入到二…

10.2 调试事件获取DLL装载

理解了如何通过调试事件输出当前进程中寄存器信息&#xff0c;那么实现加载DLL模块也会变得很容易实现&#xff0c;加载DLL模块主要使用LOAD_DLL_DEBUG_EVENT这个通知事件&#xff0c;该事件可检测进程加载的模块信息&#xff0c;一旦有新模块被加载或装入那么则会触发一个通知…