插件
通义千问插件可以让通义千问大模型连接到第三方应用,让通义千问获取到更多信息,执行多种多样的操作。插件可以让通义千问拥有以下能力:
获取实时信息:获取新闻、天气、股价等信息,查询机票、酒店、餐厅等价格。
知识库搜索:进行知识库信息检索,总结。
执行任务:预订酒店、餐厅、航班,调用其他服务生成图片、音频、视频等。
通义千问是一个智能的插件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"
}
可以看到大模型调用了插件,查询了寝室公约第三条。