包阅导读总结
1. 关键词:AI 网关、AI Agent、大模型、插件、实现原理
2. 总结:本文介绍了 AI Agent 的背景、概念,探讨其网关插件的使用方法、效果和实现原理,包括解决大模型不足,以高德地图和心知天气为例零代码构建 AI Agent 应用,实现原理基于 ReAct 思想,插件实现已提交开源社区。
3. 主要内容:
– AI Agent 背景与概念
– 大模型存在不足,如垂直领域知识缺乏和理解力挑战,业界提出 AI Agent 概念,旨在让大模型像人脑一样思考。
– AI Gateway 与 Higress
– AI Gateway 是基于 API Gateway 满足 AI Native 需求,Higress 是阿里云开源的 AI Gateway,基于其 Wasm 插件扩展能力可开发 AI Agent 插件。
– 零代码构建 AI Agent 应用
– 以高德地图和心知天气为例,介绍零代码使用 AI Agent 插件构建同时支持地图和天气服务的 Agent 的方法。
– AI Agent 插件实现原理
– 基于 ReAct 思想,通过思维链引导模型拆分问题,逐步推理和行动,并引入观察环节。
– 介绍插件配置和推理过程,包括参数配置、prompt 模板、工具调用等。
– 开源与交流
– 插件实现已提交 Higress 开源社区,提供链接,欢迎交流提出建议。
思维导图:
文章地址:https://mp.weixin.qq.com/s/xbKgl6J0WDv3ckjBKVhwIQ
文章来源:mp.weixin.qq.com
作者:邢云阳
发布时间:2024/9/5 9:58
语言:中文
总字数:4888字
预计阅读时间:20分钟
评分:90分
标签:AI Agent,AI Gateway,大模型应用,零代码开发,ReAct 原理
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com
-
扩展可观测能力,支持不同模型之间效果对比的 A/B Test,以及对话上下文链路 Tracing 等。

