如何通过网关降低大模型的调用费用,并提升合规性

作者:赵伟基(兆维)

以 ChatGPT 为代表的 AIGC 技术为企业生产带来了巨大的变化,并在企业应用开发领域占据一席之地。AI 大模型凭借其强大的学习能力,可以帮助人们完成各种复杂的任务,例如帮助开发人员编写与调试代码、研究人员快速了解科研领域、营销人员撰写产品描述、设计人员设计新作品等等。许多企业探索如何降低 AI 大模型的使用成本,通过网关进行 AI 大模型的 API 管理成为了很常规的需求。

Higress 如何降低 AI 大模型使用成本?

以 OpenAI 为例,OpenAI 的 API 调用并不是基于请求量或者订阅时间来计费,而是基于每个请求的使用量来计费。对于 AI 大模型来说,模型输入与输出的 token 数可以比较好的衡量当前模型进行推理任务的复杂度。因此基于 token 作为请求使用量进行计费是 OpenAPI 的标准计费策略。对于不同的模型 token 的计费标准也不同,越复杂的模型会生成越好的结果,但也会带来更高的计费。OpenAI 通过为用户分发 API 密钥来完成用户的鉴权与收费等功能。

在这里插入图片描述

对于组织来说,为每位成员申请 AI 大模型的访问权限(API Key)显然是不现实的。分散的 API 密钥将不利于组织进行 API 的用量计算、管理与付费,从而增加 AI 大模型的使用成本。其次,对于组织来说,AI 模型的选型、使用频率和成员使用权限、以及向 AI 大模型暴露哪些数据都是在管理中需要着重关注的功能。

Higress 基于丰富的插件能力,提供认证鉴权、请求过滤、流量控制、用量监测和安全防护等功能,帮助组织与 AI 大模型的 API 交互变得更加安全、可靠和可观察:基于 Higress 提供的认证鉴权能力,组织可以实现通过统一的 API 密钥进行 AI 模型的调用量管理和付费等,并为团队成员授予不同的AI模型访问权限;基于 Higress 提供的流量控制能力,组织能为不同的模型与用户设置差异化的访问速率限制,有效降低 AI 模型的使用成本;基于 Higress 提供的请求拦截能力,组织能够有效过滤含敏感信息的访问请求,防护部分内部站点资源不对外暴露,从而有效保障内部数据安全;基于商业版 Higress [ 1] 提供的开箱即用的指标查询和日志记录的能力,组织能够完成对不同用户的 AI 模型调用的用量观测与分析,从而制定更加合理的AI模型使用策略。

Higress 对接 OpenAI 大语言模型实战

下面我们将以 Higress 对接 OpenAI 大语言模型为例,介绍 Higress 如何无缝对接 AI 大模型。整体方案如图所示,我们基于 WASM 拓展了 Higress 插件,实现了对 OpenAI 语言模型的请求代理转发。基于 Higress 提供的 Key Auth 认证插件的能力,我们实现统一 API-Key 下的多租户认证。基于 Higress 提供的 Request Block 请求过滤的能力,我们将实现含敏感信息的请求拦截,保障用户数据安全。

在这里插入图片描述

前提条件

  1. 安装 Higress,参考 Higress 安装部署文档 [ 2]
  2. 准备 Go 语言开发 WASM 插件的开发环境,参考使用 GO 语言开发 WASH 插件 [ 3]

基于 WASM 的 AI Proxy Plugin

下文将给出基于 Higress 与 WASM 实现的 AI 大模型 API 代理插件方案。Higress 支持基于 WASM 实现对外扩展的能力。WASM 插件提供的多语言生态和热插拔机制为插件的实现和部署提供了便利。Higress 同时支持在插件中请求外部服务,为 AI 代理插件的实现提供了高效的解决路径。

实现示例

