欢迎来到ChatGPT 开发人员提示工程课程(ChatGPT Prompt Engineering for Developers)!本课程将教您如何通过OpenAI API有效地利用大型语言模型(LLM)来创建强大的应用程序。
本课程由OpenAI 的Isa Fulford和 DeepLearning.AI 的Andrew Ng主讲,深入了解 LLM 的运作方式,提供即时工程的最佳实践,并演示 LLM API 在各种应用程序中的使用。
推断
在本课程中,您将从产品评论和新闻文章中推断情绪和主题。
设置
import openai
import os
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"]
产品评论文本
lamp_review = """
我需要卧室里的一个好看的灯,这个灯还带有额外的储物功能,价格也不太高。
发货速度很快。我们灯的绳子在运输过程中断了,公司很乐意寄给我们一个新的。
几天内就收到了。组装起来很容易。我缺了一个零件,所以我联系了客服,他们很快就给我寄来了缺失的部分!
Lumina 看起来是一家很关心客户和产品的好公司!!
"""
情绪(积极/消极)
prompt = f"""
以下产品评论的情绪是什么?
评论文本:'''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
产品评论的情绪是积极的。
prompt = f"""
以下产品评论的情绪是什么?
请以单个词回答,要么是 "积极",要么是 "消极"。
评论文本:'''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
积极
识别情感类型
prompt = f"""
识别以下评论作者表达的情感列表。列表中不超过五项。
以逗号分隔的小写单词列表形式呈现你的答案。
评论文本:'''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
高兴的,满意的,感激的,印象深刻的,满足的
识别愤怒
prompt = f"""
以下评论作者表达了愤怒吗?
评论用三个反引号分隔。
以 "是" 或 "否" 回答。
评论文本:'''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
否
从客户评论中提取产品和公司名称
prompt = f"""
从评论文本中识别以下内容:
评论者购买的物品
制造该物品的公司
评论用三个反引号分隔。
将你的响应格式化为一个 JSON 对象,
以 "Item" 和 "Brand" 作为键。
如果信息不存在,请将值设为 "unknown"。
尽可能简洁。
评论文本:'''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
{
“Item”: “灯”,
“Brand”: “Lumina”
}
同时执行多项任务
prompt = f"""
从评论文本中识别以下内容:
情绪(积极或消极)
评论者是否表达了愤怒?(true 或 false)
评论者购买的物品
制造该物品的公司
评论用三个反引号分隔。
将你的响应格式化为一个 JSON 对象,
以 "Sentiment"、"Anger"、"Item" 和 "Brand" 作为键。
如果信息不存在,请将值设为 "unknown"。
尽可能简洁。
将愤怒值格式化为布尔值。
评论文本:'''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
{
“Sentiment”: “积极”,
“Anger”: false,
“Item”: “带有额外储物的灯”,
“Brand”: “Lumina”
}
推断主题
story = """
最近政府进行的一项调查中,
公共部门员工被要求评价他们所在部门的满意度。
结果显示,NASA 是最受欢迎的部门,满意度达到 95%。
一名 NASA 员工 John Smith 对调查结果发表评论,
他说:“我对 NASA 获得第一名并不感到惊讶。
那是一个极好的工作地方,有着出色的人才和令人难以置信的机遇。
我为能成为这样一个创新组织的一部分感到自豪。”
NASA 的管理团队也对结果表示欢迎,
主任 Tom Johnson 表示:“我们很高兴听到我们的员工对 NASA 的工作满意。
我们有一个才华横溢、敬业的团队,他们不知疲倦地工作以实现我们的目标,
看到他们的辛勤工作取得成果真是太棒了。”
调查还显示,社会安全局的满意度最低,
只有 45% 的员工表示对工作满意。
政府承诺解决调查中员工提出的问题,
努力提高所有部门的工作满意度。
"""
推断五个主题
prompt = f"""
确定以下文本中正在讨论的五个主题,
文本用三个反引号分隔。
将每个项目设为一个或两个单词。
将你的响应格式化为一个以逗号分隔的项目列表。
文本示例:'''{story}'''
"""
response = get_completion(prompt)
print(response)
政府调查,工作满意度,NASA,社会安全局,员工关切
response.split(sep=',')
[‘政府调查’,
’ 工作满意度’,
’ NASA’,
’ 社会安全局’,
’ 员工关切’]
topic_list = ['政府调查','工作满意度','NASA','社会安全局','员工关切']
制作关于特定主题的新闻提醒
prompt = f"""
确定以下主题列表中的每一项是否是下文中的一个主题,
下文用三个反引号分隔。
以列表形式给出每个主题的 0 或 1 的答案。
主题列表:{", ".join(topic_list)}
文本示例:'''{story}'''
"""
response = get_completion(prompt)
print(response)
nasa: 1
local government: 0
engineering: 0
employee satisfaction: 1
federal government: 1
topic_dict = {i.split(': ')[0]: int(i.split(': ')[1]) for i in response.split(sep='\n')}
if topic_dict['nasa'] == 1:
print("提醒:有关 NASA 的新闻!")
提醒:有关 NASA 的新闻!