Portkey 是 AI 应用的控制面板。凭借其受欢迎的 AI Gateway 和可观测性套件,数百个团队可以部署 **可靠**, **cost-efficient**,并且 **快速** apps.
LangChain 的 LLMOps
Portkey 为 LangChain 带来生产就绪能力。使用 Portkey,您可以
- - [x] 通过统一 API 连接 150+ 模型,
- - [x] 查看 42+ **指标和日志** 用于所有请求,
- - [x] 启用 **语义缓存** 以降低延迟和成本,
- - [x] 实现自动 **重试和降级** 处理失败的请求,
- - [x] 添加 **自定义标签** 到请求中以便更好地跟踪和分析,并 更多.
快速入门 - Portkey 和 LangChain
由于 Portkey 完全兼容 OpenAI 签名,您可以通过 ChatOpenAI 接口连接。
- - 设置
base_urlasPORTKEY_GATEWAY_URL - - 添加
default_headers以使用createHeaders辅助方法消费 Portkey 所需的标头。
首先,通过 在此注册获取您的 Portkey API 密钥。(点击左下角的个人资料图标,然后点击"复制 API 密钥")或在 您自己的环境中.
部署开源 AI Gateway
pip install -U portkey_ai
现在,我们可以通过更新 LangChain 中的 ChatOpenAI 模型来连接 Portkey AI Gateway
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?")
请求会通过您的 Portkey AI Gateway 路由到指定的 provider。Portkey 还会开始记录您账户中的所有请求,使调试变得非常简单。
通过 AI Gateway 使用 150+ 模型
AI Gateway 的强大之处在于,您可以使用上述代码片段连接 AI Gateway 支持的 20+ 提供商中的 150+ 模型。
让我们修改上面的代码来调用 Anthropic 的 claude-3-opus-20240229 model.
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?")
Portkey AI 网关将对 Anthropic 的 API 请求进行身份验证,并以 OpenAI 格式返回响应供您使用。
AI 网关扩展了 LangChain 的 ChatOpenAI 类,使其成为调用任何提供商和任何模型的单一接口。
高级路由 - 负载均衡、故障转移、重试
Portkey AI 网关通过配置优先的方法,为 LangChain 带来负载均衡、故障转移、实验和金丝雀测试等功能。
让我们看一个 **示例** ,我们可能想要在 gpt-4 和 claude-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-4 和 claude-3-opus-20240229 ,按照定义的权重比例分配。
您可以找到更多 Portkey 配置示例.
**追踪链和代理**
Portkey 的 LangChain 集成让您可以完全了解代理的运行情况。让我们看一个 流行的代理工作流程.
我们只需要修改 ChatOpenAI 类以如上使用 AI 网关。
from langchain_classic import hub
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_openai import ChatOpenAI
from langchain.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 代理日志
更多文档可在此处获取:
- - 可观测性 - portkey.ai/docs/product/observability-modern-monitoring-for-llms
- - AI 网关 - portkey.ai/docs/product/ai-gateway-streamline-llm-integrations
- - 提示词库 - portkey.ai/docs/product/prompt-library
您可以在这里查看我们流行的开源 AI 网关 - github.com/portkey-ai/gateway
有关每个功能的详细信息以及如何使用它, 请参阅 Portkey 文档。如果您有任何问题或需要进一步帮助, 请通过 Twitter 联系我们。 或我们的 支持邮箱.