跳到主要内容
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?")
请求通过您的 Portkey AI 网关路由到指定的 provider。Portkey 还将开始记录您帐户中的所有请求,这使得调试变得异常简单。 在 Portkey 中查看 LangChain 的日志

通过 AI 网关使用 150+ 模型

AI 网关的强大之处在于,您可以使用上述代码片段连接到 AI 网关支持的 20 多个提供商的 150 多个模型。 让我们修改上面的代码,调用 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?")
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_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 代理日志 其他文档可在此处获取: 您可以在此处查看我们广受欢迎的开源 AI 网关 - github.com/portkey-ai/gateway 有关每个功能及其使用方法的详细信息,请参阅 Portkey 文档。如果您有任何问题或需要进一步的帮助,请在Twitter或我们的支持邮箱联系我们。
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.