# 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
- 更新 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. 参考资料
- Portkey 官方文档:portkey.ai/docs/
- Langchain GitHub 仓库:github.com/hwchase17/l…
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---