美文网首页
自定义LLM插件

自定义LLM插件

作者: 梅西爱骑车 | 来源:发表于2023-12-01 00:45 被阅读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的全过程。

    相关文章

      网友评论

          本文标题:自定义LLM插件

          本文链接:https://www.haomeiwen.com/subject/mvwqgdtx.html