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

本文介绍了如何通过OpenAIAPI和LLM(大型语言模型)开发ChatGPT应用程序,包括课程内容、设置示例和如何创建一个OrderBot,展示如何在聊天场景中扩展对话功能并生成JSON订单摘要。
摘要由CSDN通过智能技术生成

欢迎来到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_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)
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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值