【Java-LangChain:使用 ChatGPT API 搭建系统-7】检查结果

第七章,检查结果

在本章中,我们将重点如何检查系统生成的输出。在向用户展示输出之前,检查输出的质量、相关性和安全性对于确保提供的回应非常重要,无论是在自动化流程中还是其他场景中。
我们将学习如何使用审查 API 来评估输出,并探讨如何使用额外的 Prompt 来提升模型在展示输出之前的质量评估。

一,环境配置

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

二,检查输出是否有潜在的有害内容

主要就是 Moderation API 的使用


        String user = "SmartX ProPhone 有一个 6.1 英寸的显示屏,128GB 存储、\n" +
        "1200 万像素的双摄像头,以及 5G。FotoSnap 单反相机\n" +
        "有一个 2420 万像素的传感器,1080p 视频,3 英寸 LCD 和\n" +
        "可更换的镜头。我们有各种电视,包括 CineView 4K 电视,\n" +
        "55 英寸显示屏,4K 分辨率、HDR,以及智能电视功能。\n" +
        "我们也有 SoundMax 家庭影院系统,具有 5.1 声道,\n" +
        "1000W 输出,无线重低音扬声器和蓝牙。关于这些产品或\n" +
        "我们提供的任何其他产品您是否有任何具体问题?";


        Moderation moderation = this.moderation(user);

        log.info("test1:\n{}", moderation);
{
	"flagged": false,
	"categories": {
		"hate": false,
		"hateThreatening": false,
		"selfHarm": false,
		"sexual": false,
		"sexualMinors": false,
		"violence": false,
		"violenceGraphic": false
	},
	"categoryScores": {
		"hate": 8.89037E-8,
		"hateThreatening": 1.4936566E-9,
		"selfHarm": 3.664432E-8,
		"sexual": 3.1301633E-6,
		"sexualMinors": 3.5103648E-7,
		"violence": 8.951075E-7,
		"violenceGraphic": 2.512231E-7
	}
}

正如您所见,这个输出没有被标记,并且在所有类别中都获得了非常低的分数,说明给定的回应是合理的。
总的来说,检查输出也是非常重要的。例如,如果您正在为敏感的受众创建一个聊天机器人,您可以使用更低的阈值来标记输出。一般来说,如果审查输出表明内容被标记,您可以采取适当的行动,例如回应一个备用答案或生成一个新的回应。
请注意,随着我们改进模型,它们也越来越不太可能返回任何有害的输出。

另一种检查输出的方法是询问模型本身生成的结果是否令人满意,是否符合您所定义的标准。这可以通过将生成的输出作为输入的一部分提供给模型,并要求它评估输出的质量来实现。您可以以多种方式进行这样的操作。让我们看一个例子。

