Skip to main content
Portkey 是 AI 应用的控制面板。凭借其广受欢迎的 AI 网关和可观测性套件,数百个团队构建了可靠具有成本效益快速的应用。

LangChain 的 LLMOps

Portkey 为 LangChain 带来了生产就绪能力。使用 Portkey,您可以:
  • 通过统一 API 连接 150 多种模型,
  • 查看所有请求的 42 多个指标和日志
  • 启用语义缓存以降低延迟和成本,
  • 为失败的请求实现自动重试和回退
  • 为请求添加自定义标签以进行更好的跟踪和分析,以及 更多

快速入门 - Portkey 与 LangChain

由于 Portkey 与 OpenAI 签名完全兼容,您可以通过 ChatOpenAI 接口连接到 Portkey AI 网关。
  • base_url 设置为 PORTKEY_GATEWAY_URL
  • 使用 createHeaders 辅助方法添加 default_headers 以使用 Portkey 所需的 headers。
首先,通过 在此注册 获取您的 Portkey API 密钥。(点击左下角的个人资料图标,然后点击”Copy API Key”)或在 您自己的环境中 部署开源 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 = "..." # 当自托管网关时不需要
PROVIDER_API_KEY = "..." # 添加正在使用的 AI 提供商的 API 密钥

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 虚拟密钥

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 的虚拟密钥
        "override_params": {"model": "gpt4"},
        "weight": 0.5
    }, {
        "virtual_key": "anthropic-25654", # Anthropic 的虚拟密钥
        "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 您可以在 此处 找到更多配置示例。

追踪链和 Agent

Portkey 的 LangChain 集成为您提供了对 Agent 运行的完整可见性。让我们以 流行的 Agentic 工作流 为例。 我们只需像上面那样修改 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)

# 构建 OpenAI 工具 agent
agent = create_openai_tools_agent(model, tools, prompt)

# 通过传入 agent 和工具创建 agent 执行器
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 Agent 日志 其他文档可在此处找到: 您可以在此处查看我们流行的开源 AI 网关 - github.com/portkey-ai/gateway 有关每个功能的详细信息及其使用方法,请参阅 Portkey 文档。如果您有任何问题或需要进一步帮助,请在 Twitter 上联系我们。 或我们的 支持邮箱