内存管理选项
Langflow 为您的工作流和 Langflow 服务器相关数据的存储和检索提供了灵活的内存管理选项。 这包括基本的 Langflow 数据库表、文件管理和缓存,以及聊天记忆。
存储选项和路径
Langflow 支持本地存储和外部存储选项。
Langflow 的默认存储选项是 SQLite 数据库。 默认存储路径取决于您的操作系统和安装方法:
- Langflow 桌面版:
- macOS:
/Users/<username>/.langflow/data/database.db - Windows:
C:\Users\ <name>\AppData\Roaming\com.LangflowDesktop\data\database.db
- macOS:
- 开源版 Langflow (OSS)
- macOS/Windows/Linux/WSL (使用
uv pip install):<path_to_venv>/lib/python3.12/site-packages/langflow/langflow.db(Python 版本可能会有所不同。由于数据库与虚拟环境路径绑定,因此无法在不同虚拟环境之间共享。) - macOS/Windows/Linux/WSL (使用
git clone):<path_to_clone>/src/backend/base/langflow/langflow.db
- macOS/Windows/Linux/WSL (使用
Langflow 提供了几种默认数据库路径的替代方案:
-
配置目录: 将
LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True设置为在LANGFLOW_CONFIG_DIR设置的 Langflow 配置目录中存储数据库。 -
外部 PostgreSQL 数据库: 您可以对所有 Langflow 存储使用外部 PostgreSQL 数据库。 有关更多信息,请参阅 配置外部存储。
如果您希望在卸载 Langflow 后保留数据,或者在多个虚拟环境之间共享同一个数据库,外部存储会非常有用。
-
独立的聊天记忆: 您可以有选择地仅对聊天记忆使用外部存储,与其他 Langflow 存储分开。 有关更多信息,请参阅 存储聊天记忆。
-
无数据库: 要禁用所有数据库操作并运行空操作 (no-op) 会话,请在您的 Langflow 环境变量 中设置
LANGFLOW_USE_NOOP_DATABASE=True。 这对于您不想持久化任何数据的测试非常有用。
Langflow 数据库表
以下表存储在 langflow.db 中:
• ApiKey: 管理 Langflow API 身份验证密钥。组件 API 密钥存储在 Variables 表中。有关更多信息,请参阅 API 密钥和身份验证。
• File: 存储上传到 Langflow 文件管理系统的文件的元数据,包括文件名、路径、大小和存储提供商。有关更多信息,请参阅 管理文件。
• Flow: 包含工作流定义,包括以 JSON 或数据库记录形式存储的节点、边和组件。有关更多信息,请参阅 构建工作流。
要在将工作流保存到数据库之前自动从工作流数据中删除 API 密钥和令牌,请在您的 Langflow 环境变量 中设置 LANGFLOW_REMOVE_API_KEYS=True。
当为 true 时,任何被标记为密码字段且名称中还包含 api、key 或 token 的字段都会在工作流保存之前被设置为 null。
这有助于防止凭据存储在数据库中。
• Folder: 为工作流存储提供结构,包括单用户文件夹和多用户访问的共享文件夹。有关更多信息,请参阅 在项目中管理工作流。
• Message: 存储组件之间发生的聊天消息和交互。有关更多信息,请参阅 Message 对象 和 存储聊天记忆。
• Transactions: 记录工作流运行的执行历史和结果。此信息用于 日志记录。
• User: 存储用户帐户信息,包括凭据、权限、个人资料和用户管理设置。有关更多信息,请参阅 API 密钥和身份验证。
• Variables: 存储全局加密值和凭据。有关更多信息,请参阅 全局变量 和 组件 API 密钥。
• VertexBuild: 跟踪工作流中各个节点的构建状态。有关更多信息,请参阅 在游乐场中测试工作流。
有关更多信息,请参阅 源代码 中的数据库模型。
配置外部存储
要使用另一个数据库替换默认的 Langflow SQLite 数据库,请将 LANGFLOW_DATABASE_URL 环境变量设置为您的数据库 URL,然后使用您的 .env 文件启动 Langflow。
有关更多信息和示例,请参阅 配置外部 PostgreSQL 数据库.
_10LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow
要微调您的数据库连接池和超时设置,您可以设置以下附加环境变量:
-
LANGFLOW_DATABASE_CONNECTION_RETRY: 是否重试与 Langflow 数据库失去的连接。如果为true,则连接失败时 Langflow 会尝试再次连接到数据库。默认值:false。 -
LANGFLOW_DB_CONNECT_TIMEOUT: 在放弃等待锁释放或建立数据库连接之前等待的秒数。这可能与LANGFLOW_DB_CONNECTION_SETTINGS中的pool_timeout分开。默认值:30。 -
LANGFLOW_MIGRATION_LOCK_NAMESPACE: 迁移期间 PostgreSQL 咨询锁 (advisory lock) 的可选命名空间标识符。如果未提供,将使用数据库 URL 的哈希值。当多个 Langflow 实例共享同一个数据库并需要协调迁移锁定时非常有用。 -
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。
For example:
_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。 -
LANGFLOW_MIGRATION_LOCK_NAMESPACE: 用于数据库迁移期间 PostgreSQL 咨询锁的可选命名空间。当运行共享同一个 PostgreSQL 数据库的多个 Langflow 实例时,这非常有用。每个实例应使用唯一的命名空间以避免冲突。如果未设置,Langflow 使用默认命名空间。此设置仅在将 PostgreSQL 用作数据库后端时适用。
配置缓存内存
默认的 Langflow 缓存行为是异步的内存缓存:
_10LANGFLOW_LANGCHAIN_CACHE=InMemoryCache_10LANGFLOW_CACHE_TYPE=async
Langflow 官方仅支持默认的异步内存缓存,这适用于大多数用例。 其他缓存选项(如 Redis)是实验性的,可能会在不通知的情况下发生变化。 如果您想使用非默认缓存设置,可以使用以下环境变量:
| 变量 | 类型 | 默认值 | 描述 |
|---|---|---|---|
LANGFLOW_CACHE_TYPE | 字符串 | async | 设置 Langflow 内部缓存系统的缓存类型。可能的值:async、redis、memory、disk。如果将类型设置为 redis,则还必须设置 LANGFLOW_REDIS_* 环境变量。 |
LANGFLOW_LANGCHAIN_CACHE | 字符串 | InMemoryCache | 设置 LangChain 缓存系统(Langflow 的依赖项)的缓存存储类型,可以是 InMemoryCache 或 SQLiteCache。 |
LANGFLOW_REDIS_HOST | 字符串 | localhost | 如果 LANGFLOW_CACHE_TYPE=redis,则为 Redis 服务器主机名。 |
LANGFLOW_REDIS_PORT | 整数 | 6379 | 如果 LANGFLOW_CACHE_TYPE=redis,则为 Redis 服务器端口。 |
LANGFLOW_REDIS_DB | 整数 | 0 | 如果 LANGFLOW_CACHE_TYPE=redis,则为 Redis 数据库编号。 |
LANGFLOW_REDIS_CACHE_EXPIRE | 整数 | 3600 | 如果 LANGFLOW_CACHE_TYPE=redis,则为缓存过期时间(秒)。 |
LANGFLOW_REDIS_PASSWORD | 字符串 | 未设置 | 如果 LANGFLOW_CACHE_TYPE=redis,则为 Redis 身份验证的可选密码。 |
存储聊天记忆
带有 Chat Input 或 Chat Output 组件的基于聊天的流会生成存储在 Langflow messages 表中的聊天历史记录。
至少,这充当了聊天日志,但在功能上与为 LLM 提供历史上下文的聊天记忆不同。
要在工作流中存储和检索聊天记忆,您可以使用 Message History 组件或 Agent 组件内置的聊天记忆。
聊天记忆是如何工作的?
聊天记忆是 LLM 或代理的缓存,用于保存过去的对话,以便在未来的交互中保留 和引用该上下文。 例如,如果用户已经告诉 LLM 他们的名字,LLM 可以从聊天记忆中检索该信息,而不是在未来的对话或消息中要求用户重复。
聊天记忆与向量存储记忆不同,因为它是专门为从数据库中存储和检索聊天消息而构建的。
支持聊天记忆的组件(例如 Agent 和 Message History 组件)提供对其各自数据库作为记忆的访问。 作为记忆检索对于 LLM 和代理来说是一个重要的区别,因为这种存储和检索机制专门设计用于回忆过去对话中的上下文。 与旨在进行语义搜索和文本块检索的向量存储不同,聊天记忆旨在以针对对话历史进行优化的方式存储和检索聊天消息。
会话 ID 和聊天记忆
聊天历史和记忆按 会话 ID (session_id) 进行分组。
默认的会话 ID 是工作流 ID,这意味着工作流的所有聊天消息都存储在同一个会话 ID 下,作为一个大型聊天会话。
为了更好地隔离聊天记忆,特别是在由多个用户使用的流中,请考虑使用自定义会话 ID。 例如,如果您使用用户 ID 作为会话 ID,那么每个用户的聊天历史记录将单独存储,从而将他们的聊天上下文与其他用户的聊天隔离。
聊天记忆选项
聊天记忆存储的位置和方式取决于您在工作流中使用的组件:
-
Agent 组件: 该组件具有默认启用的内置聊天记忆。 此记忆允许代理检索和引用与同一个会话 ID 相关的先前对话中的消息。 所有消息都存储在 Langflow 存储 中,并且该组件提供了最少的内存配置选项,例如要检索的消息数量。
Agent 组件的内置聊天记忆对于大多数用例来说已经足够了。
如果您想使用外部聊天记忆存储,在聊天上下文之外检索记忆,或在语言模型组件(而非代理)中使用聊天记忆,则必须使用 Message History 组件(可以配合或不配合第三方聊天记忆组件)。
-
Message History 组件: 默认情况下,除非您连接了第三方聊天记忆组件,否则此组件会从 Langflow 存储中存储和检索记忆。它提供了更多的排序和过滤记忆选项,尽管这些选项中的大多数也作为可配置或固定参数内置在 Agent 组件中。
您可以在有或没有语言模型或代理的情况下使用 Message History 组件。 例如,如果您需要在聊天之外检索记忆数据,可以使用 Message History 组件直接从聊天记忆数据库中获取该数据,而无需将其输入到聊天中。
-
第三方聊天记忆组件: 仅当您需要从专用的外部聊天记忆数据库中存储或检索聊天记忆时,才使用这些组件之一。 通常,只有当您有 Langflow 存储无法满足的特定存储需求时,这才是有必要的。 例如,如果您想通过直接操作数据库来管理聊天记忆数据,或者如果您想使用与默认 Langflow 存储不同的数据库。
有关更多信息和示例,请参阅 Message History 组件 和 代理记忆 (Agent memory)。