基于百度千帆“插件编排”开发自定义插件
大模型开发/技术交流
- LLM
- 插件应用
- API
1月9日1370看过
可以通过自定义插件的方式让大语言模型调用自有或者第三方API接口实现真正的增强型智能助手
,这是大语言模型构建强大生态圈的重要技术手段。
比如:让LLM扮演我的私人助理,帮我订票,因自定义插件的描述信息中包含
订票
的关键字,ERNIE-Bot接到“订某某票”指令时会自动路由到自定义插件,提取出输入的用户名和日期,并组装成json格式的数据作为订票API接口的入参,然后自动向接口提交请求,并返回接口的返回信息到对话页面。接口的入口如下图。
一切都是那么智能!!这如何实现?
首先,编写我的API接口
后端订票微服务,其暴露订票的URL给大语言模型,如果没有此人当天的订票信息则执行订票,并告知用户订票成功;如果已经订过票,提示已经订过。接口采用Python Flask开发,数据库使用MySQL。文件名为:bookTicket.py。
# -*- coding: utf-8 -*-from flask import Flask, request, jsonifyimport mysql.connectorfrom gevent import pywsgiapp = Flask(__name__)# 连接MySQL数据库def connect_db():conn = mysql.connector.connect(host="localhost",user="plugins_user",password="9aMtBOlnB$AZ*********",database="pluginsdb")return conn# 查询某日某人的机票信息def query_flight_info(date, name):conn = connect_db()cursor = conn.cursor()query = "SELECT * FROM flights WHERE date = %s AND name = %s"cursor.execute(query, (date, name))result = cursor.fetchall()cursor.close()conn.close()return result# 预订某日某人的机票def book_flight(date, name):conn = connect_db()cursor = conn.cursor()query = "INSERT INTO flights (date, name) VALUES (%s, %s)"cursor.execute(query, (date, name))conn.commit()cursor.close()conn.close()return "预订成功"# 定义API路由和处理函数@app.route('/book_flight', methods=['GET'])def book_flight_api():print("ok 进入方法")data = request.jsondate = data['date']name = data['name']print(name)result = query_flight_info(date, name)if result:return jsonify({"message": "该日期已预订,请选择其他日期"}), 400else:book_flight(date, name)return jsonify({"message": "预订成功"}), 200server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)server.serve_forever()
代码发布到
有域名
(插件配置时需要域名)的自有服务器上,例如上传到目录 /www/wwwroot/www.guo.com/py
,执行python bookTicket.py
启动微服务,并在安全组开放其5000端口供互联网访问。如果在服务器的shell窗口curl localhost的接口通,若换成公网IP不通,有可能也需要开放你服务器防火墙的5000端口。 其次,建数据库(名称pluginsdb)、表
SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for flights ticket-- ----------------------------DROP TABLE IF EXISTS `flights`;CREATE TABLE `flights` (`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`date` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;
配置文件
根据千帆自定义插件的对接要求,编写2个配置文件,格式必须正确,内容如下,需上传服务器可被公网域名访问(在千帆平台需配置有域名的文件URL)。
-
ai-plugin.json内容如下:
{"schema_version": "v1","name_for_human": "我的智能订票工具","name_for_model": "bookTicket","description": "通过AI实现给某个人订某个日期的机票","auth": {"type": "none"},"api": {"type": "openapi","url": "http://www.guoxiuzhi.com/py/openapi.yaml"},"logo_url": "http://www.guoxiuzhi.com/py/example-icon.png","contact_email": "example@guo.com","legal_info_url": "http://www.guoxiuzhi.com/legal"}
-
openapi.yaml内容如下:
openapi: 3.0.1info:title: 智能订票description: 通过AI实现给某个人订某个日期的机票version: 'v1'servers:- url: http://www.guoxiuzhi.com:5000paths:/book_flight:get:operationId: exampleOperationsummary: 通过人名和日期判断是否可以订票,如果可以就向数据库插入一条订票成功的记录。requestBody:required: truecontent:application/json:schema:$ref: '#/components/schemas/exampleRequest'responses:"200":description: OKcontent:application/json:schema:$ref: '#/components/schemas/exampleResponse'"503":description: "one or more services are unavailable"components:schemas:exampleRequest:type: objectrequired:- name- dateproperties:name:type: stringdate:type: stringexampleResponse:type: string
新建插件
在千帆的“插件编排”菜单自定义插件,操作步骤:点击插件应用服务的“配置”链接,然后点击“+”,再点击弹框左上角的“自定义插件”按钮。
在自定义插件页面,分别填入上传到服务器上的ai-plugin.json文件的url,点击验证按钮,如果验证不通过请检查相关文件书写和配置是否正确。
下面填写请求样例,让大语言模型知道提取问题中的什么信息以什么格式传递给接口,这是大语言模型与API交互的核心、关键。
样例表述:从问题中抽取用户名和日期,形成json。
请求样例:
{"name": "梅西爱骑车","date": "2023-12-01"}
如下图开启插件。
发布自己开发的插件。可以看到在插件列表显示了自定义插件。
测试调用我的订票API接口,输入“请为郭秀志预订2023-12-02的票”,返回“订票成功”。证明LLM已经智能判断出“订票”,需要调用我的插件和API接口去订票,不是单纯的跟我进行对话。
再试一次。毕竟是人工智能,这次多回复了一句贴心的话:“请注意查收相关预订信息”,大语言模型聊天总是给人官宣可信赖的感觉,跟真的订票成功了似的!
最后查询我的数据库,验证数据已经落库,全流程已打通。
至此,完成了自有插件集成到千帆“插件编排”的全过程。
评论