【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.xdnf.cn/news/149272.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

jira 浏览器插件在问题列表页快速编辑问题标题

jira-issueTable-quicker 这是一个可以帮助我们在问题表格页快速编辑问题的浏览器插件 github 地址 功能介绍 jira 不可否认是一个可以帮助有效提高工作效率的工具&#xff0c;但是我们在使用 jira 时使用问题表格可以让我们看到跟多的内容而不用关注细节&#xff0c;但是目…

Rabbitmq安装-docker版

1.简介 2.安装消息队列 下载地址https://www.rabbitmq.com/download.html 使用docker方式安装 需要先下载docker&#xff0c;参考文章https://blog.csdn.net/weixin_43917045/article/details/104747341?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22arti…

微服务技术栈-初识Docker

文章目录 前言一、Docker概念二、安装Docker三、Docker服务命令四、Docker镜像和容器Docker镜像相关命令Docker容器相关命令 总结 前言 docker技术风靡全球&#xff0c;它的功能就是将linux容器中的应用代码打包,可以轻松的在服务器之间进行迁移。docker运行程序的过程就是去仓…

MySQL:温备份和恢复-mysqldump (4)

介绍 温备&#xff1a;同样是在数据库运行的时候进行备份的&#xff0c;但对当前数据库的操作会产生影响。&#xff08;只可以读操作&#xff0c;不可以写操作&#xff09; 温备份的优点&#xff1a; 1.可在表空间或数据文件级备份&#xff0c;备份时间短。 2.备份时数据库依然…

软件设计师_数据结构与算法_学习笔记

文章目录 6.1 数组与矩阵6.1.1 数组6.1.2 稀疏矩阵 6.2 线性表6.2.1 数据结构的定义6.2.2 顺序表与链表6.2.2.1 定义6.2.2.2 链表的操作 6.2.3 顺序存储和链式存储的对比6.2.4 队列、循环队列、栈6.2.4.2 循环队列队空与队满条件6.2.4.3 出入后不可能出现的序列练习 6.2.5 串 6…

【算法|动态规划No.12】leetcode152. 乘积最大子数组

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

微信管理系统

在这个全民微信的时代&#xff0c;微信已成为生活和工作中不可缺少的工具&#xff0c;为了方便&#xff0c;大部分人都不会只有一个微信&#xff0c;很多企业老板和创业者都已经开始用微信管理系统来提升自身的业务效率和客户满意度。 微信管理系统适用哪些行业呢&#xff1f; …

QScrollArea样式

简介 QScrollBar垂直滚动条分为sub-line、add-line、add-page、sub-page、up-arrow、down-arrow和handle几个部分。 QScrollBar水平滚动条分为sub-line、add-line、add-page、sub-page、left-arrow、right-arrow和handle几个部分。 部件如下图所示&#xff1a; 样式详…

Python生成器

生成器 Generators 要理解生成器&#xff0c;首先要理解迭代器&#xff0c;迭代器由以下三个部分组成&#xff1a; 可迭代对象&#xff08;iterable&#xff09;迭代器&#xff08;iterator&#xff09;迭代&#xff08;iteration&#xff09; 1. 可迭代对象 只要定义了可以…

【itext7】使用itext7将多个PDF文件、图片合并成一个PDF文件,图片旋转、图片缩放

这篇文章&#xff0c;主要介绍使用itext7将多个PDF文件、图片合并成一个PDF文件&#xff0c;图片旋转、图片缩放。 目录 一、itext7合并PDF 1.1、引入依赖 1.2、合并PDF介绍 1.3、采用字节数组方式读取PDF文件 1.4、合并多个PDF文件 1.5、合并图片到PDF文件 1.6、旋转图…

1797_GNU pdf阅读器evince

全部学习汇总&#xff1a; GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 近段时间经历了很多事情&#xff0c;终于想找一点技术上的自由气氛。或许&#xff0c;没有什么比GNU的一些软件探索更适合填充这样的…

Leetcode---114双周赛

题目列表 2869. 收集元素的最少操作次数 2870. 使数组为空的最少操作次数 2871. 将数组分割成最多数目的子数组 2872. 可以被 K 整除连通块的最大数目 一、收集元素的最小操作次数 直接模拟&#xff0c;倒序遍历即可&#xff0c;代码如下 class Solution { public:int mi…

博客之站项目测试报告

项目背景项目功能测试计划Bug总结升级自动化测试正常登录流程 项目背景 1&#xff1a;博客之站系统是采用前后端分离的方式来实现&#xff1b;使用MySQL、Redis数据库储存相关数据&#xff1b;同时部署到云服务器上。 2&#xff1a;包含注册页、登录页、博客列表页、个人列表页…

CCF CSP认证 历年题目自练 Day22

CCF CSP认证 历年题目自练 Day22 题目一 试题编号&#xff1a; 201912-1 试题名称&#xff1a; 报数 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 题目分析&#xff08;个人理解&#xff09; 每一个人都要报多少个数字&#xff0c;我选择字典存储&#xff0…

堆--数组中第K大元素

如果对于堆不是太认识&#xff0c;请点击&#xff1a;堆的初步认识-CSDN博客 解题思路&#xff1a; /*** <h3>求数组中第 K 大的元素</h3>* <p>* 解体思路* <ol>* 1.向小顶堆放入前k个元素* 2.剩余元素* 若 < 堆顶元素, 则略过* …

【GO 编程语言】面向对象

指针与结构体 文章目录 指针与结构体一、OOP 思想二、继承三、方法四、接口实现五、多态六、空接口七、接口继承八、接口断言九、Type别名 一、OOP 思想 Go语言不是面向对象的语言&#xff0c;这里只是通过一些方法来模拟面向对象&#xff0c;从而更好的来理解面向对象思想 面…

Win11 安装 Vim

安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Ru7HhTSotz9mteHug-Yhpw?pwd6666 提取码&#xff1a;6666 双击安装包&#xff0c;一直下一步。 配置环境变量&#xff1a; 先配置系统变量中的path&#xff1a; 接着配置用户变量&#xff1a; 在 cmd 中输入…

小谈设计模式(19)—备忘录模式

小谈设计模式&#xff08;19&#xff09;—备忘录模式 专栏介绍专栏地址专栏介绍 备忘录模式主要角色发起人&#xff08;Originator&#xff09;备忘录&#xff08;Memento&#xff09;管理者&#xff08;Caretaker&#xff09; 应用场景结构实现步骤Java程序实现首先&#xff…

基于Vue+ELement实现增删改查案例与表单验证(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

打开MySQL数据库

在命令行里输入mysql --version就可以查看&#xff1a; mysql -uroot -p之前设置的密码&#xff08;不用输入&#xff09;就可登录成功&#xff1a;