首页 > 其他分享 >AI 网关基于 IP 地理位置,增强 Prompt 修饰能力

AI 网关基于 IP 地理位置,增强 Prompt 修饰能力

时间:2024-09-04 14:53:53浏览次数:6  
标签:网关 Prompt AI IP 插件 用户 content user

作者:沈鑫糠,来自昆仑数智瑞道云团队,专注于云原生领域产品研发和相关技术。

前言

什么是 Prompt Engineering

提示词工程(Prompt Engineering),也被称为上下文提示(In-Context Prompting),指的是通过结构化文本等方式来完善提示词,引导 LLM 输出我们期望的结果。通过提示词工程可以在不更新模型权重的情况下,让 LLM 完成不同类型的任务。面对同样一个问题,为 LLM 设置不同的提示词,能够得到不同的回答结果。我们可以通过对 Prompt 的优化提升 LLM 的回答精度。

例如:

AI 网关基于 IP 地理位置,增强 Prompt 修饰能力_云原生

什么是 AI Gateway

AI Gateway 的定义是 AI Native 的 API Gateway,是基于 API Gateway 的能⼒来满⾜ AI Native 的需求。例如:

  • 将传统的 QPS 限流扩展到 Token 限流。
  • 将传统的负载均衡/重试/fallback 能力延伸,支持对接多个大模型厂商 API,提高整体稳定性。
  • 扩展可观测能力,支持不同模型之间效果的对比 A/B Test,以及对话上下⽂链路 Tracing 等。

Higress  (https://github.com/alibaba/higress) 是阿⾥云开源的⼀款 AI Gateway,为开发者提供了一站式的 AI 插件集和增强后端模型调度处理能力,使得 AI 与网关的集成更加便捷和高效。官方提供了丰富的插件库,涵盖 AI、流量管理、安全防护等常用功能,满足 90% 以上的业务场景需求。此外还支持 Wasm 插件扩展,支持多语言编写 Wasm 插件,插件更新采用热插拔机制对流量无损。

本文主要基于 Higress 的 Wasm 插件机制,使用 Go 进行插件的整体开发和能力增强。具体可以参考:https://higress.io/docs/latest/plugins/custom/

Geo-IP 插件与 AI 提示词修饰插件的结合与使用

插件参数配置

配置 Geo-IP 插件

启用 Geo-IP 插件(目前仅支持 IPv4),并配置:

Bash
ipProtocal: "ipv4"

配置 AI 提示词修饰插件

启用 AI 提示词修饰插件,在配置的 content 中通过变量,注入地理位置信息:

Bash
prepend:
- content: "提问用户当前的地理位置信息是,国家:${geo-country},省份:${geo-province}, 城市:${geo-city}"
  role: "system"
append:
- content: "每次回答完问题,尝试进行反问"
  role: "user"

插件效果

示例请求⼀:

Bash
curl 'http://<这里换成网关公网IP>/api/openai/v1/chat/completions' \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
--data-raw '{
  "model":"qwen-long",
  "frequency_penalty":0,
  "max_tokens":800,
  "stream":false,
  "presence_penalty":0,
  "temperature":0.7,
  "top_p":0.95,
  "messages":[{"role":"user","content":"附近有什么旅游景点?"}]
 }'

示例响应一:

Bash
{..."content": "附近热门的旅游景点有故宫、天安门广场、恭王府等。您对哪个景点更感兴趣呢?"...}

示例请求二:

Bash
curl 'http://<这里换成网关公网IP>/api/openai/v1/chat/completions' \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
--data-raw '{
  "model":"qwen-long",
  "frequency_penalty":0,
  "max_tokens":800,
  "stream":false,
  "presence_penalty":0,
  "temperature":0.7,
  "top_p":0.95,
  "messages":[{"role":"user","content":"怎么去香港?"}]
 }'

示例响应二:

Bash
{..."content": "从您所在的位置(北京市)前往香港,您可以选择乘坐飞机、火车或者长途汽车等多种交通方式。\n\n1. **飞机**:从北京首都国际机场出发,有多家航空公司提供直飞香港的服务。\n2. **高铁**:北京西站有直达香港西九龙站的高速列车。\n3. **长途汽车**:虽然不是主流方式,但也有部分长途汽车线路连接两地。\n\n您计划什么时候出发呢?不同的出行日期可能会有不同的票务情况和价格。"...}

示例请求三:

Bash
curl 'http://<这里换成网关公网IP>/api/openai/v1/chat/completions' \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
--data-raw '{
  "model":"qwen-long",
  "frequency_penalty":0,
  "max_tokens":800,
  "stream":false,
  "presence_penalty":0,
  "temperature":0.7,
  "top_p":0.95,
  "messages":[{"role":"user","content":"特色小吃有哪些?"}]
 }'