我们给出 OpenAI-API 的代理插件的实现示例,详情请参考 AI proxy plugin [ 4] 。下列代码实现了插件相关配置完成之后,基于 HTTP 自动将请求代理转发到 OPENAI-API,并接收来自 OPENAI-API 的响应,从而完成 AI 模型的调用。具体实现步骤如下:

  1. 通过 RouteCluster 方法指定具体的 OPENAI-API 的 host,确认用户请求转发的具体路径,并新建用于请求代理转发的 HTTP Client。
func parseConfig(json gjson.Result, config *MyConfig, log wrapper.Log) error {chatgptUri := json.Get("chatgptUri").String()var chatgptHost stringif chatgptUri == "" {config.ChatgptPath = "/v1/completions"chatgptHost = "api.openai.com"} //请求默认转发到OPEN AI API...config.client = wrapper.NewClusterClient(wrapper.RouteCluster{Host: chatgptHost,}) //通过RouteCluster方法确认请求转发的具体host...
}
  1. 对用户请求进行 OPENAI-API 的格式封装,通过 HTTP Client 进行请求转发与响应接受,并将响应转发给用户。
//OPENAI API接收的请求体模版,详见:https://platform.openai.com/docs/api-reference/chat
const bodyTemplate string = `
{
"model":"%s",
"prompt":"%s",
"temperature":0.9,
"max_tokens": 150,
"top_p": 1,
"frequency_penalty": 0.0,
"presence_penalty": 0.6,
"stop": ["%s", "%s"]
}
`
func onHttpRequestHeaders(ctx wrapper.HttpContext, config MyConfig, log wrapper.Log) types.Action {...//根据用户的请求内容进行OPENAI API请求体封装 body := fmt.Sprintf(bodyTemplate, config.Model, prompt[0], config.HumainId, config.AIId)//通过HTTP Client进行转发err = config.client.Post(config.ChatgptPath, [][2]string{{"Content-Type", "application/json"},{"Authorization", "Bearer " + config.ApiKey},}, []byte(body),func(statusCode int, responseHeaders http.Header, responseBody []byte) {var headers [][2]stringfor key, value := range responseHeaders {headers = append(headers, [2]string{key, value[0]})}//接收来自于OPENAI API的响应并转发给用户proxywasm.SendHttpResponse(uint32(statusCode), headers, responseBody, -1)}, 10000)...
}

在 Higress 中启用自定义的 AI-Proxy-Wasm 插件流程如下:

在这里插入图片描述

本示例提供已经编译好的 AI-proxy-plugin-wasm 文件并完成对应 docker 镜像的构建和推送,推荐配置如下所示:

在这里插入图片描述

插件配置说明

插件配置简单,支持全局/域名级/路由级的代理转发。推荐进行路由级配置:选中对应的路由配置-选中对应路由-策略-启用插件。配置字段包括:

在这里插入图片描述

示例配置如下:

AI-Proxy-Plugin-Config

apiKey: "xxxxxxxxxxxxxxxxxx"
model: "curie"
promptParam: "text"

根据该配置,网关代理到 OpenAI API 下的 curie 模型,用户通过 text 关键字在 url 中输入文本。

curl "http://{GatewayIP}/?text=Say,hello"

得到 OpenAI API 的响应:

在这里插入图片描述

基于 Key Auth 的多租户认证

不同于为每位成员颁发 AI-API 密钥的形式,企业可以基于 Higress 网关提供的认证鉴权能力,依靠内部授权(如 Key Auth 等)来管理成员对 AI 模型对访问权限,从而限制成员可以使用的服务和模型,并依靠统一的 AI-API 密钥进行请求代理转发实现对 API 用量的统一管理。接下来以 Key Auth 为例介绍基于 Higress 的多租户认证能力。

Key Auth 插件实现了基于网关内 API Key 进行认证和鉴权的功能,支持从 HTTP 请求的 URL 参数或者请求头解析 API Key,同时验证该 API 是否有权限访问。通过在 Higress 控制台-插件市场-Key Auth 进行全局配置和路由级配置,即可实现 Higress 网关的多租户认证。

在这里插入图片描述

