自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AI 網(wǎng)關(guān)零代碼解決 AI 幻覺問(wèn)題

人工智能
本文主要介紹了 AI Agent 的背景,概念,探討了 AI Agent 網(wǎng)關(guān)插件的使用方法,效果以及實(shí)現(xiàn)原理。希望對(duì)你有幫助!

1.前言

什么是 AI Agent

隨著大模型技術(shù)的快速發(fā)展,越來(lái)越多的公司在實(shí)際業(yè)務(wù)中落地了大模型應(yīng)用。但是人們逐漸發(fā)現(xiàn)了大模型能力的不足。例如:由于大模型的訓(xùn)練數(shù)據(jù)是有限的,因此一些垂直領(lǐng)域的知識(shí),如金融,醫(yī)療等等,大模型無(wú)法回答,或者容易出現(xiàn)幻覺。并且隨著業(yè)務(wù)的復(fù)雜度提高,如何能讓大模型像人一樣思考,深度的分析解決問(wèn)題,也對(duì)大模型的理解力提出了挑戰(zhàn)。

在這樣的背景下,業(yè)界提出了 AI Agent 的概念。AI Agent 中文翻譯成智能體,旨在讓大模型像人腦一樣思考問(wèn)題,通過(guò)在思考過(guò)程中的不斷反饋以及工具的調(diào)用,最終實(shí)現(xiàn)逐步完成給定目標(biāo)的過(guò)程。例如,用戶使用外賣助手 Agent,只需告訴 Agent,我想點(diǎn)一份肯德基的上校雞塊,Agent 便可以實(shí)現(xiàn)搜索肯德基商家,選擇食物,下單,支付等一系列的思考過(guò)程以及工具調(diào)用,無(wú)需人工參與。

什么是 AI Gateway

AI Gateway 的定義是 AI Native 的 API Gateway,是基于 API Gateway 的能力來(lái)滿足 AI Native 的需求。例如:

  • 將傳統(tǒng)的 QPS 限流擴(kuò)展到 Token 限流。
  • 將傳統(tǒng)的負(fù)載均衡/重試/fallback 能力延伸,支持對(duì)接多個(gè)大模型廠商 API,提高整體穩(wěn)定性。
  • 擴(kuò)展可觀測(cè)能力,支持不同模型之間效果對(duì)比的 A/B Test,以及對(duì)話上下文鏈路 Tracing 等。

Higress[1]是阿里云開源的一款 AI Gateway,基于 API Gateway 的能力,再加上基于 Wasm 插件擴(kuò)展的大量 AI 插件,就可以滿足上述所有 AI Native 的需求。

我也是基于 Higress 的 Wasm 插件擴(kuò)展能力,開發(fā)了一個(gè) AI Agent 插件,通過(guò)發(fā)揮 API Gateway 對(duì)于 API 管理的優(yōu)勢(shì),用 API 賦能 AI Agent,基于 Agent ReAct 能力,可以實(shí)現(xiàn)零代碼快速構(gòu)建一個(gè) AI Agent 應(yīng)用。

本文將以高德地圖和心知天氣兩個(gè)服務(wù)為例,介紹一下如何零代碼使用 AI Agent 插件構(gòu)建一個(gè)同時(shí)支持地圖服務(wù)和天氣服務(wù)的 Agent,同時(shí)會(huì)探討 AI Agent 插件的實(shí)現(xiàn)原理。

2.AI Agent 插件使用

apiKey 申請(qǐng)

高德地圖提供了地圖相關(guān)業(yè)務(wù)的 API 服務(wù),例如地點(diǎn)搜索,導(dǎo)航等等;心知天氣提供了天氣情況查詢的相關(guān) API 服務(wù)。兩個(gè)服務(wù)都提供了每日免費(fèi)的 API 調(diào)用次數(shù),方便用戶測(cè)試。

使用這兩個(gè)服務(wù)需要去其官方網(wǎng)址,注冊(cè)賬號(hào),申請(qǐng) apiKey,有了 apiKey,便可以根據(jù)官方 API 文檔去調(diào)用 API。官方文檔的鏈接我放在下方,這里就不再贅述申請(qǐng) apiKey 的過(guò)程。

