Skip to main content
Open on GitHub

Portkey

Portkey 是 AI 应用的控制中心。凭借其广受欢迎的 AI 网关和可观测性套件,数百个团队能够开发出 可靠成本高效快速 的应用。

LLMOps for Langchain

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 参数用于设置所使用的人工智能提供商的认证和提供者。在本例中,我们使用的是 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 带来了负载均衡、故障转移、实验和金丝雀测试等功能。

让我们举一个示例,我们可能希望在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: Langchain Agent Logs on Portkey

附加文档可在此处获取:

您可以在此查看我们受欢迎的开源AI网关 - https://github.com/portkey-ai/gateway

每个功能的详细信息以及如何使用这些功能,请参考 Portkey 文档。如果您有任何问题或需要进一步帮助,请通过Twitter 联系我们或发送邮件至我们的支持邮箱