跳到主要内容

容器化 Langflow 应用程序

在可视化编辑器中设计流程只是构建使用 Langflow 的应用程序的第一步。

一旦你拥有一个功能正常的流程,就可以在更大的应用程序(如网站或移动应用)中使用该流程。 由于 Langflow 既是 IDE 也是运行时,你可以使用 Langflow 在本地构建和测试你的流程,然后在生产环境中打包和部署你的流程。

本指南介绍了从初始设置到打包和部署的 Langflow 应用程序开发。 本文档不解释如何编写完整的应用程序;它只描述如何在更大的应用程序上下文中包含 Langflow。

目录结构

以下示例描述了一个最小 Langflow 应用程序的目录结构:


_10
LANGFLOW-APPLICATION/
_10
├── docker.env
_10
├── Dockerfile
_10
├── flows/
_10
│ ├── flow1.json
_10
│ └── flow2.json
_10
├── langflow-config-dir/
_10
├── README.md

此目录包含以下内容:

  • docker.env: 此文件被Replicate到 Docker 镜像中,作为容器根目录下的 .env 文件。
  • Dockerfile: 此文件控制你的 Langflow 镜像的构建方式。
  • /flows: 此文件夹保存你想要托管的流程,也就是你的应用程序使用的流程。
  • /langflow-config-dir: 此文件夹在 Dockerfile 中被引用,作为你的 Langflow 部署的配置文件、数据库和日志的位置。
  • README.md: 这是你的应用程序文档的典型 README 文件。

这是一个 Langflow 应用程序目录的最小示例。 你的应用程序可能有额外的文件和文件夹,例如用于自定义组件的 /components 文件夹,或用于额外依赖项的 pyproject.toml 文件。

包管理

基础 Langflow Docker 镜像包含 Langflow 核心依赖项,因为它使用 langflowai/langflow:latest 作为父镜像。

如果你的应用程序需要额外的依赖项,请为这些依赖项创建一个 pyproject.toml 文件。 有关更多信息,请参阅 安装自定义依赖项

要将带有额外依赖项的应用程序部署到 Docker,你必须将 pyproject.tomluv.lock 文件Replicate到 Docker 镜像中。 为此,请将以下内容添加到你的 Langflow 应用程序的 Dockerfile 中:


_10
COPY pyproject.toml uv.lock /app/

环境变量

docker.env 文件是一个加载到你的 Docker 镜像中的 .env 文件。 它包含控制 Langflow 行为的环境变量,如身份验证、数据库存储、API 密钥和服务器配置。 例如:


_10
LANGFLOW_AUTO_LOGIN=True
_10
LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True
_10
LANGFLOW_BASE_URL=http://0.0.0.0:7860
_10
OPENAI_API_KEY=sk-...

你可以在 Dockerfile 中设置环境变量,但如果你在 docker.env 和 Dockerfile 中都设置了环境变量,Langflow 会使用 docker.env 中设置的值。

Langflow 会自动将 预定义列表 中的环境变量转换为全局变量。

如果你的自定义环境变量不在此预定义列表中,你需要使用 LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT 环境变量显式包含它们。

此环境变量接受一个逗号分隔的环境变量列表,这些变量将从环境中获取并存储为全局变量。

例如,此配置在 Langflow 数据库中创建名为 WATSONX_PROJECT_IDWATSONX_API_KEY 的全局变量,并使它们可用于组件中:


_10
LANGFLOW_AUTO_LOGIN=True
_10
LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True
_10
WATSONX_PROJECT_ID=your_project_id
_10
WATSONX_API_KEY=your_api_key
_10
LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT=WATSONX_PROJECT_ID,WATSONX_API_KEY

或者,设置 LANGFLOW_FALLBACK_TO_ENV_VAR=True 以允许在 Langflow 设置中设置的全局变量,如果 Langflow 无法从全局变量中检索变量值,则使用同名的环境变量。

