使用 ChatGPT API 构建系统(一):分类

news2024/11/17 21:27:09

今天我学习了DeepLearning.AI的 Building Systems with the ChatGPT API 的在线课程,我想和大家一起分享一下该门课程的一些主要内容。

下面是我们通过Openai API来访问ChatGPT模型的主要代码:

import openai

#您的openai的api key
openai.api_key ='YOUR-OPENAI-API-KEY' 

def get_completion_from_messages(messages, 
                                 model="gpt-3.5-turbo", 
                                 temperature=0, 
                                 max_tokens=500):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, 
        max_tokens=max_tokens,
    )
    return response.choices[0].message["content"]

 

分类(Classification)

在有些ChatGPT的应用场景中我们可能需要对用户的问题进行分类,下面来看一个例子,在这个例子中我们要把用户所提问题进行分类,有两个主要的分类,在每个主要的分类下面还有若干个次要分类,我们要做的是让ChatGPT根据用户的问题找到主要分类和次要分类,并以JSON格式输出结果。这里我们首先会用课程中的英语prompt来做实验,然后我们会把英语的prompt翻译成中文,然后用中文的promt再做一次实验,这样有助于大家理解prompt的具体含义以及中文prompt和英文prompt的差异。

delimiter = "####"
system_message = f"""
You will be provided with customer service queries. \
The customer service query will be delimited with \
{delimiter} characters.
Classify each query into a primary category \
and a secondary category. 
Provide your output in json format with the \
keys: primary and secondary.

Primary categories: Billing, Technical Support, \
Account Management, or General Inquiry.

Billing secondary categories:
Unsubscribe or upgrade
Add a payment method
Explanation for charge
Dispute a charge

Technical Support secondary categories:
General troubleshooting
Device compatibility
Software updates

Account Management secondary categories:
Password reset
Update personal information
Close account
Account security

General Inquiry secondary categories:
Product information
Pricing
Feedback
Speak to a human

"""



