[提升AI应用性能:如何利用Portkey将Langchain推向生产环境]

5 阅读3分钟
# 提升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方法添加默认请求头。
  • 更新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"
})

常见问题和解决方案

  1. 网络访问问题: 在某些地区访问API可能不够稳定,建议使用API代理服务。
  2. API密钥管理: 使用Portkey的虚拟密钥可以更安全地存储和管理API密钥。

总结和进一步学习资源

Portkey为Langchain提供了一套完整的生产就绪解决方案,从多模型支持到高级路由和负载均衡,开发者可以更高效地管理和优化AI应用的性能。进一步了解Portkey,可访问以下资源:

参考资料

  • Portkey官方网站及相关文档
  • Langchain官方文档

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

---END---