跳到主要內容
Open on GitHub

Flyte

Flyte 是一個開源協調器,有助於建構生產級的資料和 ML 管線。它專為可擴展性和可重複性而設計,並利用 Kubernetes 作為其底層平台。

本筆記本的目的是演示如何將 FlyteCallback 整合到您的 Flyte 任務中,使您能夠有效地監控和追蹤您的 LangChain 實驗。

安裝與設定

  • 透過執行命令 pip install flytekit 安裝 Flytekit 函式庫。
  • 透過執行命令 pip install flytekitplugins-envd 安裝 Flytekit-Envd 外掛程式。
  • 透過執行命令 pip install langchain 安裝 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 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>"

<your_openai_api_key><your_serp_api_key> 替換為您從 OpenAI 和 Serp API 獲得的各自 API 金鑰。

為了保證您管線的可重複性,Flyte 任務已容器化。每個 Flyte 任務都必須與一個映像檔相關聯,該映像檔可以在整個 Flyte 工作流程 中共享,也可以為每個任務單獨提供。

為了簡化為每個 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) 是一個方便的入門選項。

選擇登錄檔後,您可以繼續建立將 LangChain 指標記錄到 Flyte Deck 的 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?"
)

這些任務是開始在 Flyte 中執行 LangChain 實驗的起點。

在 Kubernetes 上執行 Flyte 任務

要在已設定的 Flyte 後端上執行 Flyte 任務,請使用以下命令

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

此命令將在 Flyte 後端啟動 langchain_llm 任務的執行。您可以以類似的方式觸發其餘兩個任務。

指標將在 Flyte UI 上顯示如下

Screenshot of Flyte Deck showing LangChain metrics and a dependency tree visualization.


此頁面是否有幫助?