Skip to main content
Open on GitHub

Flyte

Flyte 是一个开源的工作流编排器,旨在帮助构建生产级别的数据和机器学习管道。 它专为可扩展性和可重复性而设计,利用 Kubernetes 作为其底层平台。

本笔记本的目的是演示如何将FlyteCallback集成到您的Flyte任务中,使您能够有效地监控和跟踪您的LangChain实验。

安装与设置

  • 通过运行命令pip install flytekit安装Flytekit库。
  • 通过运行命令 pip install flytekitplugins-envd 安装 Flytekit-Envd 插件。
  • 通过运行命令pip install langchain来安装LangChain。
  • 在您的系统上安装 Docker

Flyte 任务

Flyte 的 task 是 Flyte 的基础构建块。 要执行 LangChain 实验,您需要编写 Flyte 任务,这些任务定义了涉及的特定步骤和操作。

注意:入门指南提供了详细的逐步说明,指导如何在本地安装Flyte并运行您的第一个Flyte管道。

首先,导入必要的依赖项以支持您的LangChain实验。

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:

# Set OpenAI API key
os.environ["OPENAI_API_KEY"] = "<your_openai_api_key>"

# Set Serp API key
os.environ["SERPAPI_API_KEY"] = "<your_serp_api_key>"

替换为从 OpenAI 和 Serp API 获取的相应 API 密钥。

为了保证你的管道的可重复性,Flyte任务被容器化。 每个Flyte任务必须与一个镜像相关联,这个镜像可以在整个Flyte workflow中共享,或者为每个任务单独提供。

为了简化为每个Flyte任务提供所需依赖项的过程,您可以初始化一个ImageSpec对象。 这种方法会自动触发Docker构建,从而减轻用户手动创建Docker镜像的需求。

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 HubGitHub Container Registry (GHCR) 是一个方便的起点。

一旦选择了注册表,您可以继续创建Flyte任务,将LangChain指标记录到Flyte Deck。

以下示例展示了与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

@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)

代理

@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中运行您的LangChain实验的起点。

在Kubernetes上执行Flyte任务

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

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

此命令将启动在Flyte后端执行langchain_llm任务。您可以以类似的方式触发剩余的两个任务。

指标将在Flyte UI上显示如下:

Flyte Deck 显示 LangChain 指标和依赖树可视化的截图。


这个页面有帮助吗?