跳到主要内容

内存管理选项

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
  • 开源版 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

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 数据库.


_10
LANGFLOW_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:


    _10
    LANGFLOW_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 缓存行为是异步的内存缓存:


_10
LANGFLOW_LANGCHAIN_CACHE=InMemoryCache
_10
LANGFLOW_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)。

另请参阅​

Search