了解Portkey:可轻松编排大模型的开源AI网关 原创

发布于 2025-3-26 08:50
浏览
0收藏
Portkey AI网关允许应用开发者轻松整合生成式AI模型,在多个模型间无缝切换,并添加条件路由等功能且无需更改现有代码。

开源AI框架的爆发式增长,为开发者在部署AI模型方面提供了前所未有的灵活性。Portkey是一款开源AI网关,能够为多家AI服务商提供统一API以简化大模型编排,显著减少在应用程序中集成模型的障碍。除了大语言模型(LLM)之外,Portkey还支持视觉、音频(文生音频和语音转文本)、图像生成及其他多模态生成式AI模型。

项目概述——Portkey AI Gateway​

Portkey AI网关属于开源项目及托管服务,旨在简化多模型集成体验。它提供灵活的API,允许开发者在不同服务商的商业模型间轻松切换,包括OpenAI、Anthropic、Azure OpenAI、开源推理服务(如 Hugging Face、Groq和Fireworks AI)以及在Ollama上运行的本地模型。

作为统一的中间件,Portkey可实现:

  • 跨多服务商无缝切换AI模型;​
  • 高效速率限制与缓存,优化API调用;​
  • 实现大规模AI驱动应用程序的可扩展性;​
  • 简化多AI后端的请求管理。​

Portkey特别适合强调灵活性与成本效益的AI驱动类应用程序,成为其与不同AI模型交互的优选项。

Portkey解决了什么问题?​

对于从事AI应用程序的开发者来说,多模型的集成和管理一直是个挑战。传统方法往往涉及以下几个痛点:

  • 特定大模型服务商锁定;​
  • 难以对不同模型的性能进行比较;​
  • 缺乏内置的负载均衡和故障转移机制;​
  • 不同服务商间的API不一致。​

目前的大模型集成环境往往支离破碎且效率低下,导致开发者面临多重挑战:

  • 管理多家服务商的身份验证与API密钥;​
  • 实现自定义负载均衡逻辑;​
  • 确保不同模型间的响应格式保持一致;​
  • 在保持性能的同时优化成本。​

这些限制尤其影响到开发人员、AI研究人员和构建大模型驱动应用程序的企业。对组织来说,管理多家大模型服务商往往涉及极高的集成复杂性,且缺乏内置优化功能。

深入了解Portkey AI网关​

Portkey AI网关是一套开源库,可简化Python开发者的大模型集成。它提供一个拥有统一API的强大框架,可实现与多家大模型服务商的无缝交互。

Portkey的核心功能,在于抽象出各大模型服务商间的差异。它允许开发者轻松在模型间切换,或实现负载均衡等高级功能,且无需更改现有应用程序代码。

该网关目前支持多家大模型服务商:

  • Anthropic​
  • Azure OpenAI​
  • 谷歌​
  • Groq​
  • OpenAI​

Portkey AI网关还拥有以下几项独特功能:

  • 跨服务商的统一API;​
  • 内置负载均衡;​
  • 轻松切换服务商;​
  • 一致的响应格式。​

Portkey AI网关主要用例​

  • 多服务商集成:Portkey AI网关允许开发者轻松将多家大模型服务商集成至自己的应用程序当中,使得应用程序能够:
  1. 使用OpenAI的GPT-4执行复杂推理任务;​
  2. 利用Groq的Llama3-70B-8192缩短响应时间;​
  3. 实现回退机制以确保高可用性。​
  4. 根据自定义权重在多家服务商间分配请求;​
  5. 出现错误时,自动故障转移至替代服务商;​
  6. 将请求路由至最具成本效益的服务商以优化成本。​
  7. 为不同大模型服务商提供一致的API;​
  8. 可在测试与比较模型间轻松切换;​
  9. 简化API密钥与身份验证管理。​
  • 负载均衡与优化:这套库允许开发者实现复杂的负载均衡策略,例如:​
  • 简化开发流程:Portkey AI网关通过以下方式简化了开发流程:​

如何集成Portkey AI Gateway​

下面我们通过代码示例具体介绍Portkey的功能。

单服务商基础用法:

from portkey_ai import Portkey
import os

client = Portkey(
 provider="openai",
 Authorization=os.environ["OPENAI_API_KEY"]
)

