["Portkey 与 Langchain 的完美结合:AI 应用的高效生产力改进"]

138 阅读4分钟
# Portkey 与 Langchain 的完美结合:AI 应用的高效生产力改进

在当今竞争激烈的 AI 应用开发中,提升应用的可靠性、成本效益和响应速度是团队成功的关键。Portkey 提供了一个强大的解决方案,通过其流行的 AI Gateway 和 Observability Suite,帮助团队轻松构建和管理 AI 应用。本文将介绍如何使用 Portkey 与 Langchain 的集成来增强 AI 应用的生产力,并提供实用的代码示例。

## 1. 引言

这篇文章将探讨 Portkey 的主要功能,以及如何通过与 Langchain 的集成来优化 AI 应用的性能和可观测性。我们将提供实际的代码示例,展示如何通过 Portkey 的 AI Gateway 连接多个 AI 模型,并使用其高级路由功能进行流量分配和失败请求的自动重试。

## 2. 主要内容

### 2.1 Portkey 的功能概述

Portkey 不仅提供丰富的功能以提高 AI 应用的生产准备性,还简化了 Langchain 的集成过程。其核心功能包括:
- 通过统一 API 连接到 150 多个模型
- 提供 42+ 的指标和日志以便于调试
- 使用语义缓存减少延迟和成本
- 自动重试和回退机制
- 自定义请求标签以提高跟踪和分析能力

### 2.2 快速开始:Portkey 与 Langchain 的结合

Portkey 与 OpenAI 的签名完全兼容,因此您可以通过 `ChatOpenAI` 接口连接到 Portkey AI Gateway。设置过程如下:

1. 获取 Portkey API 密钥。
2. 安装 Portkey SDK:
   ```bash
   pip install -U portkey_ai
  1. 更新 Langchain 中的 ChatOpenAI 模型以连接到 Portkey AI Gateway:
from langchain_openai import ChatOpenAI
from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL

PORTKEY_API_KEY = "..." # 使用您的 Portkey API 密钥
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?")
# 使用API代理服务提高访问稳定性

2.3 使用 AI Gateway 与 150+ 模型交互

您可以轻松通过上面的代码片段连接到 AI Gateway 支持的多个模型。以下是如何与 Anthropic 的 claude-3-opus-20240229 模型进行交互的例子:

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?")
# 使用API代理服务提高访问稳定性

2.4 高级路由:负载均衡、回退和重试

Portkey AI Gateway 通过配置优先的方法为 Langchain 带来了负载均衡、回退和实验测试能力。以下是如何进行模型流量分配的示例:

config = {
    "strategy": {
         "mode": "loadbalance"
    },
    "targets": [{
        "virtual_key": "openai-25654",
        "override_params": {"model": "gpt4"},
        "weight": 0.5
    }, {
        "virtual_key": "anthropic-25654",
        "override_params": {"model": "claude-3-opus-20240229"},
        "weight": 0.5
    }]
}

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?")
# 使用API代理服务提高访问稳定性

3. 代码示例

下面是一个完整的代码示例,展示如何使用 Portkey 和 Langchain 进行模型调用和请求跟踪:

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" # 跟踪请求的 trace_id
)

@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)

agent = create_openai_tools_agent(model, tools, prompt)
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"
})
# 使用API代理服务提高访问稳定性

4. 常见问题和解决方案

  • 网络访问限制问题:在某些地区,访问 OpenAI 或其他 API 可能会受到限制。使用 API 代理服务可以提高访问的稳定性和速度。
  • API 密钥管理:Portkey 提供虚拟密钥,便于安全地存储和管理多个 API 密钥。
  • 模型调用失败:通过 Portkey 的自动重试和回退机制可以提高请求的成功率。

5. 总结和进一步学习资源

Portkey 与 Langchain 的集成显著提高了 AI 应用的开发效率和稳定性。通过统一的 API 和强大的可观测性工具,开发者可以轻松管理多个模型和请求。建议查看以下资源以获得进一步学习的机会:

6. 参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---