功能说明

一个可定制化的 API AI Agent,支持配置 http method 类型为 GET 与 POST 的 API,支持多轮对话,支持流式与非流式模式。 agent流程图如下: ai-agent

运行属性

插件执行阶段:默认阶段 插件执行优先级:200

配置字段

基本配置

名称数据类型填写要求默认值描述
llmobject必填-配置 AI 服务提供商的信息
apisobject必填-配置外部 API 服务提供商的信息
promptTemplateobject非必填-配置 Agent ReAct 模板的信息

llm的配置字段说明如下:

名称数据类型填写要求默认值描述
apiKeystring必填-用于在访问大模型服务时进行认证的令牌。
serviceNamestring必填-大模型服务名
servicePortint必填-大模型服务端口
domainstring必填-访问大模型服务时域名
pathstring必填-访问大模型服务时路径
modelstring必填-访问大模型服务时模型名
maxIterationsint必填15结束执行循环前的最大步数
maxExecutionTimeint必填50000每一次请求大模型的超时时间,单位毫秒
maxTokensint必填1000每一次请求大模型的输出token限制

apis的配置字段说明如下:

名称数据类型填写要求默认值描述
apiProviderobject必填-外部 API 服务信息
apistring必填-工具的 OpenAPI 文档

apiProvider的配置字段说明如下:

名称数据类型填写要求默认值描述
apiKeyobject非必填-用于在访问外部 API 服务时进行认证的令牌。
maxExecutionTimeint非必填50000每一次请求API的超时时间,单位毫秒。
serviceNamestring必填-访问外部 API 服务名
servicePortint必填-访问外部 API 服务端口
domainstring必填-访访问外部 API 时域名

apiKey的配置字段说明如下:

名称数据类型填写要求默认值描述
instring非必填none在访问外部 API 服务时进行认证的令牌是放在 header 中还是放在 query 中,如果API没有令牌,填none。
namestring非必填-用于在访问外部 API 服务时进行认证的令牌的名称。
valuestring非必填-用于在访问外部 API 服务时进行认证的令牌的值。

promptTemplate的配置字段说明如下:

名称数据类型填写要求默认值描述
languagestring非必填ENAgent ReAct 模板的语言类型,包括 CH 和 EN 两种
chTemplateobject非必填-Agent ReAct 中文模板
enTemplateobject非必填-Agent ReAct 英文模板

chTemplateenTemplate的配置字段说明如下:

名称数据类型填写要求默认值描述
questionstring非必填-Agent ReAct 模板的 question 部分
thought1string非必填-Agent ReAct 模板的 thought1 部分
observationstring非必填-Agent ReAct 模板的 observation 部分
thought2string非必填-Agent ReAct 模板的 thought2 部分

用法示例