Key-Auth 全局配置样例

#以下配置
consumers:
- credential: "xxxxxx"name: "consumer1"
- credential: "yyyyyy"name: "consumer2"
global_auth: false
in_header: true
keys:
- "apikey"

在这里插入图片描述

Key-Auth 的路由级配置样例

allow: [consumer1]

以上配置定义了指向 AI 模型服务的消费者组 consumers,并且只有 consumer1 具备访问当前路由下 AI 模型服务的权限。

curl "http://{GatewayIP}/?text=Say,hello"
#请求未提供 API Key,返回401curl "http://{GatewayIP}/?text=Say,hello" -H "apikey:zzzzzz"
#请求提供的 API Key 未在消费者组内,无权访问,返回401curl  "http://{GatewayIP}/?text=Say,hello" -H "apikey:yyyyyy"
#根据请求提供的 API Key匹配到的调用者无AI模型服务的访问权限,返回403curl "http://{GatewayIP}/?text=Say,hello" -H "apikey:xxxxxx"
#请求合法且有AI模型服务访问权限,请求将被代理到AI模型,正常得到OpenAI API的响应

Higress 除了提供网关级多租户认证外,提供限流等能力。Key Rate Limit 插件可以根据用户在消费组中的成员资格对用户应用速率进行限制,从而限制关键应用程序对高成本 AI 大模型服务的消耗。基于多租户认证插件与限流等功能插件能力,Higress 可以完全控制 AI 大模型 API 的访问权限、访问数量与调用成本。

基于 Request Block 保障数据安全

对于 AI 大模型尤其是语言模型来说,要得到良好的返回往往需要用户提供足够的提示(prompt)作为模型输入。这也意味着组织和个人可能会在提供提示的过程中面临数据泄漏的风险。因此如何在使用 AI 模型的过程中保障数据安全也是 API 调用方面临重要问题。保护数据安全涉及到对 AI 模型的 API 调用渠道进行严格的控制。一种方式是使用特定的经批准的模型与其发布的 API。另一种方式是对含敏感信息的用户请求进行拦截。这可以通过在网关级别设置特定的请求拦截来实现。Higress 基于 Request Block 插件提供请求拦截能力,既能防止未经授权的模型访问用户信息,同时防止含敏感信息的用户请求暴露到外网。

Request Block 插件实现了基于 URL、请求头等特征屏蔽 HTTP 请求,可以用于防护部分站点资源不对外部暴露。通过在 Higress 控制台-插件市场-Request Block 进行屏蔽字段配置,即可防止含敏感字段的请求对外发送。

在这里插入图片描述

Request Block 路由级配置样例

blocked_code: 404
block_urls:
- password
- pw
case_sensitive: false

以上配置定义了当前路由下基于 URL 的屏蔽字段,其中含敏感信息(如 password、pw)的请求将被屏蔽。

curl "http://{GatewayIP}/?text=Mypassword=xxxxxx" -H "apikey:xxxxxx"
curl "http://{GatewayIP}/?text=pw=xxxxxx" -H "apikey:xxxxxx"
#上述请求将被禁止访问,返回404

基于商业版 Higress 的用量观测与分析

对于组织来说,进行对各用户进行 AI 模型调用的用量观测和分析有助于了解其使用情况与产生的成本。对于个人用户了解自己的调用量和开销也是必要的。因此,在网关层进行调用的观测和分析对于 AI 大模型的 API 管理是必要的能力。商业版 Higress 与各种指标与日志系统进行了深度集成,提供了开箱即用的用量观测分析报告构建机制,可以实时查看各种 API 的使用情况,并根据各类参数进行过滤,从而更好的了解 API 使用情况。

以观察各用户对 OPENAI-Curie 模型的调用量为例,用户可通过 MSE 管理控制台-云原生网关-网关实例-参数配置-日志格式 调整中设置区分用户的可观测性参数请求头:x-mse-consumer,将其列入观测列表。之后进入观测分析-日志中心中设置使用统计图表功能即可完成对 API 的用量观测和分析。如下图所示,用户 comsumer1 与用户 consumer2 的对 OPENAI-Curie 模型的调用量以饼状图形式呈现。