示例响应三:

Bash
{..."content": "我可以帮您大概介绍一下北京的一些特色小吃:\n\n1. **豆汁儿配焦圈**:北京的传统小吃之一,豆汁儿口感独特,搭配焦圈食用。\n2. **炸酱面**:北京非常有名的面条吃法,面条通常拌上特制的炸酱以及各种蔬菜丝。\n3. **卤煮火烧**:以猪内脏和豆腐干为主要原料,炖煮而成,汤味醇厚,是老北京的传统食品。\n4. **炒肝**:一种类似卤煮的小吃,但是主要用猪肝和大肠,加上蒜泥等调味品。\n5. **艾窝窝**:糯米制成的甜食,外皮软糯,里面包裹着红豆沙或其他甜馅。\n6. **糖葫芦**:串起来的山楂果,表面裹上一层糖浆,酸甜可口,很受欢迎。\n\n您对哪一种小吃比较感兴趣呢?或者您想了解更多有关这些小吃的信息吗?"...}

实现原理

  1. Geo-IP 插件基于用户 IP 获取用户相关的地理位置信息,如:国家、省份、城市等。
  2. 基于 Higress 的 Property 机制实现跨插件间的数据传递,将 Geo-IP 插件获取的地理位置信息传递给 AI 提示词修饰插件。
  3. AI 提示词插件基于用户配置的提示词模板、用户输入,以及地理位置信息,生成增强后的用户请求发送给 LLM。

Geo-IP 插件实现

用户 IP 的获取:

当请求进入 onHttpRequestHeader( ) 函数时,如果用户是直接连接 Higress,就取 remote_address 作为用户 IP。如果用户通过代理服务访问 Higress,请求里包含请求头 X-forwarded-for,就解析 XFF 头取第一个 IP 地址作为原始用户 IP。

离线 IP 地址定位库内存优化:

Geo IP 插件内置离线 IP 地址定位库,数据来源:https://gitee.com/lionsoul/ip2region

由于默认提供的文件格式为:起始 IP 地址|结束 IP 地址|国家|区域|省份|城市|ISP,直接对数据进行存储存在较大的内存开销。因此首先对原始数据进行处理,将原始数据拆分为多个:IP 地址/子网掩码|国家|区域|省份|城市|ISP 的格式。然后基于加工后的数据格式,可以通过基数树(Radix Tree)的数据结构在内存中进行存储,最终在降低内存占用的同时,保证了 IP 地址的查找效率。

地理位置信息的传递:

起初希望通过 setContext 进行信息的传递。后来在和 Higress Maintainer 的沟通中了解到 Context 没有办法跨插件传递信息。需要通过 setProperty 设置到 metadata 中,其他插件通过 getProperty 获取。在此感谢 johnlanni 的热心解答和帮助。

AI 提示词修饰插件增强实现

用户配置:

prepend:
- role: system
  content: "提问用户当前的地理位置信息是,国家:${geo-country},省份:${geo-province}, 城市:${geo-city}"

使用以上配置发起请求:

curl http://localhost/test \
-H "content-type: application/json" \
-d '{
  "model":"gpt-3.5-turbo",
  "messages": [
    {
      "role": "user",
      "content":"明天天气怎么样"
    }
  ]
}'

经过插件处理后,实际请求为:

curl http://localhost/test \
-H "content-type: application/json" \
-d '{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "system",
      "content": "提问用户当前的地理位置信息是,国家:中国,省份:浙江, 城市:杭州"
    },
    {
      "role": "user",
      "content": "明天天气怎么样"
    }
  ]
}'

在设置提示词时,一般将提示词设置为 user 或 system 类型:

  • user:user 角色,代表当前用户。当用户向 LLM 提问或与其交互时,输入的内容都标记为 user。
  • system:system 角色,代表系统级的消息或通知。用于存放提问的相关背景信息或一些预置规则。比如,我们在一个“写小红书文案”的场景中与 LLM 对话。那么“写小红书文案”这个场景中就会提前预置一些规则(比如字数要求、emoji 图像等等)。这些规则就是 system。

总结

本⽂对 Prompt 的使用方式进行了简单介绍,让大家了解到 Prompt 对于 LLM 的重要性。并尝试在 Prompt 中结合用户 Geo IP 信息,实现 LLM 的个性化回复,提升问答的准确度。希望对你有帮助!

插件的实现已经提交 PR 给 Higress 开源社区,可以到这里查看完整的代码实现:

