跳到主要内容

内存管理选项

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 时,任何被标记为密码字段且名称中包含 apikeytoken 的字段都会在工作流保存之前被设置为 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_SIZELANGFLOW_DB_MAX_OVERFLOW。 而是使用 LANGFLOW_DB_CONNECTION_SETTINGS 中的 pool_sizemax_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 内部缓存系统的缓存类型。可能的值:asyncredismemorydisk。如果将类型设置为 redis,则还必须设置 LANGFLOW_REDIS_* 环境变量。
LANGFLOW_LANGCHAIN_CACHE字符串InMemoryCache设置 LangChain 缓存系统(Langflow 的依赖项)的缓存存储类型,可以是 InMemoryCacheSQLiteCache
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 InputChat Output 组件的基于聊天的流会生成存储在 Langflow messages 表中的聊天历史记录。 至少,这充当了聊天日志,但在功能上与为 LLM 提供历史上下文的聊天记忆不同。

要在工作流中存储和检索聊天记忆,您可以使用 Message History 组件或 Agent 组件内置的聊天记忆。

聊天记忆是如何工作的?

聊天记忆是 LLM 或代理的缓存,用于保存过去的对话,以便在未来的交互中保留和引用该上下文。 例如,如果用户已经告诉 LLM 他们的名字,LLM 可以从聊天记忆中检索该信息,而不是在未来的对话或消息中要求用户重复。

聊天记忆与向量存储记忆不同,因为它是专门为从数据库中存储和检索聊天消息而构建的。

支持聊天记忆的组件(例如 AgentMessage 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