iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
生成式 AI

30天生成式AI入門與實作日記系列 第 27

[Day 27] 多輪對話與記憶的概念

  • 分享至 

  • xImage
  •  

昨天的版本已經能讓AI同時做出摘要、翻譯與回答問題,而且使用者可以自己輸入文章與問題,這代表這個小專案的主要功能已經完整實現。

但在實際測試時我發現一件事:每次詢問都是一次性的。
也就是說,如果我想要追問前一個問題,AI其實不會記得前面的內容。
它只會根據我這次輸入的文章和問題重新思考,這樣就沒辦法做到真正的對話體驗。

為什麼會這樣?
原因在於我們目前的程式設計方式:
每次呼叫answer_question()時,模型只會看到這一次的context(文章 + 問題),
而不會保留先前的聊天紀錄。

換句話說,這是一個單輪問答系統。
如果想讓AI能記得之前的內容,就需要引入多輪對話的概念。

多輪對話是什麼?
所謂多輪對話,就是讓AI能根據之前的互動持續延伸對話內容。
例如:
我:What is AI?
AI:AI stands for Artificial Intelligence.
我:How is it used in medicine?
AI:It’s used for diagnosis, medical imaging, and drug discovery.
這裡第二個問題「How is it used in medicine?」並沒有重複提到「AI」,
但AI仍能理解上下文,這就是多輪對話的關鍵能力。

怎麼做到?
原理其實不難,只要把過去的對話內容一起傳給模型就行。
簡單的做法像這樣:

chat_history = []

while True:
    user_input = input("你:")
    chat_history.append({"role": "user", "content": user_input})

    response = model.generate(chat_history)  #模型看到完整對話歷史
    print("AI:", response)

    chat_history.append({"role": "assistant", "content": response})

這樣AI在每次生成回覆時,就能看到前面的對話內容,自然就能做到連貫的回答。
不過這也有一個問題:上下文會越來越長,模型記憶體壓力也會增加。
這時就需要一些額外技術,例如:

  • 限制歷史訊息數量(只保留最近幾輪)
  • 使用向量資料庫(像是RAG)來記憶重要內容

目前我的版本仍是單輪問答,但其實已經具備升級的基礎。
接下來如果要讓它更像真正的AI聊天夥伴,我就可以試著加入對話歷史的記憶機制,讓它能理解上下文、維持對話連貫性。
或許,這就是我這個AI問答小專案的下一個挑戰!


上一篇
[Day 26] 打造屬於自己的AI問答機器人:使用教學篇
下一篇
[Day 28] AI問答機器人的未來:從工具到智慧助理
系列文
30天生成式AI入門與實作日記28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言