歡迎來到ChatGPT 開發人員提示工程課程(ChatGPT Prompt Engineering for Developers)!本課程將教您如何通過OpenAI API有效地利用大型語言模型(LLM)來創建強大的應用程序。
本課程由OpenAI 的Isa Fulford和 DeepLearning.AI 的Andrew Ng主講,深入了解 LLM 的運作方式,提供即時工程的最佳實踐,并演示 LLM API 在各種應用程序中的使用。
推斷
在本課程中,您將從產品評論和新聞文章中推斷情緒和主題。
設置
import openai
import osfrom 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 的新聞!