打造高效的数据和ML管道:使用Flyte与LangChain进行实验追踪

57 阅读3分钟

引言

在现代数据科学和机器学习项目中,构建可扩展且可重复的管道至关重要。Flyte作为一个开源的调度器,提供了一种构建生产级数据和ML管道的方式。它利用Kubernetes作为其底层平台,确保了高效的资源管理和任务调度。在这篇文章中,我们将探讨如何将FlyteCallbackHandler集成到您的Flyte任务中,帮助您有效监控和追踪LangChain实验。

安装与设置

要开始使用Flyte和LangChain,您需要安装必要的库和工具:

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

同时,您需要在系统上安装Docker,以支持任务的容器化。

Flyte任务

Flyte任务是Flyte中的基础构建块。要执行LangChain实验,您需要编写Flyte任务来定义特定的步骤和操作。以下是一个关于如何设置和使用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

设置环境变量

确保您拥有OpenAI API和Serp 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获取的密钥。

创建任务的镜像

为了保证管道的可重复性,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>",
)

Flyte任务示例

下面的示例展示了如何通过Flyte任务记录LangChain的指标。

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?"
    )

常见问题和解决方案

  1. 网络限制问题:由于某些地区的网络限制,API请求可能会失败。在这种情况下,可以考虑使用API代理服务以提高访问稳定性。

  2. Docker镜像构建失败:检查Dockerfile和依赖项是否正确配置。确保您的依赖库版本和注册表有权限访问。

  3. 缺少API密钥:确认您已将所有必需的API密钥设置为环境变量。

总结和进一步学习资源

这篇文章介绍了如何通过Flyte与LangChain实现实验的监控和追踪。Flyte提供了一种高效的方式来管理复杂的工作流,使得数据科学家和工程师能够专注于核心实验。

为了进一步学习,您可以参考以下资源:

参考资料

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

---END---