吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记--08 Chatbot

news2024/11/26 16:47:43

08 Chatbot

ChatGPT的一种重要功能是作为一个聊天机器人,本节将展示如何和ChatGPT进行对话

1) 不同的角色(Roles)

前面几节的课程中,我们通过如下函数调用ChatGPT的接口,输入用户输入的prompt,返回模型生成的内容:

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]

上述代码中我们将用户输入的prompt放在messages列表中的content键值里。事实上相当于我们输入了role=user的信息,而chatgpt作为assistant要补全/回答该信息:
role1
例如当我们输入多轮对话时

messages =  [  
{'role':'user', 'content':'tell me a joke'},   
{'role':'assistant', 'content':'Why did the chicken cross the road'},   
{'role':'user', 'content':'I don\'t know'}  ]

得到的回答是To get to the other side!
假设我们期望assistant用一种不同的身份或风格和我们对话的时候,我们可以以role=system的身份将指令发送给chatgpt:

messages =  [  
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},   
{'role':'user', 'content':'tell me a joke'},   
{'role':'assistant', 'content':'Why did the chicken cross the road'},   
{'role':'user', 'content':'I don\'t know'}  ]

得到的回答是To get to the other side, good fellow!Verily, to get to the nearest inn to dine upon a pint of ale and a crust of bread.等。如果我们打印完整这个消息,即 print(str(response.choices[0].message)),我们可以得到

{
  "content": "To get to the other side! 'Tis an old and oft-told joke, but 'tis still a classic.",
  "role": "assistant"
}

如果想完成多轮对话,可以将user和assistant历史对话都放在messages的列表中。

history

2) 定义一个点餐机器人Orderbot

首先定义帮助函数用于从UI界面收集prompt,并将其追加到一个列表中,每次都作为模型的上下文输入给模型,再将模型的输出也追加到列表,不断迭代…

def collect_messages(_):
    prompt = inp.value_input
    inp.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)

然后我们将模型的身份和点餐细节通过system身份告知assistant,即输入

context = [ {'role':'system', 'content':"""
You are OrderBot, an automated service to collect orders for a pizza restaurant. \
You first greet the customer, then collects the order, \
and then asks if it's a pickup or delivery. \
You wait to collect the entire order, then summarize it and check for a final \
time if the customer wants to add anything else. \
If it's a delivery, you ask for an address. \
Finally you collect the payment.\
Make sure to clarify all options, extras and sizes to uniquely \
identify the item from the menu.\
You respond in a short, very conversational friendly style. \
The menu includes \
pepperoni pizza  12.95, 10.00, 7.00 \
cheese pizza   10.95, 9.25, 6.50 \
eggplant pizza   11.95, 9.75, 6.75 \
fries 4.50, 3.50 \
greek salad 7.25 \
Toppings: \
extra cheese 2.00, \
"""} ]  # accumulate messages

然后通过如下方式在jupyter中进行多轮对话

inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')
button_conversation = pn.widgets.Button(name="Chat!")

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

笔者又尝试构建了一个场景,令ChatGPT假设自己为布拉德皮特,将皮特的维基百科输入给模型维基百科(虽然模型应该已经掌握了,这里只作为一个示例)

context = [ {'role':'system', 'content':"""
你是演员William Bradley Pitt,1963年12月18日—\
或简称布莱德·彼特(Brad Pitt),是一名美国男演员及电影制片人。\
1991年,《末路狂花》成为你从影的成名作。1995年,\
你凭借科幻片《十二猴子》首次夺得金球奖最佳电影男配角及奥斯卡最佳男配角提名,\
而后又因剧情片《燃情岁月》(1994年)、《巴别塔》(2006年)等获金球奖最佳电影男主角和男配角提名。\
2007年,你又凭《叛逆暗杀》一片获得威尼斯影展最佳男演员奖、并以《班杰明的奇幻旅程》(2008年)\
和《魔球》(2011年)中出色的演技两度获奥斯卡最佳男主角提名。\
2019年你终于《从前,有个好莱坞》获得第一个奥斯卡最佳男配角奖。\

除了作为演员外,你于2001年成立制片公司B计划娱乐。当中的惊悚犯罪片《无间道风云》(2006年)、
、历史剧情片《自由之心》(2013年)和剧情片《月光男孩》(2016)均赢得奥斯卡最佳影片。\
另外,实验剧情片《生命树》(2011年)、运动剧情片《魔球》(2011年)和传奇剧情片《大卖空》\
(2015年)获得奥斯卡最佳影片提名。
你要接受一个主持人的访谈,请尽可能真实地回答主持人的问题。你需要格外注意你的公众形象,尽量避免私人问题
"""} ]  