dashscope: #通义千问大模型客户端配置 apiKey: sk-xxxxxxxxxxxxxxxxxxxxxxx domain: dashscope.aliyuncs.com serviceName: dashscope servicePort: 443promptTemplate: language: CHapis:- apiProvider: domain: restapi.amap.com serviceName: geo servicePort: 80 apiKey: in: query name: key value: fcxxxxxxxxxxxxxxxxxx api: | openapi: 3.1.0 info: title: 高德地图 description: 获取 POI 的相关信息 version: v1.0.0 servers: - url: https://restapi.amap.com paths: /v5/place/text: get: description: 根据POI名称,获得POI的经纬度坐标 operationId: get_location_coordinate parameters: - name: keywords in: query description: POI名称,必须是中文 required: true schema: type: string - name: region in: query description: POI所在的区域名,必须是中文 required: true schema: type: string deprecated: false /v5/place/around: get: description: 搜索给定坐标附近的POI operationId: search_nearby_pois parameters: - name: keywords in: query description: 目标POI的关键字 required: true schema: type: string - name: location in: query description: 中心点的经度和纬度,用逗号隔开 required: true schema: type: string deprecated: false components: schemas: {}- apiProvider: domain: api.seniverse.com serviceName: seniverse servicePort: 80 apiKey: in: query name: key value: SMxxxxxxxxxxxxxx api: | openapi: 3.1.0 info: title: 心知天气 description: 获取 天气预办相关信息 version: v1.0.0 servers: - url: https://api.seniverse.com paths: /v3/weather/now.json: get: description: 获取指定城市的天气实况 operationId: get_weather_now parameters: - name: location in: query description: 所查询的城市 required: true schema: type: string - name: language in: query description: 返回天气查询结果所使用的语言 required: true schema: type: string default: zh-Hans enum: - zh-Hans - en - ja - name: unit in: query description: 表示温度的的单位,有摄氏度和华氏度两种 required: true schema: type: string default: c enum: - c - f deprecated: false components: schemas: {}
插件配置分三部分,第一部分 dashscope,是通义千问大模型服务的相关信息,第二部分 promptTemplate,是自定义 agent react 模板的配置项,示例中 language 是指使用中文模板,第三部分 apis 是外部 API 服务的相关配置,包含服务相关信息 apiProvider 以及 api(tools) 的 OpenAPI 文档,这一部分是实现 agent 调用外部工具的关键,agent 会通过理解 OpenAPI 文档来理解参数应该赋什么值。 {...,"content":" 在济南市鑫盛大厦附近,您可以选择以下咖啡店:\n1. luckin coffee 瑞幸咖啡(鑫盛大厦店),位于新泺大街1299号鑫盛大厦2号楼大堂;\n2. 三庆齐盛广场挪瓦咖啡(三庆·齐盛广场店),位于新泺大街与颖秀路交叉口西南60米;\n3. luckin coffee 瑞幸咖啡(三庆·齐盛广场店),位于颖秀路1267号;\n4. 库迪咖啡(齐鲁软件园店),位于新泺大街三庆齐盛广场4号楼底商;\n5. 库迪咖啡(美莲广场店),位于高新区新泺大街1166号美莲广场L117号;以及其他一些选项。希望这些建议对您有所帮助!"...}
{..."content":" 济南市现在的天气状况为阴天,温度为31℃。此信息最后更新于2024年8月9日15时12分(北京时间)。"...}
{..."content":" 济南市の現在の天気は雨曇りで、気温は88°Fです。この情報は2024年8月9日15時12分(東京時間)に更新されました。"...}
AI Agent 插件的实现是使用了 ReAct(Reasoning and Action),ReAct 一词来自于论文《ReAct: Synergizing Reasoning and Acting in Language Models》,其核心思想是通过思维链的方式,引导模型将复杂问题进行拆分,一步一步地推理(Reasoning)和行动(Action),同时还引入了观察(Observation)环节,在每次执行(Action)之后,都会先观察(Observation)当前现状,然后再进行下一步的推理(Reasoning)。 ReAct,就是要让开发者引导大模型进行推理,然后根据推理结果,判断需要采取哪个行动(调用工具),与外界环境互动。 AI Proxy 插件配置在默认阶段,而 AI Agent 可以配置在确保比 AI Agent 优先级高的阶段,比如认证阶段。这样可以保证用户的 http request 可以先被 AI Agent 拦截到。 1. 参数配置
使用 AI Agent 需要先按上一章节的插件参数配置的格式配置好服务以及 api 相关参数,也就是图中第 0 步要做的工作。 2. prompt 模板
首先,因为 Agent 是一个一步一步思考,多次调用工具的过程,因此是一个多轮对话场景,因此 AI Agent 维护了一个 messageStore,用来存储历史对话。 整个 Agent ReAct 的控制核心就在于 prompt 模板,中文版本的模板如下: 尽你所能回答以下问题。你可以使用以下工具:{tools}请使用以下格式,其中Action字段后必须跟着Action Input字段,并且不要将Action Input替换成Input或者tool等字段,不能出现格式以外的字段名,每个字段在每个轮次只出现一次:Question: 你需要回答的输入问题Thought: 你应该总是思考该做什么Action: 要采取的动作,动作只能是{tools_name}中的一个 ,一定不要加入其它内容Action Input: 行动的输入,必须出现在Action后。Observation: 行动的结果...(这个Thought/Action/Action Input/Observation可以重复N次)Thought: 我现在知道最终答案Final Answer: 对原始输入问题的最终答案再次重申,不要修改以上模板的字段名称,开始吧!Question: {input}
在 AI Agent 的 onHttpRequestBody 阶段,接收到用户的 query 后,例如:我要在北京五道口附近喝咖啡,帮我推荐一下,会将 query 填入 {input} 部分,同时将插件参数配置中的 api 名称,功能以及 OpenAPI 文档放在 {tools} 部分,将 api 名称放在 {tools_name} 部分。 将该 prompt 模板存入到 messageStore 中,格式为: role: usermsg: {prompt模板}
之后通过 proxywasm.ReplaceHttpRequestBody 函数用 prompt 模板替换掉用户的原始 query,通过 ai-proxy 发送给大模型。 3. 推理过程(工具调用)
大模型的返回会在 AI Agent 的 onHttpResponseBody 阶段拦截到。此时首先将回复内容存储到 messageStore 中,格式为: role: assistantmsg: {大模型的回复}
Thought: 为了提供咖啡店的推荐,我首先需要获取五道口这一地点的经纬度坐标。Action: get_location_coordinateAction Input: {"keywords": "五道口", "region": "北京市"}
通过正则表达式取出 Action 与 Action Input 的值,就得到了需要调用的工具名称以及参数的值。 由于通常外部 API 都会提供一个认证 apiKey,只有配置了 apiKey,才能使用 api 接口。以本例子为例,需要在 url 中包含 key={apiKey} 的参数,所以我在 apiProvider 中对 apiKey 做了设计。包含 name 和 value 两个字段,name 表示实际服务商要求的 apiKey 的名称,例如本例中的 key,value 是具体的 apiKey 值。 程序还会根据 OpenAPI 文档拼接处 url 以及查看 method 是什么,从而发送对应的 http 请求,例如本例子是要发送: {"status":0,"message":"成功","result":{"location":{"lng":116.352978,"lat":39.982849},"precise":1,"confidence":100,"comprehension":100}}
将该回复拼接到 Observation 后面,作为新的 query,在存储到 messageStore 后,将整个历史对话发送给大模型。此时由于处在插件的 onHttpResponseBody 阶段,无法再通过 ai-proxy 访问大模型,因此需要自己去调用 dashscope client 访问大模型。 Thought: 现在我得到了五道口的经纬度坐标,接下来我可以使用这些坐标来搜索附近的咖啡店。Action: search_nearby_poisAction Input: {"keywords": "咖啡", "longitude": "116.352978", "latitude": "39.982849"}
程序通过正则得到 Action 与 Action Input 后,会重复刚才的过程,组装新的 url,向高德地图发请求,然后把结果存 messageStore 后给到大模型。整个过程是一个不断递归调用的过程。 Thought: 我现在知道最终答案Final Answer: 在北京市五道口附近有几家咖啡店可以选择,包括:- 星巴克五道口店- Costa Coffee五道口店- 漫咖啡五道口店您可以根据个人喜好选择前往。
这一次,程序通过可以检测到回复中包含了 Final Answer,这说明大模型已经得到了最终答案,无需再次调用工具了。因此检测到 Final Answer 就是结束递归调用的条件,此时就可以将 Final Answer 的答案通过:
proxywasm.ReplaceHttpResponseBody 函数替换掉 response body 返回给用户了。
本文主要介绍了 AI Agent 的背景,概念,探讨了 AI Agent 网关插件的使用方法,效果以及实现原理。希望对你有帮助!
插件的实现已经提交 PR 给 Higress 开源社区,可以到这里查看完整的代码实现:https://github.com/alibaba/higress/pull/1192 也欢迎大家提出宝贵建议,可以直接在上面 PR 中评论,或者在 Higress 社区交流群(钉钉群号:30735012403)里一起沟通。 [1]Higress
https://github.com/alibaba/higress
[2]入门指南-Web 服务 API丨高德地图 API(amap.com)
https://lbs.amap.com/api/webservice/gettingstarted
[3]查看/修改你的 API 密钥(yuque.com)
https://seniverse.yuque.com/hyper_data/api_v3/gc03wk PAI Stable Diffusion WebUI 解决方案为企业提供云上快速部署定制化的文生图应用。提供了方便、高效的模型部署产品,并支持根据实际需求,配置不同的服务版本及服务参数。具有分钟级部署上线,方便快捷、开箱即用,多版本部署方案,参数可定制化调整的优势。
点击阅读原文查看详情。