如何使用 Higress 快速构建 AI 应用?

news2024/11/25 6:39:58

随着 AI 时代到来,基于大模型的应用对网关提出了新的要求,例如在不同 LLM 提供商之间进行负载均衡、构建 AI 应用的可观测能力、基于 token 的限流保护与配额管理、AI 应用内容安全等等。Higress 基于企业内外的丰富场景沉淀了众多面向AI的功能,推出了 AI 原生的 API 网关形态并且全部开源。

ChatGPT-Next-Web [ 1] 是一个开源的前端项目,用于提供大模型聊天窗口,支持接入多种大模型,本文基于Higress、通义千问以及 ChatGPT-Next-Web,演示 Higress 如何兼容 openai 协议,并逐步搭建一个体系完整的 LLM 应用,应用最终架构如图所示:

AI 代理

官方文档:https://help.aliyun.com/zh/mse/user-guide/ai-agent?spm=a2c4g.11186623.0.0.2927178eciPER4

应用架构

首先,我们先通过网关快速部署一个可以进行对话的聊天应用,其架构如下图所示:

LLM 服务使用通义千问,服务类型为 DNS。路由及服务创建完成后如下图所示:

插件配置

设置路由级插件规则,选择在 llm 路由下生效,配置如下:

provider:
  type: qwen
  apiTokens:
    - sk-xxxxxxxxxxxxxxxxxxxxxx
  timeout: 1200000
  modelMapping:
    'gpt-3.5-turbo': qwen-turbo
    'gpt-4': qwen-max
    '*': qwen-max

插件效果

AI 可观测

官方文档:https://help.aliyun.com/zh/mse/user-guide/ai-observable?spm=a2c4g.11186623.0.0.42b4d95f14d39z

应用架构

现在,我们已经有了基础的对话功能,作为一款网关产品,我们希望在网关这个统一的入口处对各个服务、路由的请求情况进行观测。考虑到 LLM 请求主要以 token 为观测目标,网关提供了对 token 的观测机制,包含路由级、服务级、模型级的 token 用量观测。

现在,我们改变上文的应用架构,插入可观测插件,改造后如下图所示:

插件配置

依然是选择在 llm 这条路由上生效,插件配置如下:

enable: true

插件效果

AI 内容安全

官方文档:https://help.aliyun.com/zh/mse/user-guide/ai-content-security?spm=a2c4g.11186623.0.0.4408488dYGAm2X

应用架构

大模型通常是通过学习互联网上广泛可用的数据来训练的,它们有可能在过程中学习到并复现有害内容或不良言论,因此,当大模型未经过适当的过滤和监控就生成回应时,它们可能产生包含有害语言、误导信息、歧视性言论甚至是违反法律法规的内容。正是因为这种潜在的风险,大模型中的内容安全就显得异常重要。

基于 AI 内容安全插件,通过简单的配置即可对接阿里云内容安全 [ 2] ,为大模型问答的合规性保驾护航。

配置 AI 内容安全插件后,应用架构如下图所示:

插件配置

首先需要在网关配置内容安全的服务:

配置服务后,开启内容安全插件,选择对 llm 路由生效:

serviceSource: dns
serviceName: green-cip
servicePort: 443
domain: green-cip.cn-hangzhou.aliyuncs.com
ak: xxxxxxxxxxxxxxxxx
sk: xxxxxxxxxxxxxxxxx

插件效果

登录阿里云内容安全控制台,可以查看每条请求的审计记录:

AI Token 限流

官方文档:https://help.aliyun.com/zh/mse/user-guide/ai-token-current-limiting?spm=a2c4g.11186623.0.i4

应用架构

ai-token-ratelimit 插件实现了基于特定键值实现 token 限流,键值来源可以是 URL 参数、HTTP 请求头、客户端 IP 地址、consumer 名称、cookie 中 key 名称。其借助 redis 实现全局的 token 限流。

创建一个 redis 服务并且在网关进行配置:

之后添加 AI Token 限流插件,应用架构为:

插件配置

rule_name: default_rule
rule_items:
  - limit_by_per_ip: from-remote-addr
    limit_keys:
      - key: 0.0.0.0/0
        token_per_minute: 100
redis:
  service_name: redis.static
  service_port: 6379
  username: xxxxxx
  password: xxxxxx
rejected_code: 429
rejected_msg: 您的请求频率过高,请稍后再试。

以上插件配置效果为每个 ip 地址每分钟内只能使用 100 个 token,当超过 token 限制时,返回 429,响应 body 为“您的请求频率过高,请稍后再试。”