例如,在此配置中,当组件引用 Langflow 数据库中不存在的全局变量 WATSONX_PROJECT_IDWATSONX_API_KEY 时,Langflow 将自动使用相应的环境变量值作为回退。


_10
LANGFLOW_AUTO_LOGIN=True
_10
LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True
_10
LANGFLOW_FALLBACK_TO_ENV_VAR=True
_10
WATSONX_PROJECT_ID=your_project_id
_10
WATSONX_API_KEY=your_api_key

有关更多信息,请参阅 Langflow 环境变量全局变量

Secrets

为简单起见,Langflow 文档中的示例可能会直接引用 API 密钥和其他敏感值。 在您自己的应用程序中,您应该始终遵循管理密钥的行业最佳实践,例如使用环境变量或密钥管理工具。

有关生成 Langflow 中的身份验证密钥和管理密钥的信息,请参阅 API 密钥和身份验证

Storage

默认情况下,Langflow 使用 SQLite 数据库进行存储。 如果您更喜欢使用 PostgreSQL,请参阅 配置外部 PostgreSQL 数据库

有关存储的更多信息,包括缓存和内存,请参阅 内存管理选项

Flows

您的本地 Langflow 实例可能有许多用于不同应用程序的流程。 当您将 Langflow 打包为应用程序的依赖项时,您只想包含您的应用程序使用的流程。

  1. 导出与您的应用程序相关的 流程

    如果您有链式流程(触发其他流程的流程),请确保导出所有必要的流程。

  2. 将导出的 Langflow JSON 文件添加到您应用程序目录中的 /flows 文件夹。

Components

您在 Langflow 可视化编辑器中看到的核心组件和包会自动包含在基础 Langflow Docker 镜像中。

如果您为应用程序创建了任何 自定义组件,则必须将这些组件包含在您的应用程序目录中:

  1. 在您的应用程序目录中创建一个 /components 文件夹。
  2. 将您的自定义组件文件添加到 /components 文件夹。
  3. 在您的 docker.env 中指定 /components 的路径。

Langflow Dockerfile

Dockerfile 决定了您的 Langflow 镜像的构建方式,包括依赖项、流程、组件和配置文件。

至少,您需要指定基础 Langflow 镜像、在容器中创建必要的文件夹、将文件夹和文件Replicate到容器中,并提供启动命令。


_29
# 使用基础 Langflow 镜像的最新版本
_29
FROM langflowai/langflow:latest
_29
_29
# 在容器中创建文件夹并设置工作目录
_29
RUN mkdir /app/flows
_29
RUN mkdir /app/langflow-config-dir
_29
WORKDIR /app
_29
_29
# 将 flows、langflow-config-dir 和 docker.env Replicate到容器中
_29
COPY flows /app/flows
_29
COPY langflow-config-dir /app/langflow-config-dir
_29
COPY docker.env /app/.env
_29
_29
# 可选:将自定义组件Replicate到容器中
_29
COPY components /app/components
_29
_29
# 可选:使用自定义依赖项
_29
COPY pyproject.toml uv.lock /app/
_29
_29
# 如果 docker.env 中未设置,则设置环境变量
_29
ENV PYTHONPATH=/app
_29
ENV LANGFLOW_LOAD_FLOWS_PATH=/app/flows
_29
ENV LANGFLOW_CONFIG_DIR=/app/langflow-config-dir
_29
ENV LANGFLOW_COMPONENTS_PATH=/app/components
_29
ENV LANGFLOW_LOG_ENV=container
_29
_29
# 在端口 7860 上运行 Langflow 服务器的命令
_29
EXPOSE 7860
_29
CMD ["langflow", "run", "--backend-only", "--env-file","/app/.env","--host", "0.0.0.0", "--port", "7860"]

在此 Dockerfile 中直接设置的环境变量指定了 Langflow 的资源路径。 如果这些变量也在 docker.env 中设置,则 docker.env 中的值将覆盖 Dockerfile 中设置的值。

