今天我們要通過設計一個具體的 Prompt Engineering 來製作聊天機器人內容,假設我們要製作一個 AI 聊天機器人,主要可以提供台北文化類型的旅遊建議。
需求:建立一個文化類型旅遊聊天機器人,讓 AI 根據使用者的喜好來推薦台北的旅遊景點
定義使用者需求:
設計 Prompt :
針對使用者需求,設計引導式 Prompt 讓 AI 生成旅遊建議
prompt = """
請根據以下條件,推薦台北的一個文化旅遊景點,並提供簡單的歷史背景:
1. 景點類型:文化
2. 交通:捷運
"""
程式碼實作:
from openai import AzureOpenAI
from openai_config import *
client = AzureOpenAI(
azure_endpoint=azure_endpoint,
api_key=api_key,
api_version=api_version
)
def get_prompt_response(prompt_text):
try:
response = client.chat.completions.create(
model=model_name,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt_text} # 使用者輸入
],
temperature=0, # 表示回應會更確定和保守,值越高(接近1),回應會越創意和隨機
max_tokens=500, # 控制回答長度
top_p=0.95, # 則限制了回應的隨機性,值越低回應越確定
frequency_penalty=0, # 調控進行推論時特定詞彙出現的頻率
presence_penalty=0, # 調控推論生成的內容中引入新概念或詞彙的傾向性
stop=None
)
# 取得 AI 回應
return response.choices[0].message.content
except Exception as e:
print(f"Error: {e}")
return None
# 定義 Prompt,這裡可以是任何你想要的提示
base_prompt = """
請根據以下條件,推薦台北的一個文化旅遊景點,並提供簡單的歷史背景:
1. 景點類型:文化
2. 交通:捷運
""" .strip()
while True:
# 使用者輸入
user_input = input("你: ")
if user_input.lower() == "exit": # 用戶输入 'exit'退出
break
# 將固定的 prompt 和使用者輸入結合
full_prompt = f"{base_prompt}\n使用者補充要求:{user_input}"
# 調用函數獲取 AI 的回應
response = get_prompt_response(full_prompt)
print(f"AI 回應: {response}")
base_prompt
:最初設置的 prompt,描述了基本需求,推薦台北文化旅遊景點。user_input
:使用者輸入的內容會被附加到 base_prompt 後面,使得每次 AI 都能同時考慮預設提示和使用者的需求。full_prompt
:將 base_prompt
和 user_input
結合成一個完整的 prompt 傳遞給 AI。get_prompt_response
:使用 full_prompt
作為提示,動態給 AI 生成回應。
藉由提示詢問後得到的回應:
當我們把提示刪除不使用提示,所得到回應,就不會包含文化景點、交通工具和歷史內容。不使用這些具體提示,AI 的回應會變得更廣泛,因為它沒有收到具體的指示去聚焦在某些特定的主題上。
以上就是 Prompt Engineering 的簡單應用,藉由 Prompt 設置具體條件與格式控制,可以生成更準確、實用的回應方式,這種方式也可以使用在其他情境,例如:技術支援、數據查詢或自動生成報告等等。