自定义LLM插件
2023-12-01 本文已影响0人
梅西爱骑车
可以通过自定义插件的方式让LLM调用自有或者第三方API接口实现真正的增强型
智能助手
,这是大语言模型构建强大生态圈的重要技术手段。
比如:让LLM扮演我的私人助理,帮我订票,因我开发插件的描述信息中包含订票
的关键字,当进行订票指令时LLM会自动路由到我的插件,提取出输入的用户名和日期,并组装成json格式的数据作为订票API接口的入数,并方式请求。接口代码核心部分如下图。
一切都是那么智能!!这如何实现?
首先,编写我的API接口
编写我的后端订票微服务,其暴露订票的URL给大语言模型,如果没有相关订票信息则执行订票,并告知用户订票成功;如果已经订过票,提示已经订过。
# -*- coding: utf-8 -*-
from flask import Flask, request, jsonify
import mysql.connector
from gevent import pywsgi
app = 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.json
date = data['date']
name = data['name']
print(name)
result = query_flight_info(date, name)
if result:
return jsonify({"message": "该日期已预订,请选择其他日期"}), 400
else:
book_flight(date, name)
return jsonify({"message": "预订成功"}), 200
server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
server.serve_forever()
代码发布到有域名
的服务器上,启动微服务,并开放其5000端口供互联网访问。如果服务localhost可以用公网IP不通,有可能也需要开放你服务器的防火墙5000端口。
其次,建数据库、表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for flights
-- ----------------------------
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;
配置文件
根据LLM的对接要求,编写配置2个配置文件,格式必须正确,内容如下,需上传服务器可被公网的LLM访问。
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.1
info:
title: 智能订票
description: 通过AI实现给某个人订某个日期的机票
version: 'v1'
servers:
- url: http://www.guoxiuzhi.com:5000
paths:
/book_flight:
get:
operationId: exampleOperation
summary: 通过人名和日期判断是否可以订票,如果可以就向数据库插入一条订票成功的记录。
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/exampleRequest'
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/exampleResponse'
"503":
description: "one or more services are unavailable"
components:
schemas:
exampleRequest:
type: object
required:
- name
- date
properties:
name:
type: string
date:
type: string
exampleResponse:
type: string
新建插件
分别填入服务器上的地址和2个文件名,点击验证按钮,如果验证不通过请检查相关文件书写和配置是否正确。发布插件并测试调用私有订票API服务,输入如下信息返回“订票成功”。证明LLM已经智能判断出需要调用我的API接口去订票,不是单纯的跟我进行单轮对话。
再试一次。毕竟是人工智能,这次多回复了一句话“请注意查收相关预订信息”,LLM画风格很一本正经,总是给人官宣可信赖的感觉,跟真的似的!
最后查询我的数据库,发现数据已经落库,全流程已打通。
数据库信息
至此,完成了自有插件集成到LLM的全过程。