到目前為止,我們做的聊天機器人都屬於「單輪對話」:
使用者問一句,AI 回一句,下一輪就忘記之前聊過什麼。
但如果你希望 AI 能「記住之前的對話內容」,就要用到 上下文 (context) 概念。
今天我們來實作一個「多輪對話」的版本。
想像一下:
你:我叫小明
你:請問我叫什麼?
沒有上下文 → AI 會說「我不知道」
有上下文 → AI 會記得「小明」,並正確回答
要做到這件事,我們只要把「之前的對話」也傳給 API 就行了。
來看程式碼:
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
messages = [
{"role": "system", "content": "你是一個友善的聊天助理。"}
]
while True:
user_input = input("你:")
if user_input.lower() in ["exit", "quit"]:
print("AI:掰掰,下次再聊!")
break
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages
)
ai_reply = response.choices[0].message.content
print("AI:", ai_reply)
# 把AI的回覆也記錄下來
messages.append({"role": "assistant", "content": ai_reply})
我們來看看成果:
整個流程就像 我跟你講 → AI 回答 → 我再講 → AI 再回 → 全部都寫進同一個地方。
因為 AI 每次都能看到完整的記事本,所以就能記得之前聊過什麼。
注意事項
對話越長 花費的 Token 越多
如果對話紀錄太多,可以自己設計「只保留最近 N 筆」的方式
不然可能會變成「哎呀,怎麼爆掉了!」
今天我們學會了 多輪對話的上下文處理:
用 messages 記錄整個對話
把使用者的問題跟AI的回覆都存起來
AI 就能接續聊天,而不是每次都重置
明天的 Day 7,我們要來整理 常見錯誤與解決方法,
例如 API Rate Limit、Key 錯誤、Timeout 等狀況。