user_message = f"""\
I want you to delete my profile and all of my user data"""
messages =  [  
{'role':'system', 
 'content': system_message},    
{'role':'user', 
 'content': f"{delimiter}{user_message}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

user_message = f"""\
Tell me more about your flat screen tvs"""
messages =  [  
{'role':'system', 
 'content': system_message},    
{'role':'user', 
 'content': f"{delimiter}{user_message}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

 这里我们要求ChatGPT的输出结果为一个JSON格式,从输出的结果上看ChatGPT的输出完全符合我们的要求。接下来我们把原英语的prompt翻译成中文后再执行一次。

delimiter = "####"
system_message_chinese=f"""
您将收到客户查询。
客户查询将以 {delimiter} 字符分隔。
请将每个查询分成主要类别和次要类别。

最后输出带有primary和secondary键的json格式的结果。

主要类别:
计费
技术支持
账户管理
一般查询

计费的次要类别:
退订或升级
添加付款方式
收费说明
对费用提出异议

技术支持的次要类别:
一般故障排除
设备兼容性
软件更新

账户管理的次要类别:
重设密码
更新个人信息
关闭账户
账户安全

一般查询的次要类别:
产品信息
价钱
反馈
与人交谈
"""

user_message_chinese = f"""
我想要你删除我的个人资料和我所有的用户数据
"""
messages =  [  
{'role':'system', 
 'content': system_message_chinese},    
{'role':'user', 
 'content': f"{delimiter}{user_message_chinese}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

第一个问题似乎没有问题,ChatGPT输出了一个正确的JSON结果,并且找到了正确的主要分类和次要分类。下面我们看第二个问题:

user_message_chinese = f"""\
告诉我更多关于你们的纯平电视机的信息
"""
messages =  [  
{'role':'system', 
 'content': system_message_chinese},    
{'role':'user', 
 'content': f"{delimiter}{user_message_chinese}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

 

 我们看到上面输出结果中除了一个JSON结构还有一些多余的信息,这些多余的信息并非是我们想要的,接下来我们再尝试一下第三个中文的问题:

user_message_chinese = f"""\
如何修改我的登录密码?
"""
messages =  [  
{'role':'system', 
 'content': system_message_chinese},    
{'role':'user', 
 'content': f"{delimiter}{user_message_chinese}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

 这次的结果和上一次类似,尽管JSON结果是正确的,但是仍然出现了画蛇添足的现象,如何避免出现这种情况呢?看来我们还需要修改一下我们的中文prompt:

delimiter = "####"
system_message_chinese=f"""
您将收到客户查询。
客户查询将以 {delimiter} 字符分隔。
请将每个查询分成主要类别和次要类别。

最后输出带有primary和secondary键的json格式的结果,\
其中primary表示主要类别,secondary表示次要类别。


主要类别:
计费
技术支持
账户管理
一般查询

计费的次要类别:
退订或升级
添加付款方式
收费说明
对费用提出异议

技术支持的次要类别:
一般故障排除
设备兼容性
软件更新

账户管理的次要类别:
重设密码
更新个人信息
关闭账户
账户安全

一般查询的次要类别:
产品信息
价钱
反馈
与人交谈

记住,输出结果必须为一个JSON结构。

"""

这里我们给中文prompt内容做了一些修改,主要是增加了两句话:“其中primary表示主要类别,secondary表示次要类别。” 和 “记住,输出结果必须为一个JSON结构。”,其中第一句话主要是让ChatGPT更加深入理解英语单词primary和secondary在上下文中的对应的中文含义,第二句话的作用是再次强调结果必须为一个JSON结果,这样就应该可以防止ChatGPT画蛇添足输出多余的内容。

user_message_chinese = f"""
我想要你删除我的个人资料和我所有的用户数据
"""
messages =  [  
{'role':'system', 
 'content': system_message_chinese},    
{'role':'user', 
 'content': f"{delimiter}{user_message_chinese}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

user_message_chinese = f"""\
告诉我更多关于你们的纯平电视机的信息
"""
messages =  [  
{'role':'system', 
 'content': system_message_chinese},    
{'role':'user', 
 'content': f"{delimiter}{user_message_chinese}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

 

user_message_chinese = f"""\
如何修改我的登录密码?
"""
messages =  [  
{'role':'system', 
 'content': system_message_chinese},    
{'role':'user', 
 'content': f"{delimiter}{user_message_chinese}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

 

 从上面的输出结果看,这次的prompt的修改起到了非常不错的效果,chatGPT没有再输出多余的内容。

总结

今天我们学习了如何让ChatGPT对用户的问题进行分类,以及英文prompt和中文prompt在输出结果上的一些差异,通过恰当的对中文prompt的修改,我们可以让中文prompt的输出结果和英文prompt的输出结果一致。

参考资料

DLAI - Learning Platform Beta

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

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

相关文章

chatgpt赋能python:Python删除节点:从入门到实践

Python删除节点:从入门到实践 在任何编程语言中,删除节点都是一个极为常见的操作。在Python中,它同样非常重要,因为我们通常会使用Python处理各种数据结构,诸如树、链表等等。但是,删除节点并不总是一件容…

C++类和对象 -- 知识点补充

补充 const成员函数static成员友元内部类匿名对象拷贝对象时的一些编译器优化 const成员函数 将const修饰的成员函数称为const成员函数,const修饰类成员函数,实际是修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的成员进行修改。…

javaWeb ssh自习室管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh自习室管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,…

预报名通道已开启,2023第11届国际生物发酵展,8月4-6日上海见!

新机遇、新挑战、新发展 同期展会:酵素产品与益生产品展 制药机械与包装技术展 生化仪器及实验室设备展 合成生物技术与生物制造展 展会时间: 2023年8月4日 9:00-17:00 2023年8月5日 9:00-17:00 2023年8月6日 9:00-15:00 展会地点&#xff1a…

【数据结构】栈和队列选择题和面试编程题

目录 一、选择题 二、栈和队列的面试题 1、括号匹配问题 1.1 题目说明 1.2 题目解析 2、用队列实现栈 2.1 题目说明 2.2 题目解析 3、用栈实现队列 3.1 题目说明 3.2 题目解析 一、选择题 1、若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的…

软考A计划-电子商务设计师-信息安全知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

安全防御——IDS(入侵检测系统)

安全防御——IDS(入侵检测系统) IDS介绍为什么需要IDSIDS的工作原理IDS的工作过程第一步:信息收集第二步:数据分析 IDS的主要检测方法1、模式匹配(误用检测)2、统计分析(异常检测)3、…

chatgpt赋能python:Python创建venv的完全指南

Python创建venv的完全指南 在Python开发中,虚拟环境是一个非常有用的工具。它可以让我们在同一台计算机上拥有多个Python环境,而不会互相干扰。在本文中,我们将介绍如何使用Python创建venv(虚拟环境)。 什么是venv&a…

4-5.配置信息和路由信息

一、配置信息 app.run()的参数 参数1:host,如果我们不指定,默认值是127.0.0.1。参数2:port,如果我们不指定,默认值是5000。参数3:debug,调试模式,如果不指定&#xff0…

chatgpt赋能python:Python创建画布语句

Python 创建画布语句 在数据可视化的领域,画布(Canvas)是一个重要的概念。画布可以视为一个空白的像素或向量画布,用于绘制图表、图形、图像和动画等。Python 提供了多种创建画布的方式,其中包括使用第三方库和内置库…

哲学家就餐问题(死锁)

本文主要讲述死锁的一个经典案例—哲学家就餐问题,并对该问题进行修复。 1. 问题描述 看上图,有五位哲学家,每天循环做两件事:思考,吃面。吃面时每人面前都有一个盘子,盘子左边和右边都有一根筷子&#xff…

5.3 树和二叉树的抽象数据类型定义

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.什么是树的抽象数据类型定义 树的抽象数据类型定义是指对树这种数据结构的一种抽象描述,其中包括了树的基本操作和性质。它定义了树作为一…

基于深度学习的目标姿态检测方法_kaic

目录 摘要 第1章 引言 1.1 研究背景和意义 1.2 国内外研究现状 1.3 主要内容 第2章 单目相机的目标姿态检测技术 2.1单目相机的工作原理 2.2目标姿态检测 2.3已有的目标姿态检测方法及其局限性 2.4本章总结 第3章 构建数据集 3.1 数据集来源 3.2数据集标注 3.3数据集分析 3.4本…

基于Springboot的社区论坛系统(源代码+数据库)055

部分代码地址 https://gitee.com/ynwynwyn/forum-public 基于Springboot的社区论坛系统(源代码数据库) 一、系统介绍 前台: 话题列表,搜索话题,发布话题通过标签筛选话题个人设置:修改个人信息,查看发布话题记录&a…

FPGA设计的指导性原则 (三)

例12. 在SDC文件中附加syn_ramstyle综合约束属性,指定综合存贮单元的类型 SDC文件是Synplicity综合工具通用的综合约束属性文件,其扩展名为”sde”。在SDC 指定 syn_ramstyle的语法格式为: define_attribute (signal_name [bit_range)) syn_ramstyle (atring) 其中,黑体…

1.Python高频函数—数据合并merge()

前言 数据处理中经常对多个表的数据进行合并处理,python 提供两个十分好用的函数处理。merge() 、 concat() merger函数是Python里的数据分析工作中最常见的函数之一,主要应用场景是:针对同一个主键存在两张不同字段的表。(这里强…

《Kali渗透基础》05. 主动信息收集(二)

kali渗透 1:端口扫描2:UDP 扫描2.1:Scapy2.2:nmap 3:半开放扫描3.1:Scapy3.2:nmap3.3:hping3 4:全连接扫描4.1:Scapy4.2:nmap4.3:dmit…

前端web入门-CSS-day04

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 复合选择器 后代选择器 子代选择器 并集选择器 交集选择器 伪类选择器 伪类-超链接(拓…

leetcode95--不同的二叉搜索树 II(java)

不同的二叉搜索树 II leetcode95 -- 不同的二叉搜索树 II题目描述 解题思路代码演示二叉树专题 leetcode95 – 不同的二叉搜索树 II 原题链接: https://leetcode.cn/problems/unique-binary-search-trees-ii/ 题目描述 给你一个整数 n ,请你生成并返回所有由 n 个节…

HTTP协议+Ajax基本知识+axios+模板引擎的基本使用

1.客服端服务器 我们先来了解一下上网的目的是什么? 例如:刷微博、浏览新闻、在线听音乐、在线看电影、等等... 上网的本质目的:通过互联网的形式来 获取和消费资源 1.2 服务器 上网过程中,负责 存放和对外提供资源 的电脑&am…