Geo-IP 插件实现:https://github.com/alibaba/higress/pull/1172

AI 提示词修饰插件增强实现:https://github.com/alibaba/higress/pull/1228

也欢迎⼤家提出宝贵建议,可以直接在上⾯ PR 中评论,或者在 Higress 社区交流群(钉钉群号:30735012403)⾥⼀起沟通。

标签:网关,Prompt,AI,IP,插件,用户,content,user
From: https://blog.51cto.com/u_13778063/11917823

相关文章

  • 视频监控管理平台LntonAIServer视频质量诊断功能:画面静止检测与遮挡检测
    随着视频监控技术的不断发展,视频质量的重要性日益凸显。LntonAIServer通过引入一系列视频质量诊断功能,致力于提高视频监控系统的可靠性和有效性。其中,画面静止检测与遮挡检测是两个非常实用的功能,它们可以帮助监控系统及时发现并解决问题,确保视频流的质量符合预期。一、画面静止检......
  • [英语单词]hairpin
    这个第一眼看了,以为是头发丝这么细的pin/大头针。但是hairpin,是用的pin的第二个意思:固定。意思是:发卡,固定头发的发卡。pinn.大头针,针,别针,栓,销子,图钉,插头,管脚,品(液量单位)vt.将…用针别住,钉住,压住,牵制,使不能动,归罪于a.针的,销子的,闩的......
  • 微信小程序 - 云开发报错 errCode: -1 | errMsg: query.update is only available in
    前言关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。在微信小程序开发中,云开发使用云函数update操作数据库时出现报错:thirdScriptErrorerrCode:-1|errMsg:query.updateisonlyavailableinserverSDK/API;at“pages/x”pagelifeCycleMe......
  • AI 网关基于 IP 地理位置,增强 Prompt 修饰能力
    作者:沈鑫糠,来自昆仑数智瑞道云团队,专注于云原生领域产品研发和相关技术。前言什么是PromptEngineering提示词工程(PromptEngineering),也被称为上下文提示(In-ContextPrompting),指的是通过结构化文本等方式来完善提示词,引导LLM输出我们期望的结果。通过提示词工程可以在不更新......
  • springboot+vue在线教育平台系统【程序+论文+开题】计算机毕业设计.mp4.baiduyun.p
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,教育行业正经历着前所未有的变革。在线教育平台作为这一变革的重要产物,凭借其跨越时空限制、资源丰富多样、学习灵活便捷等优势,逐渐成为人们获取知识、提升技能的重要途径。特别是在全球疫情的影响下,在线教育......
  • AI时代的信仰是什么
    信仰是人们内心深处的信念,是推动人类前进的驱动力。AI从几十年前的缓慢探索,到如今的飞速发展,是什么信仰在驱动这一切呢?摩尔定律聊起信仰,我就会想起信息时代的摩尔定律。摩尔定律是由英特尔联合创始人戈登·摩尔在1965年提出的一个观察性定律。摩尔定律指出,在大规模集成电路中,可......
  • Unity Hub 安装 Editor 失败,出现 “Install failed: Validation Failed” 的解决方法
    网上有很多解决方法,但是对我来说没有什么用,还是安装不成功。所以我想到了查看错误日志,通过错误日志来把问题解决掉。要查看UnityHub的错误日志,你可以按照以下步骤操作:Windows:1.打开文件资源管理器:按Win+E打开文件资源管理器。2.导航到日志文件夹:进入以下路径......
  • BAidu快速收录系统模板在哪里下载?泛码网SEOa3。com
    在当今数字化时代,网站优化成为了企业提升在线可见性和吸引潜在客户的关键策略。百度作为中国最大的搜索引擎,其排名机制对网站流量有着决定性的影响。而百度快收程序模板程序,作为一种网站优化工具,正逐渐受到网站管理员和SEO专家的关注。本文将探讨百度快收程序模板程序的作用、......
  • AI自动养站程序——码山侠
    前端样式:这是一个全自动养站程序,可以自动拓词、生成内容并自动推送给百度。它使用了搜索引擎相关采集技术来生成文章内容,以及nginx+php5.6环境来搭建。您只需要上传源码到网站目录,设置伪静态规则,并访问/config.php来生成初始数据即可开始使用。打开:i5i.net该程序会自......
  • 10个主流的AI编程工具合集
    AI编程工具在软件开发、算法设计、数据分析等领域发挥着越来越重要的作用。下面是一些主流的AI编程工具合集,以及它们的主要功能、优点和缺点介绍:JupyterNotebook功能:交互式笔记本,支持代码、文本、图表、公式等多种格式,常用于数据科学、机器学习项目。优点:直观易用,适合教学......