三,检查输出结果是否与提供的产品信息相符合

        String system = "您是一个助理,用于评估客服代理的回复是否充分回答了客户问题,\n" +
                "并验证助理从产品信息中引用的所有事实是否正确。 \n" +
                "产品信息、用户和客服代理的信息将使用三个反引号(即 ```)\n" +
                "进行分隔。 \n" +
                "请以 Y 或 N 的字符形式进行回复,不要包含标点符号:\n" +
                "Y - 如果输出充分回答了问题并且回复正确地使用了产品信息\n" +
                "N - 其他情况。\n" +
                "\n" +
                "仅输出单个字母。";

        String customer = "告诉我有关 smartx pro 手机\n" +
                "和 fotosnap 相机(单反相机)的信息。\n" +
                "还有您电视的信息。";

        String productInformation = "{ \"name\": \"SmartX ProPhone\", \"category\": \"Smartphones and Accessories\", \"brand\": \"SmartX\", \"model_number\": \"SX-PP10\", \"warranty\": \"1 year\", \"rating\": 4.6, \"features\": [ \"6.1-inch display\", \"128GB storage\", \"12MP dual camera\", \"5G\" ], \"description\": \"A powerful smartphone with advanced camera features.\", \"price\": 899.99 } { \"name\": \"FotoSnap DSLR Camera\", \"category\": \"Cameras and Camcorders\", \"brand\": \"FotoSnap\", \"model_number\": \"FS-DSLR200\", \"warranty\": \"1 year\", \"rating\": 4.7, \"features\": [ \"24.2MP sensor\", \"1080p video\", \"3-inch LCD\", \"Interchangeable lenses\" ], \"description\": \"Capture stunning photos and videos with this versatile DSLR camera.\", \"price\": 599.99 } { \"name\": \"CineView 4K TV\", \"category\": \"Televisions and Home Theater Systems\", \"brand\": \"CineView\", \"model_number\": \"CV-4K55\", \"warranty\": \"2 years\", \"rating\": 4.8, \"features\": [ \"55-inch display\", \"4K resolution\", \"HDR\", \"Smart TV\" ], \"description\": \"A stunning 4K TV with vibrant colors and smart features.\", \"price\": 599.99 } { \"name\": \"SoundMax Home Theater\", \"category\": \"Televisions and Home Theater Systems\", \"brand\": \"SoundMax\", \"model_number\": \"SM-HT100\", \"warranty\": \"1 year\", \"rating\": 4.4, \"features\": [ \"5.1 channel\", \"1000W output\", \"Wireless subwoofer\", \"Bluetooth\" ], \"description\": \"A powerful home theater system for an immersive audio experience.\", \"price\": 399.99 } { \"name\": \"CineView 8K TV\", \"category\": \"Televisions and Home Theater Systems\", \"brand\": \"CineView\", \"model_number\": \"CV-8K65\", \"warranty\": \"2 years\", \"rating\": 4.9, \"features\": [ \"65-inch display\", \"8K resolution\", \"HDR\", \"Smart TV\" ], \"description\": \"Experience the future of television with this stunning 8K TV.\", \"price\": 2999.99 } { \"name\": \"SoundMax Soundbar\", \"category\": \"Televisions and Home Theater Systems\", \"brand\": \"SoundMax\", \"model_number\": \"SM-SB50\", \"warranty\": \"1 year\", \"rating\": 4.3, \"features\": [ \"2.1 channel\", \"300W output\", \"Wireless subwoofer\", \"Bluetooth\" ], \"description\": \"Upgrade your TV's audio with this sleek and powerful soundbar.\", \"price\": 199.99 } { \"name\": \"CineView OLED TV\", \"category\": \"Televisions and Home Theater Systems\", \"brand\": \"CineView\", \"model_number\": \"CV-OLED55\", \"warranty\": \"2 years\", \"rating\": 4.7, \"features\": [ \"55-inch display\", \"4K resolution\", \"HDR\", \"Smart TV\" ], \"description\": \"Experience true blacks and vibrant colors with this OLED TV.\", \"price\": 1499.99 }";

        //判断相关性
        String qpair = "顾客的信息: ```" + customer + "```\n" +
                "产品信息: ```" + productInformation + "```\n" +
                "代理的回复: ```" + response + "```\n" +
                "\n" +
                "回复是否正确使用了检索的信息?\n" +
                "回复是否充分地回答了问题?\n" +
                "\n" +
                "输出 Y 或 N";


        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(qpair);
        chatMessages.add(chatMessage2);

        String result = this.getCompletionFromMessage(chatMessages, 0);

        log.info("test2:\n{}", result);
        
Y
        String customer = "告诉我有关 smartx pro 手机\n" +
                "和 fotosnap 相机(单反相机)的信息。\n" +
                "还有您电视的信息。";

        String response = "生活就像一盒巧克力";

        //判断相关性
        String qpair = "顾客的信息: ```" + customer + "```\n" +
                "产品信息: ```" + productInformation + "```\n" +
                "代理的回复: ```" + response + "```\n" +
                "\n" +
                "回复是否正确使用了检索的信息?\n" +
                "回复是否充分地回答了问题?\n" +
                "\n" +
                "输出 Y 或 N";


        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(qpair);
        chatMessages.add(chatMessage2);

        String result = this.getCompletionFromMessage(chatMessages, 0);

        log.info("test3:\n{}", result);
N

因此,您可以看到,模型能够提供关于生成输出质量的反馈。您可以利用这个反馈来决定是否展示输出给用户或生成新的回应。甚至可以尝试为每个用户查询生成多个模型回应,然后选择最佳的回应展示给用户。因此,您有多种尝试的方式。

总的来说,使用审查 API 来检查输出是一个不错的做法。但是,我认为在大部分情况下这可能是不必要的,尤其是当您使用更先进的模型,例如 GPT-4 时。

事实上,我们并没有看到很多人在实际生产环境中采取这种做法。这也会增加系统的延迟和成本,因为您必须等待额外的调用,还需要额外的 tokens。如果您的应用或产品的错误率只有 0.0000001%,那么或许您可以尝试这种方法。但总的来说,我们不建议您在实际应用中采用这种方式。

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

你可能感兴趣的:(Java-LangChain,java,langchain,chatgpt)