欢迎来到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
}