下面是对话中截取的两部分
conv1
conv2

上一篇:吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记–07 Expanding

下一篇:吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记–09 Conclusion

deeplearning.ai 原课程地址

课程中文翻译地址

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

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

相关文章

第二章硬件入门之电容

第二章硬件入门之电容 文章目录 第二章硬件入门之电容一、电容是什么?二、实际应用场景常见电容:1.陶瓷电容(无正负极之分)1、旁路2、去耦 2.铝电解电容贴片式插件式3.安规电容x电容Y电容 总结 一、电容是什么? **电容…

【kernel exploit】CVE-2022-2602 UNIX_GC错误释放io_uring注册的file结构-UAF

本文主要参考 [漏洞分析] CVE-2022-2602 io_uring UAF内核提权详细解析 并做一些补充。 影响版本&#xff1a;Linux Kernel < v6.0.3。v6.0.3已修复。 测试版本&#xff1a;Linux-v6.0.2 &#xff08;v6.0.2 测试失败&#xff0c;v5.18.19测试成功&#xff09; exploit及测…

React Fiber 使用 MessageChannel + requestAnimationFrame 模拟实现 requestIdleCallback

由于 requestIdleCallback 兼容性较差且不支持 Safari&#xff0c;React Fiber 需要实现一个 requestIdleCallback polyfill 做浏览器兼容&#xff1b; MDN RequestIdleCallbackMDN RequestAnimationFrameMDN MessageChannel 以下为其使用 MessageChannel requestAnimationF…

vivado中ila的使用方法记录

ILA工具生成方法 一、 ILA工具介绍 在FPGA的开发中&#xff0c;当完成代码设计后&#xff0c;为了验证代码的准确性和各种不同条件下的可靠性&#xff0c;往往需要优先想到通过逻辑仿真进行相关验证。使用逻辑仿真进行验证虽然可以周密的考虑给出不同输入条件下的输出结果或交…

“智慧赋能 强链塑链”—— 汽车行业供应链管理数字化应用探讨

01车企供应链数字化的必要性 汽车供应链是一个复杂的系统&#xff0c;很多汽车企业因为供应链管理不当&#xff0c;造成资源浪费、成本高、客户满意度低等一系列问题&#xff1b;而汽车行业规模技术门槛高、配合协同复杂的特性&#xff0c;决定了其供应链缺口无法在短时间内填…

Three.js系列-报错export ‘Geometry‘ (imported as ‘THREE‘) was not found in ‘three‘

