成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

AI 網關零代碼解決 AI 幻覺問題

人工智能
本文主要介紹了 AI Agent 的背景,概念,探討了 AI Agent 網關插件的使用方法,效果以及實現原理。希望對你有幫助!

1.前言

什么是 AI Agent

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

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

什么是 AI Gateway

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

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

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

我也是基于 Higress 的 Wasm 插件擴展能力,開發了一個 AI Agent 插件,通過發揮 API Gateway 對于 API 管理的優勢,用 API 賦能 AI Agent,基于 Agent ReAct 能力,可以實現零代碼快速構建一個 AI Agent 應用。

本文將以高德地圖和心知天氣兩個服務為例,介紹一下如何零代碼使用 AI Agent 插件構建一個同時支持地圖服務和天氣服務的 Agent,同時會探討 AI Agent 插件的實現原理。

2.AI Agent 插件使用

apiKey 申請

高德地圖提供了地圖相關業務的 API 服務,例如地點搜索,導航等等;心知天氣提供了天氣情況查詢的相關 API 服務。兩個服務都提供了每日免費的 API 調用次數,方便用戶測試。

使用這兩個服務需要去其官方網址,注冊賬號,申請 apiKey,有了 apiKey,便可以根據官方 API 文檔去調用 API。官方文檔的鏈接我放在下方,這里就不再贅述申請 apiKey 的過程。

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

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

Higress服務配置

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

圖片圖片

插件參數配置

在插件配置中,選擇實例級插件規則,配置如下:

dashscope: #通義千問大模型客戶端配置
  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 的相關信息
      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 文檔來理解參數應該賦什么值。

插件效果

示例請求一:

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

示例響應一:

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

示例請求二:

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

示例響應二:

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

示例請求三:

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

示例響應三:

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

3.AI Agent 實現原理

ReAct 原理

AI Agent 插件的實現是使用了 ReAct(Reasoning and Action),ReAct 一詞來自于論文《ReAct: Synergizing Reasoning and Acting in Language Models》,其核心思想是通過思維鏈的方式,引導模型將復雜問題進行拆分,一步一步地推理(Reasoning)和行動(Action),同事還引入了觀察(Observation)環節,在每次執行(Action)之后,都會先觀察(Observation)當前現狀,然后再進行下一步的推理(Reasoning)。

ReAct,就是要讓開發者引導大模型進行推理,然后根據推理結果,判斷需要采取哪個行動(調用工具),與外界環境互動。

ReAct 的工作流程如下:

圖片圖片

插件實現邏輯

插件的工作流程如下:

圖片圖片

AI Proxy 插件配置在默認階段,而 AI Agent 可以配置在確保比 AI Agent 優先級高的階段,比如認證階段。這樣可以保證用戶的 http request 可以先被 AI Agent 攔截到。

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: user
msg: {prompt模板}

之后通過 proxywasm.ReplaceHttpRequestBody 函數用 prompt 模板替換掉用戶的原始 query,通過 ai-proxy 發送給大模型。

此部分對應圖中的 1,2,3,4 步驟。

3. 推理過程(工具調用)

大模型的返回會在 AI Agent 的 onHttpResponseBody 階段攔截到。此時首先將回復內容存儲到 messageStore 中,格式為:

role: assistant
msg: {大模型的回復}

之后需要通過正則表達式來判斷大模型的返回內容。

例如上文的例子,大模型會返回如下內容:

Thought: 為了提供咖啡店的推薦,我首先需要獲取五道口這一地點的經緯度坐標。


Action: get_location_coordinate


Action 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 請求,例如本例子是要發送:

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

該 API 的回復為:

{"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_pois


Action 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 返回給用戶了。

該部分對應圖中的 5,6,7,8 步驟。

4.總結

本文主要介紹了 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

責任編輯:武曉燕 來源: 阿里云云原生
相關推薦

2025-03-13 11:09:47

2023-05-24 15:15:55

2025-06-13 08:06:41

2023-09-14 12:35:59

2024-05-27 10:52:06

2025-04-15 07:44:28

2025-05-08 06:00:00

AI幻覺AI人工智能

2025-04-15 06:13:46

2025-04-16 08:35:00

2025-05-30 15:59:41

AI開發工具

2021-12-30 11:30:13

人工智能機器學習技術

2025-05-08 16:44:54

AI應用LazyLLM

2021-04-07 14:52:31

人工智能網絡安全機器學習

2025-03-05 11:09:20

2020-06-05 14:43:25

零代碼平臺企業軟件代碼

2021-11-04 08:06:47

代碼編排平臺

2021-11-29 17:29:14

帆軟智數大會

2020-06-05 14:48:11

零代碼低代碼開發

2022-06-30 07:48:06

Dooring低代碼零代碼

2025-04-29 16:12:28

AI模型訓練
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91欧美激情一区二区三区成人 | 7799精品视频天天看 | 男女午夜免费视频 | 国产视频亚洲视频 | 国产精品免费播放 | 91九色视频 | 人成在线 | 欧洲av一区| 国产一区二区三区在线 | 亚洲久久一区 | 欧美日韩一区二区在线 | 91福利在线观看视频 | 久久精品免费 | 91精品国产乱码久久久久久久久 | 亚洲最大福利网 | 一区免费视频 | 自拍偷拍亚洲一区 | jizjizjiz中国护士18 | 午夜免费在线电影 | 黄色在线播放视频 | 欧美 日韩 亚洲91麻豆精品 | 中文字幕日韩专区 | 国产一区二区av | 天天插天天操 | 欧美女优在线观看 | 黄色在线免费网站 | 91精品国产欧美一区二区 | 亚洲电影一级片 | 午夜视频免费在线观看 | 欧美日韩亚洲视频 | 成人免费观看网站 | 国产欧美精品一区二区三区 | 国产在线高清 | av黄色在线| 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 逼逼网 | 99久久精品国产麻豆演员表 | 性欧美xxxx | 中文字幕在线视频一区二区三区 | 91极品视频| 日韩在线国产 |