CrewAI Memory 與 Knowledge:讓 Agent 不再每次重學

6 min read

預設情況下,Agent 跑完就像失憶——下一輪執行又是全新的開始,什麼都不記得。

對一次性任務來說這無所謂,但如果你的業務情境是「客服對話要記得前面說了什麼」或者「Agent 需要引用你公司的內部文件」,這就是個大問題。

CrewAI 提供兩種機制來解決這件事,但很多人混淆了它們的用途——先把兩個概念分清楚。

Memory vs Knowledge:先搞清楚差別

memory:流程內的對話上下文記憶。記的是「這輪執行裡說了什麼、做了什麼」,以及更長期的跨對話記憶(需要設定 storage)。

knowledge_sources:外部知識文件。你把 PDF、文字檔、資料庫內容告訴 Agent,它在回答問題時會參考這些來源。

用白話分:memory 是「記住剛聊過什麼」,knowledge_sources 是「知道手冊裡寫什麼」。兩個是獨立的機制,可以分開啟用,也可以同時用。

啟用 Memory

from crewai import Crew
 
crew = Crew(
    agents=agents,
    tasks=tasks,
    memory=True,
    verbose=True,
)

memory=True 啟用的是短期記憶(Short-term memory),讓同一次執行裡的 Agent 能記住前面的對話。預設儲存在記憶體裡,流程結束就清空。

如果你需要跨次執行的長期記憶,要設定持久化儲存(SQLite 或其他 storage 後端)。這個進階一點,初期先用短期記憶測試看看效果。

整合 Knowledge Sources

from crewai import Crew
from crewai.knowledge.source.pdf_knowledge_source import PDFKnowledgeSource
from crewai.knowledge.source.text_file_knowledge_source import TextFileKnowledgeSource
 
product_manual = PDFKnowledgeSource(file_paths=["docs/product_manual.pdf"])
faq_doc = TextFileKnowledgeSource(file_paths=["docs/faq.txt"])
 
crew = Crew(
    agents=agents,
    tasks=tasks,
    memory=True,
    knowledge_sources=[product_manual, faq_doc],
    verbose=True,
)

knowledge_sources 裡的文件會被向量化,Agent 在執行任務時可以語意搜尋這些文件的內容。這本質上是一個 RAG 架構——所以如果你做過 RAG,這個機制你一定不陌生。

哪些場景最有感?

客服與問答流程:Agent 需要記住這次對話的前文,同時引用產品手冊或 FAQ 文件回答問題。Memory + Knowledge 一起用,效果最好。

分階段專案:前一步的分析結果要在後一步延續,而且可能需要對照公司的標準文件來判斷。

文件問答:你有一批內部文件(SOP、設計文件、知識庫),想讓 Agent 能準確引用,而不是靠模型的訓練資料猜答案。

3 個實務提醒

不要一次塞太多文件:Knowledge sources 是做向量搜尋,文件越多,搜尋品質越難控制、成本也越高。先從最高價值、最常被引用的文件開始,不要把整個硬碟都餵進去。

Task 要明確要求引用知識源:Agent 不一定會主動去搜知識文件,在 Task 描述裡加上「優先引用知識庫中的資訊」或「如果知識庫有相關資料,必須引用」,效果會明顯提升。

重要回答要要求來源:即使有了知識源,模型還是可能會幻覺。在 expected_output 裡要求 Agent 標注引用來源,可以幫你快速識別哪些回答是真的基於文件、哪些是模型自己發明的。

常見問題

Q:knowledge_sources 支援哪些文件格式?
目前支援 PDF、TXT、CSV、JSON 等常見格式。如果你有特殊格式的資料(例如資料庫查詢結果),可以先轉成 JSON 或文字檔再餵入。

Q:short-term memory 和 long-term memory 有什麼差別?
Short-term memory 在當次 Crew 執行範圍內有效,執行結束就清空。Long-term memory 需要持久化儲存(SQLite 或自訂 storage),跨次執行都能保留。客服類應用通常需要 long-term memory。

Q:有了 knowledge_sources,還需要 SerperDevTool 嗎?
取決於任務性質。Knowledge sources 適合「查你自己的文件」,SerperDevTool 適合「查網路上最新資訊」。兩個用途不一樣,通常會搭配使用。

下一步

記憶和知識源設定好了,流程也能跑了——接下來是最實用的生存指南:出問題的時候怎麼查、怎麼修最快
👉 除錯與常見錯誤