【OpenAI官方课程】第七课:ChatGPT聊天格式Chatbot

news/发布时间2024/5/18 13:52:20

欢迎来到ChatGPT 开发人员提示工程课程(ChatGPT Prompt Engineering for Developers)!本课程将教您如何通过OpenAI API有效地利用大型语言模型(LLM)来创建强大的应用程序。

本课程由OpenAI 的Isa Fulford和 DeepLearning.AI 的Andrew Ng主讲,深入了解 LLM 的运作方式,提供即时工程的最佳实践,并演示 LLM API 在各种应用程序中的使用。

聊天格式

在本课程中,您将探索如何利用聊天格式与个性化或针对特定任务或行为专门设计的聊天机器人进行扩展对话。

设置

import os
import openai
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件openai.api_key  = os.getenv('OPENAI_API_KEY')
def get_completion(prompt, model="gpt-3.5-turbo"):messages = [{"role": "user", "content": prompt}]response = openai.ChatCompletion.create(model=model,messages=messages,temperature=0, # 这是模型输出的随机程度)return response.choices[0].message["content"]def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):response = openai.ChatCompletion.create(model=model,messages=messages,temperature=temperature, # 这是模型输出的随机程度)
#     print(str(response.choices[0].message))return response.choices[0].message["content"]
messages =  [  
{'role':'system', 'content':'你是一个说话像莎士比亚的助手。'},    
{'role':'user', 'content':'给我讲个笑话'},   
{'role':'assistant', 'content':'为什么小鸡过马路'},   
{'role':'user', 'content':'我不知道'}  ]
response = get_completion_from_messages(messages, temperature=1)
print(response)

诚然,小鸡确实过马路,的确,那是为了到达另一边!

messages =  [  
{'role':'system', 'content':'你是一个友好的聊天机器人。'},    
{'role':'user', 'content':'嗨,我叫艾莎'}  ]
response = get_completion_from_messages(messages, temperature=1)
print(response)

你好,艾莎!很高兴认识你。今天我可以如何帮助你?

messages =  [  
{'role':'system', 'content':'你是一个友好的聊天机器人。'},    
{'role':'user', 'content':'是的,你能提醒我,我的名字是什么吗?'}  ]
response = get_completion_from_messages(messages, temperature=1)
print(response)

抱歉,但作为人工智能聊天机器人,我无法访问您的个人信息,比如您的姓名。您能告诉我您的名字吗?

messages =  [  
{'role':'system', 'content':'你是一个友好的聊天机器人。'},
{'role':'user', 'content':'嗨,我叫艾莎'},
{'role':'assistant', 'content': "嗨,艾莎!很高兴见到你。\
今天有什么我可以帮助你的吗?"},
{'role':'user', 'content':'是的,你可以提醒我,我的名字是什么吗?'}  ]
response = get_completion_from_messages(messages, temperature=1)
print(response)

你的名字是艾莎。

OrderBot

我们可以自动收集用户提示和助手响应来构建一个OrderBot。OrderBot将在披萨餐厅接受订单。

def collect_messages(_):prompt = inp.value_inputinp.value = ''context.append({'role':'user', 'content':f"{prompt}"})response = get_completion_from_messages(context) context.append({'role':'assistant', 'content':f"{response}"})panels.append(pn.Row('User:', pn.pane.Markdown(prompt, width=600)))panels.append(pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))return pn.Column(*panels)
import panel as pn  # GUI
pn.extension()panels = [] # 收集显示 context = [ {'role':'system', 'content':"""
您是OrderBot,一个自动服务,用于收集披萨餐厅的订单。\
您首先向客户打招呼,然后收集订单,\
然后询问是自取还是送货。\
您等待收集完整的订单,然后总结并最后检查一次\
客户是否还想添加其他内容。\
如果是送货,您会要求提供地址。\
最后您收取付款。\
确保清楚所有选项、附加项和尺寸,以唯一标识菜单中的项目。\
您的回应应该是简短的、非常对话式的友好风格。\
菜单包括\
意大利辣香肠披萨 12.95, 10.00, 7.00 \
奶酪披萨   10.95, 9.25, 6.50 \
茄子披萨   11.95, 9.75, 6.75 \
薯条 4.50, 3.50 \
希腊沙拉 7.25 \
配料:\
额外奶酪 2.00, \
蘑菇 1.50 \
香肠 3.00 \
加拿大培根 3.50 \
AI酱 1.50 \
辣椒 1.00 \
饮料:\
可乐 3.00, 2.00, 1.00 \
雪碧 3.00, 2.00, 1.00 \
瓶装水 5.00 \
"""} ]  # 累积消息inp = pn.widgets.TextInput(value="嗨", placeholder='在这里输入文本…')
button_conversation = pn.widgets.Button(name="聊天!")interactive_conversation = pn.bind(collect_messages, button_conversation)dashboard = pn.Column(inp,pn.Row(button_conversation),pn.panel(interactive_conversation, loading_indicator=True, height=300),
)dashboard
messages =  context.copy()
messages.append(
{'role':'system', 'content':'创建上一个食品订单的JSON摘要。为每个项目列出价格\
字段应该是 1) 披萨,包括尺寸 2) 配料清单 3) 饮料清单,包括尺寸  4) 配菜清单,包括尺寸  5) 总价 '},    
)#字段应该是 1) 披萨,价格 2) 配料清单 3) 饮料清单,包括尺寸 价格  4) 配菜清单,包括尺寸 价格, 5)总价 '},    response = get_completion_from_messages(messages, temperature=0)
print(response)

Output:

当然,这是订单的JSON摘要:{
"pizza": [
{
"type": "意大利辣香肠",
"size": "大",
"price": 12.95
},
{
"type": "奶酪",
"size": "中",
"price": 9.25
}
],
"toppings": [
{
"type": "额外奶酪",
"price": 2.00
},
{
"type": "蘑菇",
"price": 1.50
}
],
"drinks": [
{
"type": "可乐",
"size": "大",
"price": 3.00
},
{
"type": "雪碧",
"size": "小",
"price": 2.00
}
],
"sides": [
{
"type": "薯条",
"size": "大",
"price": 4.50
}
],
"total_price": 38.20
}

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

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

相关文章

LabVIEW多场景微振动测试平台与教学应用

LabVIEW多场景微振动测试平台与教学应用 在多种工程实践中,微振动的测试与分析对于评估结构的稳定性及其对环境的影响至关重要。针对这一需求,开发了一套基于NI-cDAQ和LabVIEW的多场景微振动测试平台,提高微振动测试的精确度与灵活性&#x…

Python输入函数不会还不赶紧来学!

在银行ATM机取钱时,需要输入密码。银行系统通过定义变量接收用户输入的密码,然后与系统内保存的密码进行对比,以验证密码的正确性。在Python中,可以使用input()函数获取用户输入的信息。需要注意的是,input()函数接收的…

matlab|电动汽车充放电V2G模型

目录 1 主要内容 1.1 模型背景 1.2 目标函数 2 部分代码 3 效果图 4 下载链接 1 主要内容 本程序主要建立电动汽车充放电V2G模型,采用粒子群算法,在保证电动汽车用户出行需求的前提下,为了使工作区域电动汽车尽可能多的消纳供给商场基础…

基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

功能介绍 以51/STM32单片机作为主控系统; LCD1602液晶显示当前时间、温湿度、药品重量 3次吃药时间、药品类目和药品数量 HX711压力采集当前药品重量 红外感应当前药盒是否打开 DS1302时钟芯片显示当前年月日、时分秒、星期 DHT11采集当前环境温度和湿度 …

HTTP REST 方式调用WebService接口(wsdl)

一、WebService接口正常使用SOAP协议调用,测试时常采用SoapUI软件调用,具体如下: 二、由于目前主流web服务逐渐转换为RESTful的形式,且SOAP协议的实现也是基于HTTP协议,故存在通过HTTP调用WebService接口的可能 2.1 …

ES6内置对象 - Set

Set(es6提供的一种数据结构,类似数组,是一个集合,可以存储任何类型的元素且唯一、不重复,so,多用于元素去重) 如上图,Set数据结构自带一些方法 1.Set对象创建 let a new Set([1,2,3,3,1,2,4,…

鸿蒙自定义侧滑菜单布局(DrawerLayout)

前言 为了实现安卓中的侧滑菜单布局效果,通过查找鸿蒙的布局控件,发现SideBarContainer控件有点像,但是使用中发现并不是很符合我们的UI交互效果,因此我在鸿蒙中通过自定义布局的方式实现,本文主要介绍该自定义控件如…

☀️将大华摄像头画面接入Unity 【1】配置硬件和初始化摄像头

一、硬件准备 目前的设想是后期采用网口供电的形式把画面传出来,所以这边我除了大华摄像头还准备了POE供电交换机,为了方便索性都用大华的了,然后全都连接电脑主机即可。 二、软件准备 这边初始化摄像头需要用到大华的Configtool软件&#…

Vue3自定义组件v-model双向绑定

无能吐槽一下,虽然用了很多遍v-model,但是还是不得要领,每次看官网都感觉说的不是很清晰,在写的时候还是要查看文档,可能就是不理解原理,这次特意好好写一篇文章,让自己好好理解一下。 自定义一…

【JVM】五种对象引用

📝个人主页:五敷有你 🔥系列专栏:JVM ⛺️稳中求进,晒太阳 几种常见的对象引用 可达性算法中描述的对象引用,一般指的是强引用,即是GCRoot对象对普通对象有引用关系,只要这层…

数据结构day2

结构体字节对齐 32位&#xff1a;844432 32位&#xff1a;1122444422 两种验证大小端对齐 共用体判断 #include <stdio.h> union A {char t1;int t2; }; int main(int argc, const char *argv[]) {union A a1; //栈区a1.t2 0x12345678; //0x12数据高位 0x78数据…

UE5 C++ 创建Actor并在构造函数中添加组件

一.在C文件夹里创建Actor类 在头文件中声明需要的组件 声明组件指针属性和构造函数 在构造函数中将对应的组件指针实例化&#xff0c; CreateDefaultSubobject<T> 每个Actor里内部自动带有RootComponent根组件&#xff0c;将场景组件作为组件。其余用SetupAttachment来作…

森林安全新保障:智能高压应急消防泵的应用

随着城市化进程的加快&#xff0c;森林资源的保护和利用日益受到重视。然而&#xff0c;森林火灾时有发生&#xff0c;给生态环境带来严重破坏。为了有效应对森林火灾&#xff0c;保障森林资源安全&#xff0c;智能高压森林应急消防泵应运而生&#xff0c;成为守护绿色生命的钢…

Leetcode3035. 回文字符串的最大数量

Every day a Leetcode 题目来源&#xff1a;3035. 回文字符串的最大数量 解法1&#xff1a;哈希 排序 由于可以随意交换字母&#xff0c;先把所有字母都取出来&#xff0c;然后考虑如何填入各个字符串。 如果一个奇数长度字符串最终是回文串&#xff0c;那么它正中间的那…

7-liunx服务器规范

目录 概况liunx日志liunx系统日志syslog函数openlog 可以改变syslog默认输出方式 &#xff0c;进一步结构化 用户信息进程间的关系会话ps命令查看进程关系 系统资源限制改变工作目录和根目录服务器程序后台话 概况 liunx服务器上有很多细节需要注意 &#xff0c;这些细节很重要…

【结合OpenAI官方文档】解决Chatgpt的API接口请求速率限制

OpenAI API接口请求速率限制 速率限制以五种方式衡量&#xff1a;RPM&#xff08;每分钟请求数&#xff09;、RPD&#xff08;每天请求数&#xff09;、TPM&#xff08;每分钟令牌数&#xff09;、TPD&#xff08;每天令牌数&#xff09;和IPM&#xff08;每分钟图像数&#x…

yolov9来了,附官方源码地址,蓝奏云国内下载代码

不得不说&#xff0c;yolo的更新是真TMD的勤&#xff0c;v8还没熟悉透&#xff0c;结果V9就来了。 官方地址&#xff1a;https://github.com/WongKinYiu/yolov9/ 如果访问不了github的朋友们&#xff0c;可以下载微智启软件工作室准备好的国内蓝奏云网盘&#xff0c;内容是一样…

突破亚马逊智能检测,全自动化运营的新利器:亚马逊鲲鹏系统

在亚马逊运营的道路上一般最为棘手的问题之一就是账号关联和安全性。而亚马逊鲲鹏系统它不仅拥有最新的防指纹技术&#xff0c;还能够完全模拟真实的人类行为&#xff0c;让每个账号都拥有独立环境运行&#xff0c;从而保证账号的安全性&#xff0c;让用户摆脱了账号关联的困扰…

从零开始快速构建自己的Flink应用

本文介绍如何在 mac 下快速构建属于自己的 Flink 应用。 1. 本地安装 flink 在 mac 上使用homebrew安装 flink&#xff1a; brew install apache-flink查看安装的位置&#xff1a; brew info apache-flink进入安装目录&#xff0c;启动 flink 集群&#xff1a; cd /usr/lo…

SQL- left join 与group by联合使用实例

表&#xff1a;Visits ---------------------- | Column Name | Type | ---------------------- | visit_id | int | | customer_id | int | ---------------------- visit_id 是该表中具有唯一值的列。 该表包含有关光临过购物中心的顾客的信息。表&#xff1a…
推荐文章