高德地圖:入門指南-Web 服務(wù) API丨高德地圖 API(amap.com)[2]

心知天氣:查看/修改你的 API 密鑰(yuque.com)[3]

Higress服務(wù)配置

為了讓插件能夠訪問(wèn)通義千問(wèn)大模型以及高德地圖和心知天氣服務(wù),需要在 Higress 的路由管理-服務(wù)中,配置服務(wù)。服務(wù)類型為 DNS 域名:

圖片圖片

插件參數(shù)配置

在插件配置中,選擇實(shí)例級(jí)插件規(guī)則,配置如下:

dashscope: #通義千問(wèn)大模型客戶端配置
  apiKey: sk-xxxxxxxxxxxxxxxxxxxxxxx
  domain: dashscope.aliyuncs.com
  serviceName: dashscope
  servicePort: 443
promptTemplate:
  language: CH
apis:
- 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 的相關(guān)信息
      version: v1.0.0
    servers:
      - url: https://restapi.amap.com
    paths:
      /v5/place/text:
        get:
          description: 根據(jù)POI名稱,獲得POI的經(jīng)緯度坐標(biāo)
          operationId: get_location_coordinate
          parameters:
            - name: keywords
              in: query
              description: POI名稱,必須是中文
              required: true
              schema:
                type: string
            - name: region
              in: query
              description: POI所在的區(qū)域名,必須是中文
              required: true
              schema:
                type: string
          deprecated: false
      /v5/place/around:
        get:
          description: 搜索給定坐標(biāo)附近的POI
          operationId: search_nearby_pois
          parameters:
            - name: keywords
              in: query
              description: 目標(biāo)POI的關(guān)鍵字
              required: true
              schema:
                type: string
            - name: location
              in: query
              description: 中心點(diǎn)的經(jīng)度和緯度,用逗號(hào)隔開
              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: 獲取 天氣預(yù)辦相關(guān)信息
      version: v1.0.0
    servers:
      - url: https://api.seniverse.com
    paths:
      /v3/weather/now.json:
        get:
          description: 獲取指定城市的天氣實(shí)況
          operationId: get_weather_now
          parameters:
            - name: location
              in: query
              description: 所查詢的城市
              required: true
              schema:
                type: string
            - name: language
              in: query
              description: 返回天氣查詢結(jié)果所使用的語(yǔ)言
              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,是通義千問(wèn)大模型服務(wù)的相關(guān)信息,第二部分 promptTemplate,是自定義 agent react 模板的配置項(xiàng),示例中的 language 是指使用中文模板,第三部分 apis 是外部 API 服務(wù)的相關(guān)配置,包含服務(wù)相關(guān)信息 apiProvider 以及 api(tools) 的 OpenAPI 文檔,這一部分是實(shí)現(xiàn) agent 調(diào)用外部工具的關(guān)鍵,agent 會(huì)通過(guò)理解 OpenAPI 文檔來(lái)理解參數(shù)應(yīng)該賦什么值。

插件效果

示例請(qǐng)求一:

curl 'http://<這里換成網(wǎng)關(guān)公網(wǎng)IP>/api/openai/v1/chat/completions' \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
--data-raw '{"messages":[{"role":"user","content":"我想在濟(jì)南市鑫盛大廈附近喝咖啡,給我推薦幾個(gè)"}],"model":"qwen","stream":false}'

示例響應(yīng)一:

{...,"content":" 在濟(jì)南市鑫盛大廈附近,您可以選擇以下咖啡店:\n1. luckin coffee 瑞幸咖啡(鑫盛大廈店),位于新濼大街1299號(hào)鑫盛大廈2號(hào)樓大堂;\n2. 三慶齊盛廣場(chǎng)挪瓦咖啡(三慶·齊盛廣場(chǎng)店),位于新濼大街與穎秀路交叉口西南60米;\n3. luckin coffee 瑞幸咖啡(三慶·齊盛廣場(chǎng)店),位于穎秀路1267號(hào);\n4. 庫(kù)迪咖啡(齊魯軟件園店),位于新濼大街三慶齊盛廣場(chǎng)4號(hào)樓底商;\n5. 庫(kù)迪咖啡(美蓮廣場(chǎng)店),位于高新區(qū)新濼大街1166號(hào)美蓮廣場(chǎng)L117號(hào);以及其他一些選項(xiàng)。希望這些建議對(duì)您有所幫助!"...}

示例請(qǐng)求二:

curl 'http://<這里換成網(wǎng)關(guān)公網(wǎng)IP>/api/openai/v1/chat/completions' \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
--data-raw '{"messages":[{"role":"user","content":"濟(jì)南市現(xiàn)在的天氣情況如何?"}],"model":"qwen","stream":false}'

示例響應(yīng)二:

{..."content":" 濟(jì)南市現(xiàn)在的天氣狀況為陰天,溫度為31℃。此信息最后更新于2024年8月9日15時(shí)12分(北京時(shí)間)。"...}

示例請(qǐng)求三:

curl 'http://<這里換成網(wǎng)關(guān)公網(wǎng)IP>/api/openai/v1/chat/completions' \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
--data-raw '{"messages":[{"role":"user","content":"濟(jì)南市現(xiàn)在的天氣情況如何?用華氏度表示,用日語(yǔ)回答"}],"model":"qwen","stream":false}'

示例響應(yīng)三:

{..."content":" 濟(jì)南市の現(xiàn)在の天気は雨曇りで、気溫は88°Fです。この情報(bào)は2024年8月9日15時(shí)12分(東京時(shí)間)に更新されました。"...}

3.AI Agent 實(shí)現(xiàn)原理

ReAct 原理

AI Agent 插件的實(shí)現(xiàn)是使用了 ReAct(Reasoning and Action),ReAct 一詞來(lái)自于論文《ReAct: Synergizing Reasoning and Acting in Language Models》,其核心思想是通過(guò)思維鏈的方式,引導(dǎo)模型將復(fù)雜問(wèn)題進(jìn)行拆分,一步一步地推理(Reasoning)和行動(dòng)(Action),同事還引入了觀察(Observation)環(huán)節(jié),在每次執(zhí)行(Action)之后,都會(huì)先觀察(Observation)當(dāng)前現(xiàn)狀,然后再進(jìn)行下一步的推理(Reasoning)。

ReAct,就是要讓開發(fā)者引導(dǎo)大模型進(jìn)行推理,然后根據(jù)推理結(jié)果,判斷需要采取哪個(gè)行動(dòng)(調(diào)用工具),與外界環(huán)境互動(dòng)。

ReAct 的工作流程如下:

圖片圖片

插件實(shí)現(xiàn)邏輯

插件的工作流程如下:

圖片圖片

AI Proxy 插件配置在默認(rèn)階段,而 AI Agent 可以配置在確保比 AI Agent 優(yōu)先級(jí)高的階段,比如認(rèn)證階段。這樣可以保證用戶的 http request 可以先被 AI Agent 攔截到。

AI Agent 的處理過(guò)程分為三個(gè)部分。

1. 參數(shù)配置

使用 AI Agent 需要先按上一章節(jié)的插件參數(shù)配置的格式配置好服務(wù)以及 api 相關(guān)參數(shù),也就是圖中第 0 步要做的工作。

2. prompt 模板

首先,因?yàn)?Agent 是一個(gè)一步一步思考,多次調(diào)用工具的過(guò)程,因此是一個(gè)多輪對(duì)話場(chǎng)景,因此 AI Agent 維護(hù)了一個(gè) messageStore,用來(lái)存儲(chǔ)歷史對(duì)話。

整個(gè) Agent ReAct 的控制核心就在于 prompt 模板,中文版本的模板如下:

盡你所能回答以下問(wèn)題。你可以使用以下工具:


{tools}