配置信息

  1. llm:
  2. apiKey: xxxxxxxxxxxxxxxxxx
  3. domain: dashscope.aliyuncs.com
  4. serviceName: dashscope.dns
  5. servicePort: 443
  6. path: /compatible-mode/v1/chat/completions
  7. model: qwen-max-0403
  8. maxIterations: 2
  9. promptTemplate:
  10. language: CH
  11. apis:
  12. - apiProvider:
  13. domain: restapi.amap.com
  14. serviceName: geo.dns
  15. servicePort: 80
  16. apiKey:
  17. in: query
  18. name: key
  19. value: xxxxxxxxxxxxxxx
  20. api: |
  21. openapi: 3.1.0
  22. info:
  23. title: 高德地图
  24. description: 获取 POI 的相关信息
  25. version: v1.0.0
  26. servers:
  27. paths:
  28. /v5/place/text:
  29. get:
  30. description: 根据POI名称,获得POI的经纬度坐标
  31. operationId: get_location_coordinate
  32. parameters:
  33. - name: keywords
  34. in: query
  35. description: POI名称,必须是中文
  36. required: true
  37. schema:
  38. type: string
  39. - name: region
  40. in: query
  41. description: POI所在的区域名,必须是中文
  42. required: true
  43. schema:
  44. type: string
  45. deprecated: false
  46. /v5/place/around:
  47. get:
  48. description: 搜索给定坐标附近的POI
  49. operationId: search_nearby_pois
  50. parameters:
  51. - name: keywords
  52. in: query
  53. description: 目标POI的关键字
  54. required: true
  55. schema:
  56. type: string
  57. - name: location
  58. in: query
  59. description: 中心点的经度和纬度,用逗号隔开
  60. required: true
  61. schema:
  62. type: string
  63. deprecated: false
  64. components:
  65. schemas: {}
  66. - apiProvider:
  67. domain: api.seniverse.com
  68. serviceName: seniverse.dns
  69. servicePort: 80
  70. apiKey:
  71. in: query
  72. name: key
  73. value: xxxxxxxxxxxxxxx
  74. api: |
  75. openapi: 3.1.0
  76. info:
  77. title: 心知天气
  78. description: 获取 天气预办相关信息
  79. version: v1.0.0
  80. servers:
  81. paths:
  82. /v3/weather/now.json:
  83. get:
  84. description: 获取指定城市的天气实况
  85. operationId: get_weather_now
  86. parameters:
  87. - name: location
  88. in: query
  89. description: 所查询的城市
  90. required: true
  91. schema:
  92. type: string
  93. - name: language
  94. in: query
  95. description: 返回天气查询结果所使用的语言
  96. required: true
  97. schema:
  98. type: string
  99. default: zh-Hans
  100. enum:
  101. - zh-Hans
  102. - en
  103. - ja
  104. - name: unit
  105. in: query
  106. description: 表示温度的的单位,有摄氏度和华氏度两种
  107. required: true
  108. schema:
  109. type: string
  110. default: c
  111. enum:
  112. - c
  113. - f
  114. deprecated: false
  115. components:
  116. schemas: {}
  117. - apiProvider:
  118. apiKey:
  119. in: header
  120. name: DeepL-Auth-Key
  121. value: 73xxxxxxxxxxxxxxx:fx
  122. domain: api-free.deepl.com
  123. serviceName: deepl.dns
  124. servicePort: 443
  125. api: |
  126. openapi: 3.1.0
  127. info:
  128. title: DeepL API Documentation
  129. description: The DeepL API provides programmatic access to DeepLs machine translation technology.
  130. version: v1.0.0
  131. servers:
  132. paths:
  133. /translate:
  134. post:
  135. summary: Request Translation
  136. operationId: translateText
  137. requestBody:
  138. required: true
  139. content:
  140. application/json:
  141. schema:
  142. type: object
  143. required:
  144. - text
  145. - target_lang
  146. properties:
  147. text:
  148. description: |
  149. Text to be translated. Only UTF-8-encoded plain text is supported. The parameter may be specified
  150. up to 50 times in a single request. Translations are returned in the same order as they are requested.
  151. type: array
  152. maxItems: 50
  153. items:
  154. type: string
  155. example: Hello, World!
  156. target_lang:
  157. description: The language into which the text should be translated.
  158. type: string
  159. enum:
  160. - BG
  161. - CS
  162. - DA
  163. - DE
  164. - EL
  165. - EN-GB
  166. - EN-US
  167. - ES
  168. - ET
  169. - FI
  170. - FR
  171. - HU
  172. - ID
  173. - IT
  174. - JA
  175. - KO
  176. - LT
  177. - LV
  178. - NB
  179. - NL
  180. - PL
  181. - PT-BR
  182. - PT-PT
  183. - RO
  184. - RU
  185. - SK
  186. - SL
  187. - SV
  188. - TR
  189. - UK
  190. - ZH
  191. - ZH-HANS
  192. example: DE
  193. components:
  194. schemas: {}

本示例配置了三个服务,演示了get与post两种类型的工具。其中get类型的工具包括高德地图与心知天气,post类型的工具是deepl翻译。三个服务都需要现在Higress的服务中以DNS域名的方式配置好,并确保健康。 高德地图提供了两个工具,分别是获取指定地点的坐标,以及搜索坐标附近的感兴趣的地点。文档:https://lbs.amap.com/api/webservice/guide/api-advanced/newpoisearch 心知天气提供了一个工具,用于获取指定城市的实时天气情况,支持中文,英文,日语返回,以及摄氏度和华氏度的表示。文档:https://seniverse.yuque.com/hyper_data/api_v3/nyiu3t deepl提供了一个工具,用于翻译给定的句子,支持多语言。。文档:https://developers.deepl.com/docs/v/zh/api-reference/translate?fallback=true

以下为测试用例,为了效果的稳定性,建议保持大模型版本的稳定,本例子中使用的qwen-max-0403:

请求示例

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. data-raw ‘{“model”:”qwen”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[{“role”:”user”,”content”:”我想在济南市鑫盛大厦附近喝咖啡,给我推荐几个”}],”presence_penalty”:0,”temperature”:0,”top_p”:0}’

