跳到主要内容

内存管理选项

Langflow 为您的流程和 Langflow 服务器提供灵活的内存管理选项,用于存储和检索相关数据。 这包括基本的 Langflow 数据库表、文件管理、缓存以及聊天内存。

存储选项和路径

Langflow 支持本地内存和外部内存选项。

Langflow 的默认存储选项是存储在系统缓存目录中的 SQLite 数据库。

默认存储路径取决于您的操作系统和安装方式:

  • macOS Desktop: /Users/<username>/.langflow/data/database.db
  • Windows Desktop: C:\Users\<name>\AppData\Roaming\com.Langflow\data\langflow.db
  • OSS macOS/Windows/Linux/WSL (uv pip install): <path_to_venv>/lib/python3.12/site-packages/langflow/langflow.db (Python版本可能有所不同)
  • OSS macOS/Windows/Linux/WSL (git clone): <path_to_clone>/src/backend/base/langflow/langflow.db

或者,您可以为所有 Langflow 存储使用外部 PostgreSQL 数据库。 您还可以选择性地为聊天内存使用外部存储,与其他 Langflow 存储分开。 有关更多信息,请参阅 配置外部内存存储聊天内存

本地 Langflow 数据库表

以下表存储在 langflow.db 中:

ApiKey: 管理 Langflow API 身份验证密钥。组件 API 密钥存储在 Variables 表中。有关更多信息,请参阅 API 密钥和身份验证

File: 存储上传到 Langflow 文件管理系统的文件的元数据,包括文件名、路径、大小和存储提供商。有关更多信息,请参阅 管理文件

Flow: 包含流程定义,包括节点、边和组件,以 JSON 或数据库记录形式存储。有关更多信息,请参阅 构建流程

Folder: 为流程存储提供结构,包括单用户文件夹和多用户访问的共享文件夹。有关更多信息,请参阅 在项目中管理流程

Message: 存储组件之间发生的聊天消息和交互。有关更多信息,请参阅 消息对象存储聊天内存

Transactions: 记录流程运行的执行历史和结果。此信息用于 日志记录

User: 存储用户帐户信息,包括凭据、权限、配置文件和用户管理设置。有关更多信息,请参阅 API 密钥和身份验证

Variables: 存储全局加密值和凭据。有关更多信息,请参阅 全局变量

VertexBuild: 跟踪流程中各个节点的构建状态。有关更多信息,请参阅 在 Playground 中测试流程

有关更多信息,请参阅 源代码 中的数据库模型。

配置外部内存

要将默认的 Langflow SQLite 数据库替换为其他数据库,请修改 LANGFLOW_DATABASE_URL 环境变量,然后使用您的 .env 文件启动 Langflow:


_10
LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow

示例请参阅 配置外部 PostgreSQL 数据库

LANGFLOW_DB_CONNECTION_SETTINGS 是数据库连接池设置的 JSON 配置,允许您微调数据库连接池和超时设置。


_10
LANGFLOW_DB_CONNECTION_SETTINGS='{"pool_size": 20, "max_overflow": 30, "pool_timeout": 30, "pool_pre_ping": true, "pool_recycle": 1800, "echo": false}'

连接池参数

  • pool_size: 在连接池中保持的最大数据库连接数。默认:20 个连接。
  • max_overflow: 可以在 pool_size 之外创建的最大连接数。默认:30 个连接。
  • pool_timeout: 从连接池获取连接超时前等待的秒数。默认:30 秒。
  • pool_pre_ping: 如果为 true,则在每次签出时测试连接的活跃性。默认:true
  • pool_recycle: 连接自动回收的秒数。默认:1800 秒(30 分钟)。
  • echo: 如果为 true,则为调试目的记录 SQL 查询。默认:false

配置缓存内存

Langflow 的默认缓存行为是异步内存缓存。


_10
LANGFLOW_LANGCHAIN_CACHE=InMemoryCache
_10
LANGFLOW_CACHE_TYPE=async

Langflow 官方仅支持默认的异步内存缓存。其他后端是实验性的,可能会随时更改。 默认行为适用于大多数用例。

注意

Redis 和其他外部缓存设置是实验性的,不受官方支持。

缓存环境变量

VariableTypeDefaultDescription
LANGFLOW_CACHE_TYPEStringasync设置 Langflow 内部缓存系统的缓存类型。
LANGFLOW_LANGCHAIN_CACHEStringInMemoryCache设置 Langchain 缓存系统的缓存类型。
LANGFLOW_REDIS_HOSTStringlocalhostRedis 服务器主机名。
LANGFLOW_REDIS_PORTInteger6379Redis 服务器端口。
LANGFLOW_REDIS_DBInteger0Redis 数据库编号。
LANGFLOW_REDIS_CACHE_EXPIREInteger3600缓存过期时间(秒)。
LANGFLOW_REDIS_PASSWORDStringNot setRedis 认证密码(可选)。

存储聊天记忆

带有 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 存储的数据库。

有关更多信息 and 示例,请参阅 Message History 组件Agent memory

另请参阅

Search