在这里插入图片描述

彩蛋:Higress 控制台样例的聊天机器人

Higress 团队在 Higress 控制台样例 [ 5] 上部署了基于 GPT 模型的彩蛋聊天机器人,如果在使用 Higress 过程中有问题欢迎向它提问!

在这里插入图片描述

如果您觉得 Higress 对您有帮助,欢迎前往 github: Higress 为我们 star 一下!

相关链接:

[1] 商业版 Higress

https://www.alibabacloud.com/zh/product/microservices-engine

[2] Higress 安装部署文档

https://higress.io/zh-cn/docs/ops/deploy-by-helm/#%E6%94%AF%E6%8C%81-istio-crd%E5%8F%AF%E9%80%89

[3] 使用 GO 语言开发 WASH 插件

https://higress.io/zh-cn/docs/user/wasm-go/

[4] AI proxy plugin

https://github.com/alibaba/higress/tree/main/plugins/wasm-go/extensions/chatgpt-proxy

[5] Higress 控制台样例

http://demo.higress.io/login?redirect=/route

[6] github: Higress

https://github.com/alibaba/higress

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/68072.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT:你才是编译器!你全家都是编译器!

我是不是再也不需要编译器了?! 这个故事的灵感来自一个类似的文章:在 ChatGPT 中构建虚拟机。我印象深刻并决定尝试类似的东西,但这次不是 Linux 命令行工具,而是让 ChatGPT 成为我们的 Python 编译器。 这是初始化 Ch…

chatgpt赋能python:Python中文输入指南

Python 中文输入指南 Python 作为一门广泛应用于编程领域的高级语言,实现了许多优秀的工具和库来支持中文输入。本文将介绍 Python 如何输入中文以及一些常见的工具和方法。 为什么 Python 输入中文很重要? 随着人们对中文的不断重视,相应…

GitHub Copilot:让开发编程变得像说话一样简单

引用: 人类天生就梦想、创造、创新。但今天,我们花太多时间被繁重的工作所消耗,花在消耗我们时间、创造力和精力的任务上。为了重新连接我们工作的灵魂,我们不仅需要一种更好的方式来做同样的事情,更需要一种全新的工…

php茶餐厅销售管理系统的设计与实现

本系统将运用phpstudy开发工具构件开发环境;基于PHP,用HTMLCSS来设计界面,用oracle作为数据库与PHP搭建来存储数据信息;最终以HTMLCSSJSPPHPoracle来实现本系统的所有开发。所以,在设计上是尽量涉及到和茶餐厅相关的销…

餐饮外卖销售系统数据库设计

简介 ​ 对于人工数据管理系统,存在许多的弊端,手工录入、耗费人力、工作繁琐,准确性也无法保证,并且相当耗费时间,对于数据量巨大的餐饮外卖销售系统来说,人工数据管理系统已经无法满足其需求。本次设计的…

餐饮营销策划案例合集(共18份)

合集名称:餐饮营销策划案例合集 数量:共18份 具体内容: 【餐饮策划案例】2021下厨房年营销通案.pdf【餐饮策划案例】2021美团点评APP品牌营销通案.pdf【餐饮策划案例】2021肥汁米蘭港式米线品牌手册.pdf【餐饮策划案例】2021金领大厨超级小…

数据分析:餐厅订单数据分析

数据分析:餐厅订单数据分析 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏&#x1f4…

浏览器控制台命令指南-重制版

提示:本文重制版,重制版, 文章目录 前言一、控制台.log命令二、第一步.clear命令1.clear2.更多~设置输出样式assert()count()dir() and dirxml()group(),groupCollapsed()和groupEnd…

chatgpt赋能python:Python操作网页的SEO