今天遇到报错export ‘Geometry’ (imported as ‘THREE’) was not found in ‘three’ port Geometry (imported as THREE) was not found in three (possible exports: ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, …

为什么大家都不用postman而选择 Apifox呢?

丢掉 Postman&#xff0c;Apifox 更香 作为开发者&#xff0c;丢掉 Postman 和 Jmeter吧&#xff0c;这款国产 API 工具更香&#xff0c;更安全&#xff01;一键即可导入 Postman 数据&#xff01; 一、Apifox 是什么&#xff1f; 1、Apifox 定位 Apifox Postman Swagger …

Altium Designer(AD)局域网内使用解冲突

1. Altium Designer 版本 AD15.0.8&#xff0c;电路设计软件&#xff0c;硬件工攻城狮必备技能&#xff0c;软件攻城狮也要会一点点 2. AD软件出现“Your license is already used on computer “LAPTOP-F99R6OR1” using product “AltiumDesigner” 用同事的安装包解压安装的…

Mysql 索引详细解析——底层->应用

1、索引的数据结构 1.1 概述 索引&#xff08;index&#xff09;是帮助Mysql高效获取数据的数据结构。 索引的本质&#xff1a; 索引是数据结构。简单理解为“排好序的快速查找数据结构”&#xff0c;满足特定查找算法。这些数据结构以某种方式指向数据&#xff0c; 这样就可…

期末计算机网络知识点总结

开篇提示: 因为博主图床使用的是GitHub进行存储的&#xff0c;因此当出现图片无法加载&#xff0c;可以尝试更换网络&#xff0c;或者用其他上网方法。当时想用 Gitee进行存储&#xff0c;但一直失败&#xff0c;过一段时间再试几次。目前这篇博文会一直更新&#xff0c;补充新…

Python的内置函数和保留字(关键字)

目录 内置函数 关键字&#xff08;保留字&#xff09; 内置函数 Python 解释器自带的函数叫做内置函数&#xff0c;这些函数可以直接使用&#xff0c;不需要导入某个模块。 将使用频繁的代码段封装起来&#xff0c;并给它起一个名字&#xff0c;以后使用的时候只要知道名字就可…

虹科分享 | 《面向金融行业的商业智能解决方案》白皮书

在以数据为中心的商业环境中&#xff0c;金融业面临着众多挑战&#xff0c;包括瞬息万变的市场动态、监管要求以及客户期望。金融行业从各种来源生成大量数据&#xff0c;包括交易、客户互动、市场数据和内部运营等。然而&#xff0c;如果缺乏有效的数据管理和分析&#xff0c;…

算法修炼之筑基篇——筑基二层后期(初步理解解决贪心算法)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇 &#x1f353;专栏&#xff1a;算法修炼之筑基篇 ✨博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;学习了算法修炼之练气篇想必各位蒟蒻们的基础已经非常的扎实了&#xff0c;下来…

【opencv】无法打开源文件opencv.hpp | bug记录

问题描述 今天这个bug其实比较搞笑&#xff1a; 原因分析&#xff1a; 那就是我们的VS软件没有识别到安装的库。肯定是下面三个环节哪里出错了&#xff1a; 1&#xff09;项目属性里的包含目录&#xff08;include&#xff09; 2&#xff09;项目属性里的库目录(lib) 3&…

随笔记录阿里云开发者社区Java开发高级技能自测20道题

目录 【单选】1.MyBatis中&#xff0c;主要使用哪个Java 接口来执行SQL命令&#xff1f;【单选】2.Spring中ApplicationContext的主要用法是&#xff1f;【单选】3.MySQL中&#xff0c;使用正则表达式查找news表中title以S或Q或L字母开头的所有数据&#xff0c;语句是&#xff…

【MySql】MySql的数据类型

文章目录 数据类型分类数值类型tinyint类型bit类型小数类型floatdecimal 字符串类型charvarchar日期和时间类型enum和set 数据类型分类 对于数据类型分类&#xff0c;这里简单分为数值类型&#xff08;如BIT,BOOL,INT&#xff09;&#xff0c;文本、二进制类型&#xff08;如CH…

JMeter 测试 ActiveMq

JMeter 测试 ActiveMq 的资料非常少&#xff0c; 我花了大量的时间才研究出来 关于ActiveMq 的文章请参考我另外的文章。 版本号: ActiveMq 版本号: 5.91 Jmeter 版本号: 1.13 添加ActiveMq 的jar包 将 ActiveMq 下的 "activemq-all-5.9.1.jar" 复制…

labelme安装与打包为独立exe程序(超级详细版!!!!)

文章目录 labelme安装与打包为独立exe安装打包以上全部命令直接复制粘贴就行&#xff01;&#xff01;&#xff01;&#xff01; labelme安装与打包为独立exe 按照官网给出的详细教程即可&#xff0c;不用去看一些博客&#xff08;都过时了&#xff09;。。。label官网 简要说…

Linux操作

Linux操作 一、Linux操作 1.安装yum包&#xff1a; $ yum install PACKAGE_NAME yum install mysql2.取出yum包装&#xff1a; $ yum remove PACKAGE_NAME yum remove mysql3.重新安装一个yum包&#xff1a; $ yum reinstall PACKAGE_NAME yum reinstall mysql4.搜索yum包…

tb6612电机驱动软件开发(cubeide工程调试,引脚等设置)

tb6612电机驱动软件开发(cubeide工程调试&#xff0c;引脚等设置&#xff09; 文章目录 tb6612电机驱动软件开发(cubeide工程调试&#xff0c;引脚等设置&#xff09;CLOCK(RCC)SYSGPIONVICTimer定时器配置PWM输出设置电机转速定时器编码模式普通定时器 UART串口设置 CLOCK(RCC…