請(qǐng)使用以下格式,其中Action字段后必須跟著Action Input字段,并且不要將Action Input替換成Input或者tool等字段,不能出現(xiàn)格式以外的字段名,每個(gè)字段在每個(gè)輪次只出現(xiàn)一次:
Question: 你需要回答的輸入問(wèn)題
Thought: 你應(yīng)該總是思考該做什么
Action: 要采取的動(dòng)作,動(dòng)作只能是{tools_name}中的一個(gè) ,一定不要加入其它內(nèi)容
Action Input: 行動(dòng)的輸入,必須出現(xiàn)在Action后。
Observation: 行動(dòng)的結(jié)果
...(這個(gè)Thought/Action/Action Input/Observation可以重復(fù)N次)
Thought: 我現(xiàn)在知道最終答案
Final Answer: 對(duì)原始輸入問(wèn)題的最終答案
再次重申,不要修改以上模板的字段名稱,開始吧!


Question: {input}

該模板指導(dǎo)了大模型的推理過(guò)程。

在 AI Agent 的 onHttpRequestBody 階段,接收到用戶的 query 后,例如:我要在北京五道口附近喝咖啡,幫我推薦一下,會(huì)將 query 填入 {input} 部分,同時(shí)將插件參數(shù)配置中的 api 名稱,功能以及 OpenAPI 文檔放在 {tools} 部分,將 api 名稱放在 {tools_name} 部分。

將該 prompt 模板存入到 messageStore 中,格式為:

role: user
msg: {prompt模板}

之后通過(guò) proxywasm.ReplaceHttpRequestBody 函數(shù)用 prompt 模板替換掉用戶的原始 query,通過(guò) ai-proxy 發(fā)送給大模型。

此部分對(duì)應(yīng)圖中的 1,2,3,4 步驟。

3. 推理過(guò)程(工具調(diào)用)

大模型的返回會(huì)在 AI Agent 的 onHttpResponseBody 階段攔截到。此時(shí)首先將回復(fù)內(nèi)容存儲(chǔ)到 messageStore 中,格式為:

role: assistant
msg: {大模型的回復(fù)}

之后需要通過(guò)正則表達(dá)式來(lái)判斷大模型的返回內(nèi)容。

例如上文的例子,大模型會(huì)返回如下內(nèi)容:

Thought: 為了提供咖啡店的推薦,我首先需要獲取五道口這一地點(diǎn)的經(jīng)緯度坐標(biāo)。


Action: get_location_coordinate


Action Input: {"keywords": "五道口", "region": "北京市"}

通過(guò)正則表達(dá)式取出 Action 與 Action Input 的值,就得到了需要調(diào)用的工具名稱以及參數(shù)的值。

由于通常外部 API 都會(huì)提供一個(gè)認(rèn)證 apiKey,只有配置了 apiKey,才能使用 api 接口。以本例子為例,需要在 url 中包含 key={apiKey} 的參數(shù),所以我在 apiProvider 中對(duì) apiKey 做了設(shè)計(jì)。包含 name 和 value 兩個(gè)字段,name 表示實(shí)際服務(wù)商要求的 apiKey 的名稱,例如本例中的 key,value 是具體的 apiKey 值。

程序還會(huì)根據(jù) OpenAPI 文檔拼接處 url 以及查看 method 是什么,從而發(fā)送對(duì)應(yīng)的 http 請(qǐng)求,例如本例子是要發(fā)送:

GET https://restapi.amap.com/v5/place/text?key=xxxxxx&keywords=五道口?inotallow=北京市

該 API 的回復(fù)為:

{"status":0,"message":"成功","result":{"location":{"lng":116.352978,"lat":39.982849},"precise":1,"confidence":100,"comprehension":100}}

將該回復(fù)拼接到 Observation 后面,作為新的 query,在存儲(chǔ)到 messageStore 后,將整個(gè)歷史對(duì)話發(fā)送給大模型。此時(shí)由于處在插件的 onHttpResponseBody 階段,無(wú)法再通過(guò) ai-proxy 訪問(wèn)大模型,因此需要自己去調(diào)用 dashscope client 訪問(wèn)大模型。

