跳到主要內容
Open on GitHub

Portkey

Portkey 是 AI 應用程式的控制面板。憑藉其熱門的 AI 閘道和可觀測性套件,數百個團隊交付可靠具成本效益快速的應用程式。

Langchain 的 LLMOps

Portkey 為 Langchain 帶來生產就緒性。透過 Portkey,您可以

  • 透過統一的 API 連接到 150 多個模型,
  • 檢視所有請求的 42 多個指標與日誌
  • 啟用語義快取以減少延遲與成本,
  • 為失敗的請求實作自動重試與回退
  • 為請求新增自訂標籤,以實現更佳的追蹤與分析,以及更多功能

快速入門 - Portkey 與 Langchain

由於 Portkey 完全相容於 OpenAI 簽章,您可以透過 ChatOpenAI 介面連接到 Portkey AI 閘道。

  • base_url 設定為 PORTKEY_GATEWAY_URL
  • 新增 default_headers 以使用 createHeaders 輔助方法來取用 Portkey 所需的標頭。

若要開始使用,請在此註冊以取得您的 Portkey API 金鑰。(按一下左下角的個人資料圖示,然後按一下「複製 API 金鑰」),或在您自己的環境中部署開源 AI 閘道。

接下來,安裝 Portkey SDK

pip install -U portkey_ai

我們現在可以透過更新 Langchain 中的 ChatOpenAI 模型來連接到 Portkey AI 閘道

from langchain_openai import ChatOpenAI
from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL

PORTKEY_API_KEY = "..." # Not needed when hosting your own gateway
PROVIDER_API_KEY = "..." # Add the API key of the AI provider being used

portkey_headers = createHeaders(api_key=PORTKEY_API_KEY,provider="openai")

llm = ChatOpenAI(api_key=PROVIDER_API_KEY, base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers)

llm.invoke("What is the meaning of life, universe and everything?")
API 參考文檔:ChatOpenAI

請求會透過您的 Portkey AI 閘道路由到指定的 provider。Portkey 也會開始記錄您帳戶中的所有請求,這使得偵錯變得極其簡單。

View logs from Langchain in Portkey

透過 AI 閘道使用 150 多個模型

當您能夠使用上述程式碼片段連接到 AI 閘道支援的 20 多個供應商的 150 多個模型時,AI 閘道的強大功能就體現出來了。

讓我們修改上面的程式碼,以呼叫 Anthropic 的 claude-3-opus-20240229 模型。

Portkey 支援 虛擬金鑰,這是一種在安全保管庫中儲存和管理 API 金鑰的簡便方法。讓我們嘗試使用虛擬金鑰來進行 LLM 呼叫。您可以導覽至 Portkey 中的「虛擬金鑰」標籤,並為 Anthropic 建立一個新金鑰。

virtual_key 參數設定了所用 AI 供應商的身份驗證和供應商。在我們的案例中,我們使用的是 Anthropic 虛擬金鑰。

請注意,api_key 可以留空,因為不會使用該身份驗證。

from langchain_openai import ChatOpenAI
from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL

PORTKEY_API_KEY = "..."
VIRTUAL_KEY = "..." # Anthropic's virtual key we copied above

portkey_headers = createHeaders(api_key=PORTKEY_API_KEY,virtual_key=VIRTUAL_KEY)

llm = ChatOpenAI(api_key="X", base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers, model="claude-3-opus-20240229")

llm.invoke("What is the meaning of life, universe and everything?")
API 參考文檔:ChatOpenAI

Portkey AI 閘道將驗證對 Anthropic 的 API 請求,並以 OpenAI 格式取回回應供您使用。

AI 閘道擴展了 Langchain 的 ChatOpenAI 類別,使其成為呼叫任何供應商和任何模型的單一介面。

進階路由 - 負載平衡、回退、重試

Portkey AI 閘道透過優先配置的方法,為 Langchain 帶來了負載平衡、回退、實驗和 Canary 測試等功能。

讓我們以一個範例來說明,我們可能希望在 gpt-4claude-opus 之間分配 50:50 的流量,以測試這兩個大型模型。此閘道配置如下所示

config = {
"strategy": {
"mode": "loadbalance"
},
"targets": [{
"virtual_key": "openai-25654", # OpenAI's virtual key
"override_params": {"model": "gpt4"},
"weight": 0.5
}, {
"virtual_key": "anthropic-25654", # Anthropic's virtual key
"override_params": {"model": "claude-3-opus-20240229"},
"weight": 0.5
}]
}

然後,我們可以在從 langchain 發出的請求中使用此配置。

portkey_headers = createHeaders(
api_key=PORTKEY_API_KEY,
config=config
)

llm = ChatOpenAI(api_key="X", base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers)

llm.invoke("What is the meaning of life, universe and everything?")

當調用 LLM 時,Portkey 將按照定義權重的比例將請求分發到 gpt-4claude-3-opus-20240229

您可以在此處找到更多配置範例。

追蹤鏈與代理程式

Portkey 的 Langchain 整合讓您可以完全掌握代理程式的執行情況。讓我們以一個熱門的代理工作流程為例。

我們只需要修改 ChatOpenAI 類別以使用如上的 AI 閘道即可。

from langchain import hub  
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders

prompt = hub.pull("hwchase17/openai-tools-agent")

portkey_headers = createHeaders(
api_key=PORTKEY_API_KEY,
virtual_key=OPENAI_VIRTUAL_KEY,
trace_id="uuid-uuid-uuid-uuid"
)

@tool
def multiply(first_int: int, second_int: int) -> int:
"""Multiply two integers together."""
return first_int * second_int


@tool
def exponentiate(base: int, exponent: int) -> int:
"Exponentiate the base to the exponent power."
return base**exponent


tools = [multiply, exponentiate]

model = ChatOpenAI(api_key="X", base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers, temperature=0)

# Construct the OpenAI Tools agent
agent = create_openai_tools_agent(model, tools, prompt)

# Create an agent executor by passing in the agent and tools
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

agent_executor.invoke({
"input": "Take 3 to the fifth power and multiply that by thirty six, then square the result"
})

您可以在 Portkey 儀表板上看到請求的日誌以及追蹤 ID: Portkey 上的 Langchain 代理程式日誌

更多文檔可在此處取得

您可以在此處查看我們熱門的開源 AI 閘道 - https://github.com/portkey-ai/gateway

如需每個功能的詳細資訊以及如何使用它,請參閱 Portkey 文檔。如果您有任何問題或需要進一步協助,請在 Twitter 上聯繫我們。 或我們的支援電子郵件


此頁面是否對您有幫助?