# 提升AI应用性能:如何利用Portkey将Langchain推向生产环境
## 引言
在AI应用的开发中,如何快速、高效、可靠地将模型推向生产环境成为一个亟待解决的问题。Portkey作为控制AI应用的控制面板,通过其AI Gateway和可观察性套件,助力开发者构建稳定且成本效益高的AI应用。本文将带您深入了解如何通过Portkey增强Langchain的生产能力。
## 主要内容
### 1. Portkey与Langchain的集成
Portkey与Langchain的集成非常简单。通过其统一API,你可以轻松连接150多个模型,并监控所有请求的42多个指标和日志。同时,Portkey还提供了语义缓存、自动重试和失败回退机制,有效降低延迟和成本。
### 2. 快速入门:连接Portkey与Langchain
- **安装Portkey SDK**:
```shell
pip install -U portkey_ai
- 配置API网关:
- 获取Portkey API密钥,设置基础URL为
PORTKEY_GATEWAY_URL
。 - 使用
createHeaders
方法添加默认请求头。
- 获取Portkey API密钥,设置基础URL为
- 更新Langchain的ChatOpenAI模型:
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代理服务提高访问的稳定性。
3. 使用虚拟密钥进行安全的API调用
Portkey的虚拟密钥功能让API密钥管理更为安全。你可以在Portkey的虚拟密钥选项卡中创建新的密钥,示例如下:
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?")
4. 高级路由与负载均衡
Portkey支持复杂的路由配置,允许在gpt-4和claude-3-opus模型之间进行流量分配。
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?")
5. 跟踪链条与代理
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"
)
@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可能不够稳定,建议使用API代理服务。
- API密钥管理: 使用Portkey的虚拟密钥可以更安全地存储和管理API密钥。
总结和进一步学习资源
Portkey为Langchain提供了一套完整的生产就绪解决方案,从多模型支持到高级路由和负载均衡,开发者可以更高效地管理和优化AI应用的性能。进一步了解Portkey,可访问以下资源:
参考资料
- Portkey官方网站及相关文档
- Langchain官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---