【Java-LangChain:使用 ChatGPT API 搭建系统-10】评估(下)-当不存在一个简单的正确答案时
第十章,评估(下)-当不存在一个简单的正确答案时
在上一章中,了解了如何评估 LLM 模型在 有明确正确答案 的情况下的输出,我们可以编写一个函数来判断 LLM 输出是否正确地分类并列出产品。
然而,如果 LLM 用于生成文本,而不仅仅是分类问题的答案呢?接下来,我们将探讨如何评估这种类型的 LLM 输出的方法。
一,环境配置
参考第二章的 环境配置小节内容即可。
二,运行问答系统获得一个复杂回答
String delimiter = "###";String customer = "告诉我有关 the smartx pro phone 和 the fotosnap camera, the dslr one 的信息。\n" +"另外,你们这有什么 TVs ?";//从问题中抽取商品大类和名称String result = this.getProductsFromQuery(customer);JSONArray jsonArray = JSONUtil.parseArray(result);//查找商品对应信息List<JSONObject> products = this.getMentionedProductInfo(jsonArray);List<ChatMessage> messages = new ArrayList<>();String system = "您是一家大型电子商店的客户服务助理。\n" +"请用友好和乐于助人的口吻回答问题,提供简洁明了的答案。\n" +"确保向用户提出相关的后续问题。";ChatMessage systemMessage = new ChatMessage();systemMessage.setRole("system");systemMessage.setContent(system);messages.add(systemMessage);ChatMessage userMessage = new ChatMessage();userMessage.setRole("user");userMessage.setContent(delimiter + customer + delimiter);messages.add(userMessage);ChatMessage assistantMessage = new ChatMessage();assistantMessage.setRole("assistant");assistantMessage.setContent("相关产品信息:\n" + JSONUtil.toJsonStr(products));messages.add(assistantMessage);String answer = this.getCompletionFromMessage(messages, 0);log.info("test1:\n{}", answer);
test1:
我们有以下产品可供您选择:1. SmartX ProPhone - 这是一款功能强大的智能手机,拥有6.1英寸的显示屏,128GB的存储空间,12MP的双摄像头和5G网络支持。售价为899.99美元。2. FotoSnap DSLR Camera - 这是一款多功能的单反相机,拥有24.2MP的传感器,1080p的视频拍摄能力,3英寸的LCD屏幕和可更换镜头。售价为599.99美元。关于电视,我们有以下几款可供选择:1. CineView 4K TV - 这是一款55英寸的4K电视,支持HDR和智能电视功能。售价为599.99美元。2. CineView 8K TV - 这是一款65英寸的8K电视,支持HDR和智能电视功能。售价为2999.99美元。3. CineView OLED TV - 这是一款55英寸的OLED电视,支持4K分辨率、HDR和智能电视功能。售价为1499.99美元。请问您对以上产品有什么具体的要求或者其他问题吗?
三,使用 GPT 评估回答是否正确
我们希望您能从中学到一个设计模式,即当您可以指定一个评估 LLM 输出的标准列表时,您实际上可以使用另一个 API 调用来评估您的第一个 LLM 输出。
/*** 使用 GPT API 评估生成的回答** @param customerMsg 用户的输入* @param context 回答需要的上下文内容* @param assistantAnswer GPT的回答*/public String evalWithRubric(String customerMsg, String context, String assistantAnswer) {String delimiter = "###";String system = "你是一位助理,通过查看客户服务代理使用的上下文来评估客户服务代理回答用户问题的情况。";String user = "你正在根据代理使用的上下文评估对问题的提交答案。以下是数据:\n" +" [开始]\n" +" ************\n" +" [用户问题]: " + customerMsg + "\n" +" ************\n" +" [使用的上下文]: " + context + "\n" +" ************\n" +" [客户代理的回答]: " + assistantAnswer + "\n" +" ************\n" +" [结束]\n" +"\n" +" 请将提交的答案的事实内容与上下文进行比较,忽略样式、语法或标点符号上的差异。\n" +" 回答以下问题:\n" +" 助手的回应是否只基于所提供的上下文?(是或否)\n" +" 回答中是否包含上下文中未提供的信息?(是或否)\n" +" 回应与上下文之间是否存在任何不一致之处?(是或否)\n" +" 计算用户提出了多少个问题。(输出一个数字)\n" +" 对于用户提出的每个问题,是否有相应的回答?\n" +" 问题1:(是或否)\n" +" 问题2:(是或否)\n" +" ...\n" +" 问题N:(是或否)\n" +" 在提出的问题数量中,有多少个问题在回答中得到了回应?(输出一个数字)";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(delimiter + user + delimiter);messages.add(userMessage);String answer = this.getCompletionFromMessage(messages, 0);return answer;}
输出:
助手的回应只基于所提供的上下文。 (是)回答中不包含上下文中未提供的信息。 (否)回应与上下文之间不存在任何不一致之处。 (是)用户提出了2个问题。 (2)对于用户提出的每个问题,都有相应的回答。问题1:是
问题2:是在提出的问题数量中,有2个问题在回答中得到了回应。 (2)
四、给出一个标准回答,要求其评估生成回答与标准回答的差距
在经典的自然语言处理技术中,有一些传统的度量标准用于衡量 LLM 输出与人类专家编写的输出的相似度。例如,BLUE 分数可用于衡量两段文本的相似程度。
实际上有一种更好的方法,即使用 Prompt。您可以指定 Prompt,使用 Prompt 来比较由 LLM 自动生成的客户服务代理响应与人工理想响应的匹配程度。
public String evalVsIdeal(String customerMsg, String idealAnswer, String assistantAnswer) {String system = "您是一位助理,通过将客户服务代理的回答与理想(专家)回答进行比较,评估客户服务代理对用户问题的回答质量。\n" +"请输出一个单独的字母(A 、B、C、D、E),不要包含其他内容。";String user = "您正在比较一个给定问题的提交答案和专家答案。数据如下:\n" +" [开始]\n" +" ************\n" +" [问题]: " + customerMsg + "\n" +" ************\n" +" [专家答案]: " + idealAnswer + "\n" +" ************\n" +" [提交答案]: " + assistantAnswer + "\n" +" ************\n" +" [结束]\n" +"\n" +" 比较提交答案的事实内容与专家答案。忽略样式、语法或标点符号上的差异。\n" +" 提交的答案可能是专家答案的子集、超集,或者与之冲突。确定适用的情况,并通过选择以下选项之一回答问题:\n" +" (A)提交的答案是专家答案的子集,并且与之完全一致。\n" +" (B)提交的答案是专家答案的超集,并且与之完全一致。\n" +" (C)提交的答案包含与专家答案完全相同的细节。\n" +" (D)提交的答案与专家答案存在分歧。\n" +" (E)答案存在差异,但从事实的角度来看这些差异并不重要。\n" +" 选项:ABCDE";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 answer = this.getCompletionFromMessage(messages, 0);return answer;}
这个评分标准来自于 OpenAI 开源评估框架,这是一个非常棒的框架,其中包含了许多评估方法,既有 OpenAI 开发人员的贡献,也有更广泛的开源社区的贡献。
在这个评分标准中,我们要求 LLM 针对提交答案与专家答案进行信息内容的比较,并忽略其风格、语法和标点符号等方面的差异,但关键是我们要求它进行比较,并输出从A到E的分数,具体取决于提交的答案是否是专家答案的子集、超集或完全一致,这可能意味着它虚构或编造了一些额外的事实。
LLM 将选择其中最合适的描述。
Java快速转换到大模型开发:
配套课程的所有代码已经发布在:https://github.com/Starcloud-Cloud/java-langchain
课程合作请留言
相关文章:
【Java-LangChain:使用 ChatGPT API 搭建系统-10】评估(下)-当不存在一个简单的正确答案时
第十章,评估(下)-当不存在一个简单的正确答案时 在上一章中,了解了如何评估 LLM 模型在 有明确正确答案 的情况下的输出,我们可以编写一个函数来判断 LLM 输出是否正确地分类并列出产品。 然而,如果 LLM …...
【微服务的集成测试】python实现-附ChatGPT解析
1.题目 微服务的集成测试 知识点:深搜 时间限制: 1s 空间限制: 256MB 限定语言:不限 题目描述: 现在有n个容器服务,服务的启动可能有一定的依赖性 (有些服务启动没有依赖)其次服务自身启动加载会消耗一些时间。 给你一个 nxn 的二维矩阵 useTime,其中 useTime[i][i]=10 表示…...
Mesa新版来袭
Mesa 17.1.6 发布了,Mesa 是一个三维(3D)图形库的开源集合,其主要目标是在 Linux / UNIX 操作系统下实现各种 API(应用程序编程接口)和 OpenGL 规范。 它面向 3D 计算机图形,硬件加速 3D 渲染和…...
基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient
1. 从 RestHighLevelClient 到 ElasticsearchClient 从 Java Rest Client 7.15.0 版本开始,Elasticsearch 官方决定将 RestHighLevelClient 标记为废弃的,并推荐使用新的 Java API Client,即 ElasticsearchClient. 为什么要将 RestHighLevelC…...
辅助驾驶功能开发-功能对标篇(15)-NOA领航辅助系统-吉利
1.横向对标参数 厂商吉利车型FX11/EX11/DCY11/G636上市时间2022Q4方案6V5R+1DMS摄像头前视摄像头1*(8M)侧视摄像头/后视摄像头1环视摄像头4DMS摄像头1雷达毫米波雷达54D毫米波雷达/超声波雷达12激光雷达/域控供应商福瑞泰克辅助驾驶软件供应商福瑞泰克高精度地图百度芯片TDA4 T…...
javascript: Sorting Algorithms
// Sorting Algorithms int JavaScript https://www.geeksforgeeks.org/sorting-algorithms/ /** * file Sort.js * 1. Bubble Sort冒泡排序法 * param arry * param nszie */ function BubbleSort(arry, nszie) {var i, j, temp;var swapped;for (i 0; i < nszie - 1; i)…...
嵌入式Linux应用开发-驱动大全-同步与互斥④
嵌入式Linux应用开发-驱动大全-同步与互斥④ 第一章 同步与互斥④1.5 自旋锁spinlock的实现1.5.1 自旋锁的内核结构体1.5.2 spinlock在UP系统中的实现1.5.3 spinlock在SMP系统中的实现 1.6 信号量semaphore的实现1.6.1 semaphore的内核结构体1.6.2 down函数的实现1.6.3 up函数的…...
2023年【高压电工】证考试及高压电工复审模拟考试
题库来源:安全生产模拟考试一点通公众号小程序 高压电工证考试根据新高压电工考试大纲要求,安全生产模拟考试一点通将高压电工模拟考试试题进行汇编,组成一套高压电工全真模拟考试试题,学员可通过高压电工复审模拟考试全真模拟&a…...
C/C++学习 -- 分组密算法(3DES算法)
1. 3DES算法概述 3DES(Triple Data Encryption Standard),又称为TDEA(Triple Data Encryption Algorithm),是一种对称加密算法,是DES(Data Encryption Standard)的加强版…...
C/C++面试题总结
1.new与malloc的区别 new操作符从自由存储区上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。 使用new操作符申请内存分配时无须指定内存块的大小,而malloc则需要显式地指出所需内存的尺寸。 int *p new int; delete p;//一定要配对使用n…...
Java下正面解除警告Unchecked cast: ‘java.lang.Object‘ to ‘java.util.ArrayList‘
就是我在反序列化时,遇到这样一个警告: Unchecked cast: java.lang.Object to java.util.ArrayList<com.work1.Student>然后我去网上查,有些人说用SuppressWarnings(“unchecked”)去忽略警告,但是我觉得作为一名合格的程序…...
图像处理与计算机视觉--第四章-图像滤波与增强-第二部分
目录 1.图像噪声化处理与卷积平滑 2.图像傅里叶快速变换处理 3.图像腐蚀和膨胀处理 4 图像灰度调整处理 5.图像抖动处理算法 学习计算机视觉方向的几条经验: 1.学习计算机视觉一定不能操之过急,不然往往事倍功半! 2.静下心来,理解每一个…...
[前端基础]typescript安装以及类型拓展
(0)写在前面: 作者之前都是在写js,所以这里介绍ts肯定是不能从头开始介绍了,主要在js的基础上介绍ts关于类型的几个特性,以及ts的安装还有配置问题 (1)ts和js是什么关系 通俗点来…...
网络参考资料汇总(1)
将这段时间参考的各路大佬的资料加以汇总分类: (1)FFmpeg: 基于FFmpeg进行rtsp推流及拉流(详细教程) Linux 编译安装 FFmpeg 步骤(带ffplay) Jetson 环境安装(三):jetson nano配置ffmpeg和ngin…...
Remove和RemoveLast用法
LeetCode 46 全排列 先贴代码 class Solution {List<List<Integer>> result new ArrayList<>();List<Integer> temp new ArrayList<>();public List<List<Integer>> permute(int[] nums) {dfs(nums, 0);return result;}public v…...
(一) 使用 Hugo 搭建个人博客保姆级教程(上篇)
手把手教你如何从0开始构建一个静态网站,这不需要有太多的编程和开发经验和时间投入,也基本不需要多少成本(除了个性化域名),使用GitHub和Hugo模板即可快速构建和上线一个网站。 目标读者 本文档适用于以下用户&…...
数据结构之栈
栈的模拟实现 1.栈的概念2.栈的方法3.栈的模拟实现(代码)3.1 接口My_Stack3.2 StackList3.3 异常类StackException3.4 测试类Test 1.栈的概念 2.栈的方法 3.栈的模拟实现(代码) 3.1 接口My_Stack 3.2 StackList 3.3 异常类StackException 3.4 测试类Test...
wireshark of tshark tools v3.4.0版本 支持json
tshark(1) Install tshark (Wireshark) Ver.3.4.0 on CentOS7 --It must be "ps", "text", "pdml", "psml" or "fields". TCP 协议中的三次握手和四次挥手是 TCP 连接建立和关闭的过程。 三次握手 客户端向服务器发送 SYN…...
Python开源项目月排行 2023年9月
#2023年9月2023年9月9日1fishdraw这个项目是用来随机生成一条鱼的,这条鱼特别的稀奇古怪,这个项目不依赖任何库,支持 svg, json, csv 等格式。2vizro一个用于创建模块化数据可视化应用程序的工具包。在几分钟内快速自助组装定制仪表板 - 无需…...
uniapp项目实践总结(二十五)苹果 ios 平台 APP 打包教程
导语:当你的应用程序开发完成后,在上架 ios 应用商店之前,需要进行打包操作,下面就简单介绍一下打包方法。 目录 准备工作注册账号生成证书打包配置准备工作 在打包之前,请保证你的 uniapp 应用程序编译到 ios 模拟器或者是真机调试基座环境下是可以正常运行的,苹果打包…...
MySQL查询(基础到高级)
一、单表查询: 1.基本查询: 1.1 查询多个字段: 1.查询所有字段: select * from 表名;2.查询指定字段: select 字段1,字段2 from 表名; 1.2 去除重复记录 select distinct "字段" FROM "表名"; …...
电脑通过串口助手和51单片机串口通讯
今天有时间把电脑和51单片机之间的串口通讯搞定了,电脑发送的串口数据,单片机能够正常接收并显示到oled屏幕上,特此记录一下,防止后面自己忘记了怎么搞得了。 先来两个图片看看结果吧! 下面是串口3.c的文件全部内容&a…...
【Linux】线程详解完结篇——信号量 + 线程池 + 单例模式 + 读写锁
线程详解第四篇 前言正式开始信号量引例信号量的本质信号量相关的四个核心接口生产消费者模型用环形队列实现生产者消费者模型基于环形队列的生产消费模型的原理代码演示单生产者单消费者多生产者多消费者 计数器的意义 线程池基本概念代码 单例模式STL,智能指针和线程安全STL中…...
弧度、圆弧上的点、圆的半径(r)、弧长(s)之间的关系
要计算弧度和圆弧上的点,需要知道以下几个要素: 圆的半径(r):即圆的中心到圆周上任意一点的距离。 弧长(s):从圆周上的一个点到另一个点所经过的弧长。 弧度(θ&#x…...
[AOSP] [JNI] [Android] AOSP中使用JNI
一. 简要 🍎 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。J…...
GEE案例——如何使用长时序影像实现多波段图像加载(不同层土壤湿度)
简介: 在GEE中实现时序图像的加载主要的目的是查看影像波段或者指数的变化,这里我们使用的主要是加载常规的4个波段,然后添加一个复合波段,复合波段主要的是求4个波段的平均值,然后再次加入到原有的4个波段的时序图中。这里面主要的技术难点一个是图表的设定,另外一个就…...
Cloudflare进阶技巧:缓存利用最大化
1. 引言 cloudflare我想你应该知道是什么,一家真正意义上免费无限量的CDN,至今未曾有哥们喷它的。当然,在国内的速度确实比较一般,不过这也不能怪它。 CDN最大的特色,我想就是它的缓存功能,达到防攻击&am…...
想要精通算法和SQL的成长之路 - 二叉树的判断问题(子树判断 | 对称性 | 一致性判断)
想要精通算法和SQL的成长之路 - 二叉树的判断问题 前言一. 相同的树二. 对称二叉树三. 判断子树 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相同的树 原题链接 这题目典型的递归题: 如果两个节点都是null,我们返回true。如果两个节点一个nul…...
(零)如何做机器视觉项目
文章目录 1 项目的前期准备1.1 从5个方面初步分析客户需求1.2 方案评估与验证1.3 签订合同 2 项目规划2.1 定义客户端的详细需求2.2 制定项目管理计划2.3 方案评审 3 详细设计3.1 硬件设备的选择与环境搭建3.2 软件开发平台与开发工具的选择3.3 机器视觉系统的整体框架与开发流…...
【Leetcode】滑动窗口合集
这里写目录标题 209.长度最小的子数组题目思路代码 3. 无重复字符的最长子串(medium)题目思路 11. 最大连续 1 的个数 III题目思路 1658. 将 x 减到 0 的最⼩操作数题目思路代码 904. 水果成篮题目思路代码 438.找到字符串中所有字母的异位词题目思路代码…...
江门电商网站设计培训/帮人推广的平台
本文章首发于浩瀚先森博客,地址: http://www.guohao1206.com/2016/08/23/967.html samba时一款为了实现linux系统中的文件能在windows系统中正常访问的软件,分为服务器端和客户端,按照下列方法安装samba服务器即可在windows系统中访问linux系统中的文件。…...
网站怎么做动态图片/企业推广方式有哪些
一、通用函数: colorbar 显示彩色条 语法:colorbar \ colorbar(vert) \ colorbar(horiz) \ colorbar(h) \ hcolorbar(...) \ colorbar(...,peer,axes_handle) getimage 从坐标轴取得图像数据 语法:Agetimage(h) \ [x,y,A]getimage(h) \ [...…...
口腔医院网站优化服务商/国家高新技术企业认定
今天我们讲linux系统软件管理。我们电脑上有着各种各样的软件,今天我们就学习如何在Linux系统上进行软件管理。 软件安装首先要有安装包,windows安装包后缀是.exe,而linux不是。Linux有两种安装包。RPM包安装RPM Package Manager(原Red Hat Package Mana…...
山西正规网站建设报价公司/郑州百度推广托管
1. 背景 最近在研究DotNetOpenAuth——OAuth的一个.NET开源实现,官方网站:http://dotnetopenauth.net/ 。 从GitHub签出DotNetOpenAuth的源代码发现最新版本已到5.1,而NuGet中发布的版本只是4.3。新版中使用到了.NET 4.5的异步特性࿰…...
存量权益登记在哪个网站上做/手机一键优化
1 迭代器 1.1 定义迭代器是指能用next(it)函数取值的对象(实例) 1.2 说明1 用iter函数可返回一个可迭代对象的迭代器2 迭代器是访问可迭代对象的一种方式3 迭代器只能往前,不能后退 1.3 示例L [1,1,2,3,5,8] it iter…...
win7做网站服务器卡/免费引流微信推广
题目链接:https://cn.vjudge.net/contest/208908#problem/F 题目大意:给你100个方格,编号为1到100,每次你丢一次骰子,决定你下次往前走多少步,有些方格会有一些梯子或者蛇,使得你到该格子时直接…...