插件效果

AI 缓存

官方文档:https://help.aliyun.com/zh/mse/user-guide/ai-cache?spm=a2c4g.11186623.0.0.3cdf306bbJSWdn

应用架构

AI 缓存插件能够缓存每个请求的响应,当有相同请求到来时,可以直接返回存储在 redis 中的大模型的生成内容,添加 AI 缓存插件后,应用架构为:

插件配置

redis:
  serviceName: redis.static
  servicePort: 6379
  timeout: 2000
  username: xxxxxx
  password: xxxxxx

插件效果

AI RAG

官方文档:https://help.aliyun.com/zh/mse/user-guide/ai-rag?spm=a2c4g.11186623.0.0.24c77267ImcfGS

应用架构

大模型具有一个显著的局限性,那就是它们的知识截止到模型被训练的数据。一旦训练完成,模型就无法获取或学习新的信息。此外,大型语言模型的训练数据虽然浩如烟海,但仍然有可能缺少某些领域的信息,或者对某些主题的覆盖不够深入,针对这些细领域的查询可能会产生不够精确或缺乏深度的结果。检索增强生成(RAG)技术能够利用检索系统从大规模的数据库中找到相关信息,然后将这些信息提供给文本生成模型以帮助生成更精确、更丰富、更符合实际情况的文本。

Higress 通过对接阿里云向量检索服务能够快速实现 RAG 功能:

添加 RAG 插件后,应用架构如下图所示:

插件配置

插件需要配置 dashscope 和 dashvector 两个云服务的相关信息:

dashscope:
    apiKey: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    serviceName: qwen
    servicePort: 443
    domain: dashscope.aliyuncs.com
dashvector:
    apiKey: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    serviceName: dashvector
    servicePort: 443
    domain: vrs-cn-xxxxxxxxxxxxxx.dashvector.cn-hangzhou.aliyuncs.com
    collection: xxxxxxxxxxxxxx

插件效果

其他

除了以上插件,我们还提供了对 prompt 进行修改的插件以及对请求/响应进行智能转换的插件。

Prompt 工程相关插件

Prompt 插件包括 prompt 模板以及 prompt 装饰器:

  • prompt 模板 [ 3]
  • prompt 装饰器 [ 4]

Prompt 模板允许用户在网关定义一系列 LLM 请求的模板,使用者通过指定模板中的参数对 LLM 进行访问,配置示例如下:

templates:
- name: "developer-chat"
  template:
    model: gpt-3.5-turbo
    messages:
    - role: system
      content: "你是一个 {{program}} 专家, 你平时使用的编程语言为 {{language}}"
    - role: user
      content: "帮我写一个 {{program}} 程序, 你的返回结果里面应该只包含python代码"

请求 body 示例如下:

{
  "template": "developer-chat",
  "properties": {
    "program": "冒泡排序",
    "language": "python"
  }
}

Prompt 装饰器允许用户在网关定义对 prompt 的修改操作,包括在原始请求之前和之后插入 message,配置示例如下,请求 body 与 openai 的请求一致。

prepend:
- role: system
  content: "请使用英语回答问题."
append:
- role: user
  content: "每次回答完问题,尝试进行反问"

AI 请求/响应智能转换

官方文档:https://help.aliyun.com/zh/mse/user-guide/ai-request-response-intelligent-transformation?spm=a2c4g.11186623.0.0.4f6f63beBCZCAU

请求响应转换插件支持对请求/响应进行智能转换,其工作流程如下图所示(示例中后端服务为 httpbin):

此插件可用于修改经过网关的请求/响应内容,例如将 xml 格式的响应修改为 json 格式。

插件配置

response: 
    enable: true
    prompt: "帮我修改以下HTTP应答信息,要求:1. content-type修改为application/json;2. body由xml转化为json;3. 移除content-length。"
provider: 
    serviceName: qwen
    domain: dashscope.aliyuncs.com
    apiKey: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx

插件效果

访问原始的 httpbin 的 /xml 接口,结果为:

<?xml version='1.0' encoding='us-ascii'?>

<!--  A SAMPLE set of slides  -->

<slideshow 
  title="Sample Slide Show"
  date="Date of publication"
  author="Yours Truly"
  >

  <!-- TITLE SLIDE -->
  <slide type="all">
    <title>Wake up to WonderWidgets!</title>

  </slide>


  <!-- OVERVIEW -->
  <slide type="all">
    <title>Overview</title>

    <item>Why <em>WonderWidgets</em> are great</item>

    <item/>
    <item>Who <em>buys</em> WonderWidgets</item>

  </slide>


