插件
通義千問插件可以讓通義千問大模型連接到第三方應用,讓通義千問獲取到更多信息,執行多種多樣的操作。插件可以讓通義千問擁有以下能力:
獲取實時信息:獲取新聞、天氣、股價等信息,查詢機票、酒店、餐廳等價格。
知識庫搜索:進行知識庫信息檢索,總結。
執行任務:預訂酒店、餐廳、航班,調用其他服務生成圖片、音頻、視頻等。
通義千問是一個智能的插件API調用者。通義千問能夠根據輸入的用戶提示詞和插件候選列表,判斷是否有可用的插件。若需要調用插件,通義千問(目前支持qwen-plus)會生成相應的API請求參數,觸發調用,并結合API返回的數據用自然語言回復答案。
快速開始
要想快速將您的服務接入通義千問模型,成為插件服務,您僅需要如下步驟:
1)部署一個包含自定義插件功能的HTTP服務
2)將上述已部署好的HTTP服務的功能匯總成兩個描述文件,描述文件的要求和規范可參考插件接入指引
元信息描述文件:ai-plugin.json
API描述文件:openapi.yaml
將上述兩個文件編寫完成后,通過郵件提交給工作人員(dashscope@alibabacloud.com)進行錄入確認。
插件開發樣例
插件開發部署
以下以「寢室公約查詢插件」的接入為例,相關代碼實現如下(下載鏈接),接口可實現查詢具體寢室公約第幾條的內容。
#!/usr/env python3
# -*- coding: UTF-8 -*-
from flask import Flask, request, send_file, make_response
import json
import random
app = Flask(__name__)
agreements = [
"寢室公約",
"第一條 寢室生活應建立在和諧共處,高規格、高品味的氛圍之中。",
"第二條 寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。",
"第三條 注意安全用電,杜絕火災隱患。寢室內嚴禁使用明火、違規電器、各種灶具以及其他違規物品,不得存放易爆、易燃物品,私接電源。",
"第四條 提高防范意識,保證財產安全,做好防盜防騙工作。個人貴重物品應當妥善保管,寢室鑰匙不得隨意轉借給他人,寢室無人或休息時應當關好門窗,關好電源,發現可疑人員應當及時報告管理員或安全保衛部門。",
"第五條 嚴禁夜不歸宿。晚上不能按時回寢室的,應當告知生活委員;發現室友未按時歸宿寢室,應當及時聯系,必要時應當報告輔導員;寢室不得留宿未經批準的外來人員。",
"第六條 養成良好的作息習慣,每一位寢室成員都享有休息的權利和承擔保證他人休息權利和義務。",
"第七條 晚寢時間為22:30~次日6:30,在規定的休息時間之外的其他時間寢室成員的休息權利也應得到保障。休息時間可以根據各個寢室的不同情況進行適當的調整。",
"第八條 休息時間應當保持寢室內安靜,嚴禁上網、打牌、賭博等不良活動;關閉收音機、音響,關閉手機或調至震動,嚴禁五分鐘以上的聊天電話;晚寢應當準時熄燈,寢室成員應當停止與作息無關的其他活動,如有緊急事務需要處理的,應征得其他成員同意,并做到不影響寢友。",
"第九條 節假日,以上作息時間在室友協商一致的情況下可以進行適當調整。",
"第十條 寢室成員應共同努力,營造和維護內務整潔干凈、美觀、高文化品味的寢室環境。",
"第十一條 講究公共衛生,不亂扔亂丟垃圾,不隨地吐痰,不在墻壁、門窗、床椅、其它設施上亂刻亂畫,保持寢室地面、天花板、墻壁和設備的清潔以及室內空氣流通、清新。",
"第十二條 講究個人衛生,床鋪每日整理,個人衣服和物品歸類擺放整齊,書籍整理有序。勤洗澡,勤洗曬衣物被褥。避免影響他人衛生。",
"第十三條 寢室實行輪流值日制,負責寢室內公共衛生工作,掃地、拖地板、倒垃圾等,保持良好狀態。",
"第十四條 寢室每周四進行大掃除,由寢室長組織,各成員無特殊情況應當積極參加。",
"第十五條 寢室成員可以在寢室內接待親人、朋友,做到不喧嘩;其他成員應當熱情禮貌。",
"第十六條 客人來訪應當遵守本公約的約定,不得影響他人的休息與日常活動。",
]
def make_json_response(data, status_code=200):
response = make_response(json.dumps(data, ensure_ascii=False), status_code)
response.headers["Content-Type"] = "application/json"
return response
@app.route("/article", methods=['POST'])
def generate_sentences():
"""
查詢第幾條寢室公約具體內容
"""
index = request.get_json()['article_index']
if index > 0 and index < len(agreements):
agreement = agreements[index]
return make_json_response({"article": agreement})
else:
data = {"error": "不存在該編號的條款。"}
response = make_response(json.dumps(data, ensure_ascii=False), 400)
response.headers["Content-Type"] = "application/json"
return response
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9000)
您可以將上述的功能通過阿里云的部署平臺進行部署(可以參考文檔插件部署(使用函數計算平臺)),也可以將服務部署在您自己的服務器上,保證服務是公網訪問可通即可。
以下以部署在公有云平臺為例,通過以下命令測試插件功能,查詢寢室公約第13條。
curl --location 'https://domitorgreement-plugin-example-icohrkdjxy.cn-beijing.fcapp.run/article' \
--header 'Content-Type: application/json' \
--data '{
"article_index": 13
}'
返回的結果如下:
{
"article": "第十三條 寢室實行輪流值日制,負責寢室內公共衛生工作,掃地、拖地板、倒垃圾等,保持良好狀態。"
}
元信息描述文件:ai-plugin.json
將上述服務部署完成后,您需要編寫插件的描述信息,如下給出了「寢室公約查詢插件」的元信息描述文件ai-plugin.json,其中description_for_model是描述插件的具體功能,需要盡可能簡要、準確地描述您實現的插件功能。大模型會根據插件功能的描述,判斷是否需要調用插件。更多的元信息描述文件字段可參考插件接入指引。
{
"schema_version": "v1",
"name_for_human": "寢室公約查詢工具",
"name_for_model": "domitory_agreement_search_1",
"description_for_human": "寢室公約查詢工具,可以根據序號查詢特定條目。",
"description_for_model": "寢室公約查詢工具,可以根據序號查詢特定條目。",
"auth": {
"type": "none"
},
"api":{
"type": "openapi",
"url": "http://127.0.0.1:8081/.well-known/openapi.yaml"
},
"logo_url": "http://127.0.0.1:8081/logo.png",
"contact_email": "support@example.com",
"legal_info_url": "http://www.example.com/legal"
}
API描述文件:openapi.yaml
API描述文件openapi.yaml描述了具體的API輸入輸出參數信息,使用openapi標準協議,更多描述文件的編寫介紹參考插件接入指引。
openapi: 3.0.1
info:
title: 寢室公約查詢工具
description: 寢室公約查詢工具,可以根據序號查詢特定條目。
version: "v2"
servers:
- url: https://domitorgreement-plugin-example-icohrkdjxy.cn-beijing.fcapp.run
paths:
/article:
post:
operationId: get_article
summary: 查詢寢室公約第幾條,用整數數字
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [article_index]
properties:
article_index:
type: integer
description: 寢室公約第幾條,用整數數字
responses:
"200":
description: 查詢成功
content:
application/json:
schema:
type: object
required: [article]
properties:
article:
type: string
description: 寢室公約條款
將上述兩個文件編寫完成后,提交給工作人員(dashscope@alibabacloud.com)進行錄入確認即可。
讓大模型調用插件
前提條件
已開通服務并獲得API-KEY:開通DashScope并創建API-KEY。
工作人員已錄入確認插件
您可以使用Dashscope SDK或HTTP請求實現插件的調用,詳情可見快速開始。下面用一個命令發起HTTP請求,讓大模型調用插件,驗證插件的可用性。
通過一個HTTP請求命令讓大模型調用插件
說明
需要使用您的API-KEY替換示例中的your-dashscope-api-key ,代碼才能正常運行。
在命令行窗口中執行以下命令。
curl -v --location --request POST 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer <your-dashscope-api-key>' \
--header 'X-DashScope-SSE: enable' \
--header 'Content-Type: application/json' \
--header 'X-DashScope-Plugin: {"domitory_agreement_search_1":{}}' \
--data-raw '{
"model": "qwen-plus",
"input": {"messages":[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "寢室公約第三條是什么"
}
]},
"parameters": {
"seed": 42,
"result_format": "message"
}
}'
大模型將返回如下結果。
{
"output": {
"choices": [
{
"messages": [
{
"plugin_call": {
"name": "domitory_agreement_search_1",
"arguments": "{\"article_index\": 3}"
},
"content": "Thought: 我需要調用API來獲取信息。",
"role": "assistant"
},
{
"name": "domitory_agreement_search_1",
"role": "plugin",
"content": "{\"article\": \"第三條 注意安全用電,杜絕火災隱患。寢室內嚴禁使用明火、違規電器、各種灶具以及其他違規物品,不得存放易爆、易燃物品,私接電源。\"}",
"status": {
"name": "Success",
"message": "Success.",
"code": 200
}
},
{
"content": "Thought: 我現在可以作答了。\nFinal Answer: 第三條是注意安全用電,杜絕火災隱患。寢室內嚴禁使用明火、違規電器、各種灶具以及其他違規物品,不得存放易爆、易燃物品,私接電源。",
"role": "assistant"
}
],
"finish_reason": "stop"
}
]
},
"usage": {
"total_tokens": 150,
"input_tokens": 15,
"output_tokens": 135
},
"request_id": "9d909af5-849d-9ede-a284-fa4fed7e77db"
}
可以看到大模型調用了插件,查詢了寢室公約第三條。