✨ 為什麼要「記憶」?
如果 AI 女友每次聊天都「失憶」,那體驗就會斷層。
想像一下:
• 你昨天告訴她:「我今天加班到 11 點,超累」。
• 隔天她卻完全不記得,繼續聊無關緊要的話題。
這樣就不像真實的陪伴。
所以,今天我們要加上 簡易記憶系統,讓她能記住你講過的重要事情,並在之後的回覆裡自然帶入。
⸻
🗂️ 記憶資料表設計
我們用 SQLite + peewee 來存放記憶:
from peewee import *
import os
from datetime import datetime
DB_PATH = os.getenv("MEMORY_DB", "memory.db")
db = SqliteDatabase(DB_PATH)
class BaseModel(Model):
class Meta:
database = db
class Memory(BaseModel):
id = AutoField()
user_id = CharField(index=True)
content = TextField() # 記下的訊息
created = DateTimeField(default=datetime.utcnow)
def init_memory_db():
db.connect(reuse_if_open=True)
db.create_tables([Memory], safe=True)
⸻
⚙️ 記憶儲存邏輯
我們不需要每一句話都存,只存「值得記的」:
• 喜好(我喜歡… / 我最愛…)
• 心情(我今天很累 / 我明天加班)
• 關鍵資訊(我討厭… / 我生日在…)
import re
from models_memory import Memory
def maybe_save_memory(user_id: str, text: str):
# 偵測可能需要記憶的句型
if re.search(r"(喜歡|最愛|今天|明天|加班|討厭|生日)", text):
Memory.create(user_id=user_id, content=text)
return True
return False
⸻
🤖 回覆時帶入記憶
在回覆前,把最近幾條「記憶」帶給 AI,讓她有上下文。
from models_memory import Memory
from memory_utils import maybe_save_memory
maybe_save_memory(chat_id, msg)
recent_memories = (
Memory.select()
.where(Memory.user_id == chat_id)
.order_by(Memory.created.desc())
.limit(3)
)
memory_texts = "\n".join([f"- {m.content}" for m in recent_memories])
system_prompt = f"""
你是一位 AI 女友,會結合使用者過去說過的話,讓回覆更貼心。
以下是他最近告訴你的事情:
{memory_texts if memory_texts else "(目前沒有特別的記憶)"}
"""
⸻
🧪 使用範例
1. 使用者:
「我最喜歡珍珠奶茶!」
→ ✅ 存進記憶。
2. 隔天,使用者:
「我下班好累。」
→ AI 回:
「辛苦了 💕 要不要我幫你點一杯珍珠奶茶?🥤」
這樣互動就更像真實的女友!
⸻
🎯 小結
今天我們幫 AI 女友加上了:
• 記憶資料表(SQLite / peewee)
• 自動儲存記憶(只抓取有價值的訊息)
• 對話帶入記憶(更有「陪伴感」)
🔮 下一步升級:
• 加上 記憶權重(重要 vs 瑣碎)
• 支援「忘掉」指令(ex:「忘掉我剛剛說的」)
• 引入 向量資料庫(如 Milvus / Weaviate),做長期語意記憶
⸻