大模型會(huì)返回如下內(nèi)容:

Thought: 現(xiàn)在我得到了五道口的經(jīng)緯度坐標(biāo),接下來(lái)我可以使用這些坐標(biāo)來(lái)搜索附近的咖啡店。


Action: search_nearby_pois


Action Input: {"keywords": "咖啡", "longitude": "116.352978", "latitude": "39.982849"}

程序通過(guò)正則得到 Action 與 Action Input 后,會(huì)重復(fù)剛才的過(guò)程,組裝新的 url,向高德地圖發(fā)請(qǐng)求,然后把結(jié)果存 messageStore 后給到大模型。整個(gè)過(guò)程是一個(gè)不斷遞歸調(diào)用的過(guò)程。

大模型會(huì)再次返回:

Thought: 我現(xiàn)在知道最終答案


Final Answer: 在北京市五道口附近有幾家咖啡店可以選擇,包括:
- 星巴克五道口店
- Costa Coffee五道口店
- 漫咖啡五道口店


您可以根據(jù)個(gè)人喜好選擇前往。

這一次,程序通過(guò)可以檢測(cè)到回復(fù)中包含了 Final Answer,這說(shuō)明大模型已經(jīng)得到了最終答案,無(wú)需再次調(diào)用工具了。因此檢測(cè)到 Final Answer 就是結(jié)束遞歸調(diào)用的條件,此時(shí)就可以將 Final Answer 的答案通過(guò) proxywasm.ReplaceHttpResponseBody 函數(shù)替換掉 response body 返回給用戶了。

該部分對(duì)應(yīng)圖中的 5,6,7,8 步驟。

4.總結(jié)

本文主要介紹了 AI Agent 的背景,概念,探討了 AI Agent 網(wǎng)關(guān)插件的使用方法,效果以及實(shí)現(xiàn)原理。希望對(duì)你有幫助!

插件的實(shí)現(xiàn)已經(jīng)提交 PR 給 Higress 開源社區(qū),可以到這里查看完整的代碼實(shí)現(xiàn):https://github.com/alibaba/higress/pull/1192

也歡迎大家提出寶貴建議,可以直接在上面 PR 中評(píng)論,或者在 Higress 社區(qū)交流群(釘釘群號(hào):30735012403)里一起溝通。

相關(guān)鏈接:

[1] Higress

https://github.com/alibaba/higress

[2] 入門指南-Web 服務(wù) API丨高德地圖 API(amap.com)

https://lbs.amap.com/api/webservice/gettingstarted

[3] 查看/修改你的 API 密鑰(yuque.com)

https://seniverse.yuque.com/hyper_data/api_v3/gc03wk

責(zé)任編輯:武曉燕 來(lái)源: 阿里云云原生
相關(guān)推薦

2025-03-13 11:09:47

2023-09-14 12:35:59

2024-05-27 10:52:06

2025-04-15 06:13:46

2025-04-15 07:44:28

2023-05-24 15:15:55

2021-12-30 11:30:13

人工智能機(jī)器學(xué)習(xí)技術(shù)

2021-11-29 17:29:14

帆軟智數(shù)大會(huì)

2025-04-16 08:35:00

2021-11-04 08:06:47

代碼編排平臺(tái)

2021-04-07 14:52:31

人工智能網(wǎng)絡(luò)安全機(jī)器學(xué)習(xí)

2020-06-05 14:43:25

零代碼平臺(tái)企業(yè)軟件代碼

2020-06-05 14:48:11

零代碼低代碼開發(fā)

2022-06-30 07:48:06

Dooring低代碼零代碼

2025-03-05 11:09:20

2024-01-08 13:42:00

模型訓(xùn)練

2025-04-29 16:12:28

AI模型訓(xùn)練

2022-04-08 10:31:28

美團(tuán)代碼建設(shè)

2024-04-07 08:31:56

文檔編輯引擎零代碼編輯器

2025-04-16 01:00:00

API工具AI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)