</slideshow>

使用以上配置,通过网关访问 httpbin 的 /xml 接口,结果为:

{
  "slideshow": {
    "title": "Sample Slide Show",
    "date": "Date of publication",
    "author": "Yours Truly",
    "slides": [
      {
        "type": "all",
        "title": "Wake up to WonderWidgets!"
      },
      {
        "type": "all",
        "title": "Overview",
        "items": [
          "Why <em>WonderWidgets</em> are great",
          "",
          "Who <em>buys</em> WonderWidgets"
        ]
      }
    ]
  }
}

相关链接:

[1] ChatGPT-Next-Web

https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web

[2] 阿里云内容安全

https://help.aliyun.com/document_detail/28417.html?spm=a2c4g.28415.0.0.1dab1f55pipQr9

[3] prompt 模板

https://help.aliyun.com/zh/mse/user-guide/ai-cue-template?spm=a2c4g.11186623.0.0.768b184f1WdsVb

[4] prompt 装饰器

https://help.aliyun.com/zh/mse/user-guide/ai-cue-decorator?spm=a2c4g.11186623.0.0.124548a79q3fyU

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pip3 : 无法将“pip3”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

1.找到python安装目录底下的Scripts&#xff0c;复制该路径&#xff1a;你安装python的目录\Scripts 我本地的&#xff1a;D:\devSoftware\python-all\Python39\Scripts 2.将该路径配置到环境变量Path里面 我的电脑 - 右键属性 - 系统 - 环境变量 - 找到path点击编辑 - 新建&a…

家用超声波清洗机哪个品牌好用?实测解析四大高口碑超声波清洗机机型

提到超声波清洗机&#xff0c;很多人可能首先想到的是眼镜店或首饰店里的商用清洗设备。它们虽然功能强大&#xff0c;但价格较高且体积较大&#xff0c;并不适合家用。不过&#xff0c;现在有了一个更方便的选择&#xff1a;小型超声波清洗机。它们体积小巧&#xff0c;价格也…

9.cmake(string)

目录 1. 基本用法 2. string对于json的操作 3.代码段 1. 基本用法 以下通过截取字符串"begin test cmake string end "中的子串"test cmake string"来串联string中的部分用法&#xff0c;其中包括了FIND&#xff0c;LENGTH&#xff0c;SUBSTRING&#x…

linux搭建ceph集群

linux三节点搭建ceph集群 主机IP主机名称172.26.50.75node1172.26.50.112node2172.26.50.228node3 ceph-mon&#xff0c;ceph-mgr&#xff0c;ceph-mds都搭建在node1上&#xff0c;node2和node3上搭建ceph-osd&#xff0c;每个机器1个osd Ceph是一个分布式的存储系统&#x…

选择排序(直接选择排序和堆排序)

一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完。 2.动图展示 3.思路讲解 ①在元素集合array[i]—array[n-1]中选择关键码最大&…

个人博客系统-自动化测试

1、项目背景 1.1技术背景 1&#xff09;个人博客系统主要是通过前端&#xff08;HTMLcssjs&#xff09;后端&#xff08;SpringBoot&#xff09;实现的一个博客的基本功能。前端通过jQuery的方式向后端请求数据。后端通过MyBatis从数据库中查询数据响应给前端。 2&#xff0…

天通报警呼叫柱助力宜宾——破汛期河心洲岛通信困境,守护人民群众生命安全

随着主汛期的到来&#xff0c;我国多地遭遇频繁降雨&#xff0c;强降雨或连绵不断的降雨&#xff0c;极易引发山洪、滑坡、泥石流等次生灾害。8月18日23时至20日10时&#xff0c;辽宁省西部地区出现暴雨到大暴雨&#xff0c;葫芦岛市部分乡镇出现特大暴雨。受到强降雨影响&…

Qt-QWidget的windowIcon属性(14)

目录 描述 相关API 使用 并不需要在堆上创建 不要带中文路径 运行观察 不要使用绝对路径 描述 这个其实就是你打开窗口的左上角那个图标&#xff0c;这个就是用来设置那个的 相关API 使用 创建一个新的项目&#xff0c;如下&#xff0c;添加一个设置图片的代码 并不需…

uboot中 fastboot udp 协议分析

注&#xff1a; 1. 本文所分析的fastboot源码不是android下的源码&#xff0c;而是恩智浦芯片厂商在IMX6UL芯片的uboot源码中自己实现的源码&#xff0c;二者不同&#xff0c;请读者注意区分。一些图片是网上找到的&#xff0c;出处不好注明&#xff0c;请见谅。 2. 分析fastbo…