Python操作网页的SEO 在当今的数字时代,许多企业专注于提高其网站的排名。在这种竞争激烈的环境中,搜索引擎优化(SEO)是必不可少的。虽然有许多方法可以提高网站的排名,但其中一个最重要的是使用Python来操作网页。 …

商标名字一样,图标不一样属于商标侵权吗?

如果产品的商标名字不一样,但图标相似算商标侵权吗? 这个问题涉及到商标侵权行为的认定,在商标法的规定中,为了保护注册商标的合法权益,对商标权侵权行为的认定做了较为具体的解释,我们可以以此作为“商标名字一样图…

如何设计商标图案?

如何设计商标图案是企业经营者需要考虑的一个问题,商标的形象是企业的形象,而企业的形象直接影响着消费者对产品的看法。因此,设计好商标图案是非常重要的。下面小编就来给大家介绍一下:如何设计商标图案。 如何设计商标图案? 一…

新表情将至?腾讯申请新狗头图形商标

IT之家 10 月 9 日消息,腾讯科技 (深圳) 有限公司近日申请注册多个狗头形象图形商标以及“微信创意表情”商标,国际分类含广告销售、教育娱乐、通讯服务等,当前商标状态均为注册申请中。 近年来,微信、微博…

天猫精灵使用体验之一——天猫精灵初体验

在前面,小智已经介绍过,天猫精灵是小智在2017年双11下单的,等了一个多月,12月下旬才收到货。所以当天猫精灵从盒子里面蹦出来到体验官面前时,体验官就迫不可待地开始了一列表的体验和测评——什么开箱照、什么全家福的通通都没有,有的都是经过一个多月体验和测评后总结出…

揭秘!一文读懂数据策略在模型训练中的重要意义

编者按: 我们知道,当有了一个基础模型之后,可从两个维度来提高它的性能,一是以模型为中心的方法,即想尽各种办法提高算法设计的复杂度、技术含量等;二是以数据为中心的方法,通过数据增强、合成数…

AIGX 智生万物 | 浦软创业营(第九期)人工智能专场,正式开启招募!

"GPT 是我一生中见到的两项最具革命性技术之一。" ——Bill Gates"我认为ChatGPT引发的AI浪潮,在规模上与工业革命、电力、甚至是轮子的发明相当。" ——Geoffrey Hinton"关于人工智能未来十年的前景,我们有一系列很重要的经验…

一键生成伪原创文章有用吗(正确使用伪原创工具)

一定有不少的SEOer正在使用伪原创文件生成器这个工具吧,我可以正确的断定出来,一个懂SEO优化的SEOer绝对能够正确理解文章的作用,而那些似懂非懂的SEOer每天都在为原创文章的事情烦恼。往往一直以为每天坚持更新文章就可以获得排名的SEOer却没…

源码被倒卖,文章被抄袭,有点意思

说来这事也搞笑,从来没想过,源码会被倒卖,文章会被抄袭,这事,说来还挺有戏剧性。 关于电商收付通管理系统,这个是已经取得了中国版权保护中心计算机软件著作权登记证书,代码都已经提交备案入库…

iftop---实时流量监控工具

一、iftop是什么? iftop是类似于top的实时流量监控工具。 官方网站:http://www.ex-parrot.com/~pdw/iftop/ 二、iftop有什么用? iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等&…

「FastAdmin」fastadmin二次开发中如何自定义查询数据

fastadmin二次开发中如何自定义查询数据 问题背景:最近做一个网站的过程中遇到了一个需求:对于不同用户组的用户,显示的数据要根据权限来筛选。问题看起来不是很难,文档和社区中已经给了足够的提示,我想对于自己遇到的…

运营商大数据获客,帮你找到可靠的精准客户

运营商大数据具有全面性、多维性、客观性等特点,数据相对集中,信息价值高。要是在互联网上亿的数据库里查询客源无异于大海捞针。在运营商海量基础上利用大数据的技术,分析《建模》、机器学习等操作,构建用户独立的标签体系&#…