記憶體管理選項
AgentBuilder 提供靈活的記憶體管理選項,用於儲存和擷取與您的 Flow和 AgentBuilder 伺服器相關的資料。 這包括必要的 AgentBuilder 資料庫表格、檔案管理、快取,以及聊天記憶體。
儲存選項和路徑
AgentBuilder 支援本機記憶體和外部記憶體選項。
AgentBuilder 的預設儲存選項是 SQLite 資料庫。 預設儲存路徑取決於您的作業系統和安裝方法:
- AgentBuilder Desktop:
- macOS:
/Users/<username>/.langflow/data/database.db - Windows:
C:\Users\<name>\AppData\Roaming\com.AgentBuilderDesktop\data\database.db
- macOS:
- AgentBuilder OSS
- macOS/Windows/Linux/WSL 使用
uv pip install:<path_to_venv>/lib/python3.12/site-packages/langflow/langflow.db(Python 版本可能不同。資料庫不會在虛擬環境之間共用,因為它與 venv 路徑綁定。) - macOS/Windows/Linux/WSL 使用
git clone:<path_to_clone>/src/backend/base/langflow/langflow.db
- macOS/Windows/Linux/WSL 使用
AgentBuilder 提供一些預設資料庫路徑的替代方案:
-
配置目錄:設定
LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True以將資料庫儲存在您的 AgentBuilder 配置目錄中,如LANGFLOW_CONFIG_DIR中設定。 -
外部 PostgreSQL 資料庫:您可以使用外部 PostgreSQL 資料庫來儲存所有的 AgentBuilder 資料。 如需更多資訊,請參閱設定外部記憶體
外部儲存對於在解除安裝 AgentBuilder 後保留資料,或在多個虛擬環境之間共用相同資料庫很有用。
-
單獨的聊天記憶體:您可以選擇性地僅對聊天記憶體使用外部儲存,與其他 AgentBuilder 儲存分離。 如需更多資訊,請參閱儲存聊天記憶體。
-
無資料庫:要停用所有資料庫操作並運行無操作階段,請在您的 AgentBuilder 環境變數 中設定
LANGFLOW_USE_NOOP_DATABASE=True。 這對於不想保留任何資料的測試很有用。
AgentBuilder 資料庫表格
以下表格儲存在 langflow.db 中:
• ApiKey:管理 AgentBuilder API 認證金鑰。Components API 金鑰儲存在 Variables 表格中。如需更多資訊,請參閱 API 金鑰和認證。
• File:儲存上傳到 AgentBuilder 檔案管理系統的檔案中繼資料,包括檔案名稱、路徑、大小和儲存提供者。如需更多資訊,請參閱管理檔案。
• Flow:包含 Flow定義,包括節點、邊緣和Components,以 JSON 或資料庫記錄形式儲存。如需更多資訊,請參閱建置 Flow。
要自動從 Flow資料中移除 API 金鑰和權杖,然後儲存 Flow到資料庫,請在您的 AgentBuilder 環境變數 中設定 LANGFLOW_REMOVE_API_KEYS=True。
當為 true 時,任何標記為密碼欄位且名稱中包含 api、key 或 token 的欄位在儲存FLOW前會設定為 null。
這有助於防止憑證儲存在資料庫中。
• Folder:為 Flow儲存提供結構,包括單一使用者資料夾和由多個使用者存取的共用資料夾。如需更多資訊,請參閱在專案中管理 Flow。
• Message:儲存Components之間發生的聊天訊息和互動。如需更多資訊,請參閱 Message 物件 和 儲存聊天記憶體。
• Transactions:記錄 Flow執行的歷史記錄和結果。此資訊用於日誌記錄。
• User:儲存使用者帳戶資訊,包括憑證、權限、設定檔和使用者管理設定。如需更多資訊,請參閱 API 金鑰和認證。
• Variables:儲存全域加密值和憑證。如需更多資訊,請參閱全域變數 和 Components API 金鑰。
• VertexBuild:追蹤 Flow中個別節點的建置狀態。如需更多資訊,請參閱在 Playground 中測試 Flow。
如需更多資訊,請參閱原始碼中的資料庫模型。
設定外部記憶體
要將預設的 AgentBuilder SQLite 資料庫替換為另一個資料庫,請設定 LANGFLOW_DATABASE_URL 環境變數為您的資料庫 URL,然後使用您的 .env 檔案啟動 AgentBuilder。
如需更多資訊和範例,請參閱設定外部 PostgreSQL 資料庫。
_10LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow
要微調您的資料庫連線集區和逾時設定,您可以設定以下額外的環境變數:
-
LANGFLOW_DATABASE_CONNECTION_RETRY:是否重試遺失的連線到您的 AgentBuilder 資料庫。如果為true,AgentBuilder 會在連線失敗時再次嘗試連線到資料庫。預設:false。 -
LANGFLOW_DB_CONNECT_TIMEOUT:在放棄鎖定釋放或建立資料庫連線之前等待的秒數。這可能與LANGFLOW_DB_CONNECTION_SETTINGS中的pool_timeout分離。預設:30。 -
LANGFLOW_DB_CONNECTION_SETTINGS:包含以下資料庫連線集區設定的 JSON 字典:pool_size:連線集區中保持開啟的基本連線數。預設:20。max_overflow:在需要時可以超過pool_size建立的最大連線數。預設:30。pool_timeout:從集區等待連線逾時的秒數。預設:30。pool_pre_ping:如果為true,集區會在每次取出時測試連線的活躍度。預設:true。pool_recycle:連線自動回收的秒數。預設:1800(30 分鐘)。echo:如果為true,SQL 查詢會記錄以進行除錯。預設:false。
例如:
_10LANGFLOW_DB_CONNECTION_SETTINGS='{"pool_size": 20, "max_overflow": 30, "pool_timeout": 30, "pool_pre_ping": true, "pool_recycle": 1800, "echo": false}'不要使用已棄用的環境變數
LANGFLOW_DB_POOL_SIZE或LANGFLOW_DB_MAX_OVERFLOW。 請改用LANGFLOW_DB_CONNECTION_SETTINGS中的pool_size和max_overflow。
設定快取記憶體
預設的 AgentBuilder 快取行為是非同步的記憶體內快取:
_10LANGFLOW_LANGCHAIN_CACHE=InMemoryCache_10LANGFLOW_CACHE_TYPE=async
AgentBuilder 官方僅支援預設的非同步記憶體內快取,這適用於大多數使用案例。 其他快取選項,例如 Redis,是實驗性的,可能會在沒有通知的情況下變更。 如果您想使用非預設的快取設定,您可以使用以下環境變數:
| Variable | Type | Default | Description |
|---|---|---|---|
LANGFLOW_CACHE_TYPE | String | async | 設定 AgentBuilder 內部快取系統的快取類型。可能的值:async、redis、memory、disk。如果將類型設定為 redis,則您還必須設定 LANGFLOW_REDIS_* 環境變數。 |
LANGFLOW_LANGCHAIN_CACHE | String | InMemoryCache | 設定 LangChain 快取系統(AgentBuilder 依賴)的快取儲存類型,可以是 InMemoryCache 或 SQLiteCache。 |
LANGFLOW_REDIS_HOST | String | localhost | 如果 LANGFLOW_CACHE_TYPE=redis,則為 Redis 伺服器主機名稱。 |
LANGFLOW_REDIS_PORT | Integer | 6379 | 如果 LANGFLOW_CACHE_TYPE=redis,則為 Redis 伺服器連接埠。 |
LANGFLOW_REDIS_DB | Integer | 0 | 如果 LANGFLOW_CACHE_TYPE=redis,則為 Redis 資 料庫編號。 |
LANGFLOW_REDIS_CACHE_EXPIRE | Integer | 3600 | 如果 LANGFLOW_CACHE_TYPE=redis,則為快取過期時間(秒)。 |
LANGFLOW_REDIS_PASSWORD | String | Not set | 如果 LANGFLOW_CACHE_TYPE=redis,則為 Redis 認證的可選密碼。 |
儲存聊天記憶體
具有 Chat Input 或 Chat Output Components的聊天式 Flow會產生儲存在 AgentBuilder messages 表格中的聊天歷史記錄。
至少,這用作聊天日誌,但功能上與提供 LLM 歷史背景的聊天記憶體不同。
要在FLOW中儲存和擷取聊天記憶體,您可以使用 Message History Components或 Agent Components的內建聊天記憶體。
聊天記憶體如何運作?
聊天記憶體是 LLM 或 agent 的快取,用於保留過去的對話以保留和參考未來互動中的背景。 例如,如果使用者已經告訴 LLM 他們的名字,LLM 可以從聊天記憶體中擷取該資訊,而不是在未來的對話或訊息中要求使用者重複。
聊天記憶體與向量儲存記憶體不同,因為它是專門為從資料庫儲存和擷取聊天訊息而建置的。
支援聊天記憶體的Components(例如 Agent 和 Message History Components)提供對其各自資料庫的存取 作為記憶體。 作為記憶體的擷取對於 LLM 和 agent 很重要,因為此儲存和擷取機制是專門設計來回憶過去對話的背景。 與向量儲存不同,向量儲存設計用於語意搜尋和文字區塊的擷取,聊天記憶體設計用於以最佳化對話歷史記錄的方式儲存和擷取聊天訊息。
Session ID 和聊天記憶體
聊天歷史記錄和記憶體按 session ID (session_id) 分組。
預設的 session ID 是 Flow ID,這意味著 Flow的所有聊天訊息都儲存在相同的 session ID 下作為一個大型聊天階段。
為了更好地隔離聊天記憶體,特別是在多個使用者使用的 Flow中,請考慮使用自訂 session ID。 例如,如果您使用使用者 ID 作為 session ID,則每個使用者的聊天歷史記錄會單獨儲存,隔離他們聊天的背景與其他使用者的聊天。
聊天記憶體選項
聊天記憶體的儲存位置和方式取決於您的FLOW中使用的Components:
-
Agent Components:此Components預設啟用內建聊天記憶體。 此記憶體允許 agent 從與相同 session ID 相關聯的先前對話中擷取和參考訊息。 所有訊息都儲存在 AgentBuilder 儲存 中,且Components提供最小的記憶體配置選項,例如要擷取的訊息數。
Agent Components的內建聊天記憶體足以滿足大多數使用案例。
如果您想使用外部聊天記憶體儲存、在聊天背景之外擷取記憶體,或將聊天記憶體與語言模型Components(non-agent)一起使用,您必須使用 Message History Components(有或沒有第三方聊天記憶體Components)。
-
Message History Components:預設情況下,此Components從 AgentBuilder 儲存儲存和擷取記憶體,除非您附加第三方聊天記憶體Components。它提供了一些排序和過濾記憶體的額外選項,儘管大多數這些選項也內建於 Agent Components作為可配置或固定參數。
您可以將 Message History Components與語言模型或 agent 一起使用,也可以不使用。 例如,如果您需要在聊天之外從記憶體擷取資料,您可以使用 Message History Components直接從您的聊天記憶體資料庫擷取該資料,而無需將其饋送到聊天中。
-
第三方聊天記憶體Components:僅在您需要從專用的外部聊天記憶體資料庫儲存或擷取聊天記憶體時使用其中一個Components。 通常,這僅在您有 AgentBuilder 儲存無法滿足的特定儲存需求時才需要。 例如,如果您想直接處理資料庫來管理聊天記憶體資料,或想使用與預設 AgentBuilder 儲存不同的資料庫。
如需更多資訊和範例,請參閱 Message History Components 和 Agent 記憶體。