VM——轮廓/快速匹配中的多模版匹配

1、轮廓或者快速匹配中支持建立多个模型&#xff0c;按照从上而下的顺序进行匹配&#xff0c;匹配上了即停止后续模版的匹配。 2、如果要多个模版都参与匹配&#xff0c;则需要打开“全部搜索模式”。 3、延拓阈值 “延拓阈值”&#xff0c;看参数名字不知所云&#xff0c;文档…

CR-NeRF 代码eval.py解析

这段代码是一个用于CR-NeRF&#xff08;Neural Radiance Fields&#xff09;模型的推理脚本。它主要用于生成和保存渲染的图像&#xff0c;并计算图像质量的评价指标&#xff08;如PSNR和SSIM&#xff09;。以下是对这段代码的详细解析&#xff1a; &#xff08;1&#xff09;…

【亚马逊云科技】有手就能做到的Amazon Lightsail快速建站

文章目录 前言一、为什么选择Amazon Lightsail二、创建账号与登录注册亚马逊账号登录控制台 三、创建Amazon Lightsail进入控制台创建实例实例配置查看实例查看网站定制页面 总结 前言 不论是个人名片还是官方网站都离不开网站建设工作。计算机技术经历漫长的发展&#xff0c;…

2024年如何将低质量视频变成高质量视频

创建低质量的视频对您没有好处&#xff0c;尤其是当您打算将这些视频上传到社交媒体帐户时。观众不喜欢观看模糊和低质量的视频&#xff0c;而这个东西没有意义&#xff0c;不会为你的内容增加价值。 那么&#xff0c;您应该如何确保您的社交媒体观众喜欢您的视频内容呢&#x…

企业内部知识库意义何在?怎么搭建?

引言 在知识经济时代&#xff0c;企业竞争力的核心日益转向知识的管理与应用能力。随着企业规模的扩大和业务复杂性的增加&#xff0c;如何高效地收集、整理、存储并分享内部知识&#xff0c;成为了企业持续发展和创新的关键。企业内部知识库应运而生&#xff0c;它不仅帮助企…

自定义注解+拦截器实现,对部分敏感字段的加解密

上一篇,我用的自定义注解AOP的方式,实现敏感字段的加解密,这一篇换个方案,这个方案相比一个方案,节省了一部分的性能开销 第一步:新建自定义注解 /*** 敏感信息类注解*/ Inherited Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface EnableSe…

tomcat session共享

1. 日志监控工具 安装 tar xf goaccess-1.4.tar.gz cd goaccess-1.4/ yum install GeoIP-devel-1.5.0-13.el7.x86_64.rpm yum install -y ncurses-devel.x86_64 ./configure --enable-utf8 --enable-geoiplegacy make make install2. 使用 goaccess /usr/local/nginx/logs/a…

java多线程(六)关键字Volatile可见性、有序性以及单个变量的原子性

volatile关键字 作用 volatile 是 Java 虚拟机提供的轻量级的同步机制&#xff0c;主要用来确保变量被线程安全地读取和写入。 当一个变量定义为 volatile 后&#xff0c;它具备以下特性&#xff1a; 可见性&#xff1a;确保不同线程对这个变量操作的可见性&#xff0c;即一…

自存实践本地访问 nginx放前端打包好的项目

nginx 部署前端项目_哔哩哔哩_bilibili 将打包好的dits文件放到 配置nginx.conf文件的location 启动命令 start nginx.exe 输入localhost即可访问打包好的项目 nginx的特点 1.静态资源 2.转发 设置代理转发请求 关闭nginx .\nginx.exe -s quit

Kubernetes-Pod调度基础

一.复制控制器&#xff08;ReplicationController&#xff0c;RC&#xff09; RC用来确保Pod副本数达到预期值&#xff0c;这样可以确保一个或多个同类Pod总是可用的。可以通过扩缩来增加或减少pod。 &#xff08;1&#xff09;示例&#xff1a; vim replicationcontroller-ng…

Codeforces Round 967 (Div. 2)

文章目录 A. Make All Equal题目描述思路代码 B. Generate Permutation题目描述思路代码 C. Guess The Tree题目描述思路代码 A. Make All Equal 题目描述 一个数组&#xff0c;最多实行n-1次&#xff0c;计算最少多少次可以变为同一个数 思路 计算重复次数最多的数&#x…