响应示例

  1. {“id”:”139487e7-96a0-9b13-91b4-290fb79ac992”,”choices”:[{“index”:0,”message”:{“role”:”assistant”,”content”:” 在济南市鑫盛大厦附近,您可以选择以下咖啡店:\n1. luckin coffee 瑞幸咖啡(鑫盛大厦店),位于新泺大街1299号鑫盛大厦2号楼大堂;\n2. 三庆齐盛广场挪瓦咖啡(三庆·齐盛广场店),位于新泺大街与颖秀路交叉口西南60米;\n3. luckin coffee 瑞幸咖啡(三庆·齐盛广场店),位于颖秀路1267号;\n4. 库迪咖啡(齐鲁软件园店),位于新泺大街三庆齐盛广场4号楼底商;\n5. 库迪咖啡(美莲广场店),位于高新区新泺大街1166号美莲广场L117号;以及其他一些选项。希望这些建议对您有所帮助!”},”finish_reason”:”stop”}],”created”:1723172296,”model”:”qwen-max-0403”,”object”:”chat.completion”,”usage”:{“prompt_tokens”:886,”completion_tokens”:50,”total_tokens”:936}}

请求示例

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. data-raw ‘{“model”:”qwen”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[{“role”:”user”,”content”:”济南市现在的天气情况如何?”}],”presence_penalty”:0,”temperature”:0,”top_p”:0}’

响应示例

  1. {“id”:”ebd6ea91-8e38-9e14-9a5b-90178d2edea4”,”choices”:[{“index”:0,”message”:{“role”:”assistant”,”content”:” 济南市现在的天气状况为阴天,温度为31℃。此信息最后更新于2024891512分(北京时间)。”},”finish_reason”:”stop”}],”created”:1723187991,”model”:”qwen-max-0403”,”object”:”chat.completion”,”usage”:{“prompt_tokens”:890,”completion_tokens”:56,”total_tokens”:946}}

请求示例

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. data-raw ‘{“model”:”qwen”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[{“role”: user”,”content”: “济南的天气如何?”},{ role”: assistant”,”content”: “目前,济南市的天气为多云,气温为24℃,数据更新时间为2024912215014秒。”},{“role”: user”,”content”: “北京呢?”}],”presence_penalty”:0,”temperature”:0,”top_p”:0}’

响应示例

  1. {“id”:”ebd6ea91-8e38-9e14-9a5b-90178d2edea4”,”choices”:[{“index”:0,”message”:{“role”:”assistant”,”content”:”目前,北京市的天气为晴朗,气温为19℃,数据更新时间为2024912221740秒。”},”finish_reason”:”stop”}],”created”:1723187991,”model”:”qwen-max-0403”,”object”:”chat.completion”,”usage”:{“prompt_tokens”:999,”completion_tokens”:76,”total_tokens”:1075}}

请求示例

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. data-raw ‘{“model”:”qwen”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[{“role”:”user”,”content”:”济南市现在的天气情况如何?用华氏度表示,用日语回答”}],”presence_penalty”:0,”temperature”:0,”top_p”:0}’

响应示例

  1. {“id”:”ebd6ea91-8e38-9e14-9a5b-90178d2edea4”,”choices”:[{“index”:0,”message”:{“role”:”assistant”,”content”:” 济南市の現在の天気は雨曇りで、気温は88°Fです。この情報は2024891512分(東京時間)に更新されました。”},”finish_reason”:”stop”}],”created”:1723187991,”model”:”qwen-max-0403”,”object”:”chat.completion”,”usage”:{“prompt_tokens”:890,”completion_tokens”:56,”total_tokens”:946}}

请求示例

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. data-raw ‘{“model”:”qwen”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[{“role”:”user”,”content”:”帮我用德语翻译以下句子:九头蛇万岁!”}],”presence_penalty”:0,”temperature”:0,”top_p”:0}’

响应示例

  1. {“id”:”65dcf12c-61ff-9e68-bffa-44fc9e6070d5”,”choices”:[{“index”:0,”message”:{“role”:”assistant”,”content”:” “九头蛇万岁!”的德语翻译为“Hoch lebe Hydra!”。”},”finish_reason”:”stop”}],”created”:1724043865,”model”:”qwen-max-0403”,”object”:”chat.completion”,”usage”:{“prompt_tokens”:908,”completion_tokens”:52,”total_tokens”:960}}