response = client.chat.completions.create(
 messages=[{"role": "user", "content": "What's the meaning of life?"}],
 model="gpt-4o-mini"
)

print(response.choices[0].message.content)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

多服务商用法:

from portkey_ai import Portkey
import os

# OpenAI client
openai_client = Portkey(
 provider="openai",
 Authorization=os.environ["OPENAI_API_KEY"]
)

response = openai_client.chat.completions.create(
 messages=[{"role": "user", "content": "What's the meaning of life?"}],
 model="gpt-4o-mini"
)

print("From OpenAI:")
print(response.choices[0].message.content)

# Groq client
groq_client = Portkey(
 provider="groq",
 Authorization=os.environ["GROQ_API_KEY"]
)


response = groq_client.chat.completions.create(
 messages=[{"role": "user", "content": "What's the meaning of life?"}],
 model="llama3-70b-8192"
)

print("From Groq:")
print(response.choices[0].message.content)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

实现负载均衡:

from portkey_ai import Portkey
import os

lb_config = {
 "strategy": { "mode": "loadbalance" },
 "targets": [{
 "provider": 'openai',
 "api_key": os.environ["OPENAI_API_KEY"],
 "weight": 0.1
 },{
 "provider": 'groq',
 "api_key": os.environ["GROQ_API_KEY"],
 "weight": 0.9,
 "override_params": {
 "model": 'llama3-70b-8192'
 },
 }],
}

client = Portkey(config=lb_config)

response = client.chat.completions.create(
 messages=[{"role": "user", "content": "What's the meaning of life?"}],
 model="gpt-4o-mini"
)

print(response.choices[0].message.content)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

实现条件路由:

from portkey_ai import Portkey
import os

openai_api_key = os.environ["OPENAI_API_KEY"]
groq_api_key = os.environ["GROQ_API_KEY"]

pk_config = {
 "strategy": {
 "mode": "conditional",
 "conditions": [
 {
 "query": {"metadata.user_plan": {"$eq": "pro"}},
 "then": "openai"
 },
 {
 "query": {"metadata.user_plan": {"$eq": "basic"}},
 "then": "groq"
 }
 ],
 "default": "groq"
 },
 "targets": [
 {
 "name": "openai",
 "provider": "openai",
 "api_key": openai_api_key
 },
 {
 "name": "groq",
 "provider": "groq",
 "api_key": groq_api_key,
 "override_params": {
 "model": "llama3-70b-8192"
 }
 }
 ]
}

metadata = {
 "user_plan": "pro"
}

client = Portkey(config=pk_config, metadata=metadata)

response = client.chat.completions.create(
 messages=[{"role": "user", "content": "What's the meaning of life?"}]
)
print(response.choices[0].message.content)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.

上述示例使用元数据值user_plan以确定使用哪个模型进行查询。这对通过免费增值计划提供AI功能的SaaS服务商特别适用。

使用Portkey AI网关进行大模型集成​

Portkey代表大模型集成的一项重大创新。它解决了管理多家服务商及优级性能等方面的关键挑战。通过提供一个能够与多家服务商无缝交互的开源框架,该项目填补了当前AI开发流程中的重大空白。

该项目依托社区协作实现了蓬勃发展,并欢迎来自世界各地的开发者做出贡献。凭借活跃的GitHub社区与开放讨论空间,Portkey鼓励开发者参与并扩展其功能。Portkey项目的透明开发方法与开源许可,也向个人及企业团队使用敞开了怀抱。

Portkey还提供其AI网关的商业实现,可为企业提供管理大模型集成的强大解决方案。其主要功能包括针对250多家服务商的统一API、负载均衡、条件路由、自动重试与回退、语义缓存及多模态支持等。

总结​

Portkey AI网关将易用性、完备的功能与积极的社区支持融为一体,对于希望将多家大模型服务商集成至应用程序中的开发者来说极具价值。它能够以托管服务的形式交付,起价为每月49美元,并提供免费层用于原型设计和测试。通过促进与各服务商的无缝交互,Portkey为更灵活、更强大的AI驱动应用程序奠定了重要基础。

原文标题:​Portkey: An open-source AI gateway for easy LLM orchestration​,作者:Janakiram MSV


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