自定义LLM插件

2023-12-01  本文已影响0人  梅西爱骑车

可以通过自定义插件的方式让LLM调用自有或者第三方API接口实现真正的增强型智能助手,这是大语言模型构建强大生态圈的重要技术手段。

比如:让LLM扮演我的私人助理,帮我订票,因我开发插件的描述信息中包含订票的关键字,当进行订票指令时LLM会自动路由到我的插件,提取出输入的用户名和日期,并组装成json格式的数据作为订票API接口的入数,并方式请求。接口代码核心部分如下图。

Python编写的接口

一切都是那么智能!!这如何实现?

首先,编写我的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的全过程。
上一篇下一篇

猜你喜欢

热点阅读