iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
生成式 AI

AI 三十天,哎呀每天都很難:OpenAI API 生存指南系列 第 6

# Day 6:對話斷了?多輪對話上下文處理技巧

  • 分享至 

  • xImage
  •  

到目前為止,我們做的聊天機器人都屬於「單輪對話」:
使用者問一句,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})

我們來看看成果:
https://ithelp.ithome.com.tw/upload/images/20250920/201693765PR1L9CUhB.png

整個流程就像 我跟你講 → AI 回答 → 我再講 → AI 再回 → 全部都寫進同一個地方。
因為 AI 每次都能看到完整的記事本,所以就能記得之前聊過什麼。

注意事項
對話越長 花費的 Token 越多
如果對話紀錄太多,可以自己設計「只保留最近 N 筆」的方式
不然可能會變成「哎呀,怎麼爆掉了!」

今天我們學會了 多輪對話的上下文處理:
用 messages 記錄整個對話
把使用者的問題跟AI的回覆都存起來
AI 就能接續聊天,而不是每次都重置
明天的 Day 7,我們要來整理 常見錯誤與解決方法,
例如 API Rate Limit、Key 錯誤、Timeout 等狀況。


上一篇
# Day 5:模型好任性!調整 temperature 與 max_tokens
下一篇
Day 7:壞掉了!API 常見錯誤與生存指南
系列文
AI 三十天,哎呀每天都很難:OpenAI API 生存指南10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言