在此示例中,ENV LANGFLOW_LOG_ENV=container 将序列化 JSON 的日志记录行为设置为 stdout,以跟踪容器化环境中应用程序的行为。有关更多信息,请参阅 日志记录

后端模式

CMD 中的 --backend-only 标志以后端模式启动 Langflow,仅提供编程访问。 当您将 Langflow 作为应用程序的依赖项运行且不需要访问可视化编辑器时,建议使用此模式。

如果您想同时提供 Langflow 可视化编辑器和后端,则省略 --backend-only

有关更多信息,请参阅 在 Docker 上部署 Langflow

测试你的 Langflow Docker 镜像

构建并运行你的 Langflow Docker 镜像以进行测试。

此示例在本地运行容器。 有关在 Docker Hub 上发布镜像并远程运行 Langflow 容器的信息,请参阅 部署到 Docker Hub 和 Kubernetes

  1. 构建 Docker 镜像:


    _10
    docker build -t langflow-pokedex:1.2.0 .

  2. 运行 Docker 容器以启动你的 Langflow 服务器:


    _10
    docker run -p 7860:7860 langflow-pokedex:1.2.0

  3. 要确认容器按预期提供你的流程,请使用 Langflow API 运行一个流程:

    1. 打开应用程序 /flows 文件夹中的某个 JSON 文件,然后在 附加元数据和项目信息 中查找流程的 id

      有许多 id 值;请确保获取的是整个流程的 ID,而不是单个组件的 ID。 如果你的流程很复杂,尝试搜索流程的名称,它通常位于流程的 id 附近。


      _10
      "name": "Basic Prompting",
      _10
      "description": "Perform basic prompting with an OpenAI model.",
      _10
      "id": "e4167236-938f-4aca-845b-21de3f399858",

    2. 使用上一步中的流程 ID 向 /v1/run/$FLOW_ID 端点发送 POST 请求。

      以下示例运行一个简单的 LLM 聊天流程,该流程响应聊天输入字符串。 如有必要,修改你的流程的 payload。 例如,如果你的流程没有 Chat Input 组件,你必须修改 payload 以提供流程所需的预期输入。


      _10
      curl --request POST \
      _10
      --url 'http://localhost:7860/api/v1/run/e4167236-938f-4aca-845b-21de3f399858?stream=true' \
      _10
      --header 'Content-Type: application/json' \
      _10
      --data '{
      _10
      "input_value": "Tell me about Charizard.",
      _10
      "output_type": "chat",
      _10
      "input_type": "chat",
      _10
      "session_id": "charizard_test_request"
      _10
      }'

      About this example

      此命令运行 Pokédex 模板流程。 它提供关于特定宝可梦的聊天输入,使用可选的自定义 session_id,并通过 ?stream=true 启用响应流式传输。

      默认的 会话 ID 是流程 ID。 自定义会话 ID 可以帮助隔离唯一的对话线程,以保持 LLM 的上下文清洁,并且它们可以帮助在流程日志中识别特定对话,使调试更容易。

      此命令使用响应流式传输,因为 Pokédex 流程可能返回大量文本。 要使用批处理,请设置 ?stream=false

    3. 根据你运行的特定流程,验证请求是否成功且响应是否有效。

      这确认你的 Langflow Docker 镜像已正确配置,并且此流程可通过容器上托管的 Langflow API 服务器访问。 当你构建和测试整个应用程序堆栈时,你的前端应用程序可以使用 Langflow API 请求来触发由你的 Langflow 容器提供的流程,就像你在上一步中手动测试流程一样。

      此示例通过向 /v1/run/$FLOW_ID 端点发送聊天输入来触发流程。 有关流程触发器的更多示例,请参阅 使用 Webhook 触发流程创建可以摄取文件的聊天机器人 教程。

部署到 Docker Hub 和 Kubernetes

当你准备好与世界分享你的应用程序时,你需要在生产环境中提供 Langflow 服务。 有关部署 Langflow 的更多信息,请参阅以下内容:

Search