0%

memory

記憶(Memory)

記憶能將對話中的重要資訊萃取、分類並儲存於 Markdown 檔案,同時建立向量資料庫以便語意檢索。這讓 AI 能夠長期記住使用者的資訊,並在需要時快速查詢相關內容。

流程

1. 萃取重要資訊

將使用者與 AI 的對話內容,透過語言模型萃取出關鍵資訊。

2. 分類記憶

利用語言模型判斷該資訊屬於哪個主題,並以主題名稱作為 Markdown 檔案名稱。

3. 儲存記憶

將資訊以 Markdown 格式儲存於指定目錄,並同步更新向量資料庫。

4. 記憶檢索

可透過語意查詢,從向量資料庫中搜尋最相關的記憶片段。


範例

1. 建立 MemoryManager 並新增記憶

建立儲存長期記憶的文件資料夾(test_memory),並將資訊加進記憶中,同時寫入檔案與加入向量資料庫。

1
2
3
4
5
6
7
8
9
10
11
12
import akasha

# 建立 MemoryManager
mem = akasha.MemoryManager(
memory_name="test_memory",
model="openai:gpt-4o",
embeddings="openai:text-embedding-3-small",
verbose=True,
)

# 新增一則記憶
mem.add_memory("Hi, 我的名字是小宋", "Hello, 小宋! 很高興認識你。")

2. 查詢記憶並用於問答

透過向量搜尋找出相關的記憶,並作為歷史紀錄,讓模型進行回答。

1
2
3
4
5
6
7
8
9
10
11
prompt = "我的名字是什麼?"
history_msg = mem.search_memory(prompt, top_k=3)

ak = akasha.ask(
model="openai:gpt-4o", max_input_tokens=8000, keep_logs=True, verbose=True
)

response = ak(
prompt=prompt,
history_messages=history_msg,
)

主要方法說明

add_memory(user_prompt, ai_response, language="ch")

  • 萃取對話重點,分類並儲存於 Markdown 檔案,同步更新向量資料庫。

search_memory(query, top_k)

  • 以語意查詢方式,從記憶庫中找出最相關的記憶片段。
  • top_k為最多搜尋的文件段落數量

show_memory(num=100)

  • 顯示前 num 筆記憶內容。

記憶檔案結構

每則記憶會包含:

  • 建立時間
  • 記憶內容
  • 原始對話

並以主題分類存放於 Markdown 檔案中。


備註

  • 記憶檔案與向量資料庫需保持同步,建議定期檢查。
  • 若有大量記憶,建議調整 chunk_size 以優化效能。