【文心一言插件开发】股票信息查询插件开发教程

释放双眼,带上耳机,听听看~!
本文是关于文心一言插件开发的股票信息查询插件开发教程,包括插件介绍、开发权限申请、快速开始、具体实现和效果展示。

大家都知道文心一言很厉害,那怎么对接,开发插件,更好的来使用呢?下面给大家打个样!

1.插件介绍

插件将“文心一言”AI能力与外部应用相结合,既能丰富大模型的能力和应用场景,也能利用大模型的生成能力完成此前无法实现的任务。
主要分3类,具体如下:

  • 信息增强
  • 交互增强
  • 服务增强

2.插件开发权限申请

申请地址:yiyan.baidu.com/developer

【文心一言插件开发】股票信息查询插件开发教程

直接申请即可

3.快速开始

  • 构思插件 manifest 描述文件(ai-plugin.json,必选)
  • 定义插件服务描述文件(openapi.yaml,必选)
  • 启动插件服务并且对齐描述文件(openapi服务,必选)
  • 上传配置文件并调试(接入流程,必选)

此外需要提供服务的独立IP服务器一台。

4.具体实现

目录结构如下

│  demo_server.py
│  logo.png
│  readme.md
│  requirements.txt
│  test.py
└─.well-known
        ai-plugin.json
        openapi.yaml

可以直接从demo上更改(本地调试为例,提供一套示例demo文件 [百度网盘下载链接],提取码: vdp1):

yiyan_plugin_demo/           # 插件demo注册的根目录
|—.well-known
  |— ai-plugin.json         #插件主描述文件
  |— openapi.yaml          #插件API服务的标准描述文件
|— logo.png               #插件的图标文件
|— demo_server.py          #插件注册服务,可以启动到本地
|— requirements.txt         #启动插件注册服务所依赖的库,要求python >= 3.7
|— readme.md              # 说明文件

4.1 获取股票信息

主要是实现:

  • 股票信息获取
  • 传回到一言
  • 此外需要申请免费的股票信息获取key

demo_server.py 启动插件


#!/usr/env python3
# -*- coding: UTF-8 -*-

import requests
from flask import Flask, request, send_file, make_response
from flask_cors import CORS
import json

app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "https://yiyan.baidu.com"}})

API_KEY = "自己申请***********"
BASE_URL = "https://www.alphavantage.co/query"


def make_json_response(data, status_code=200):
    response = make_response(json.dumps(data), status_code)
    response.headers["Content-Type"] = "application/json"
    return response


@app.route('/stock', methods=['GET'])
def get_stock_data():
    symbol = request.args.get('symbol')
    params = {"function": "GLOBAL_QUOTE", "symbol": symbol, "apikey": API_KEY}

    response = requests.get(BASE_URL, params=params)
    print(response.json())
    return response.json()


@app.route("https://b2.7b2.com/logo.png")
async def plugin_logo():
    """
        注册用的:返回插件的logo,要求48 x 48大小的png文件.
        注意:API路由是固定的,事先约定的。
    """
    return send_file('logo.png', mimetype='image/png')


@app.route("https://b2.7b2.com/.well-known/ai-plugin.json")
async def plugin_manifest():
    """
        注册用的:返回插件的描述文件,描述了插件是什么等信息。
        注意:API路由是固定的,事先约定的。
    """
    host = request.host_url
    with open(".well-known/ai-plugin.json", encoding="utf-8") as f:
        text = f.read().replace("PLUGIN_HOST", host)
        return text, 200, {"Content-Type": "application/json"}


@app.route("https://b2.7b2.com/.well-known/openapi.yaml")
async def openapi_spec():
    """
        注册用的:返回插件所依赖的插件服务的API接口描述,参照openapi规范编写。
        注意:API路由是固定的,事先约定的。
    """
    with open(".well-known/openapi.yaml", encoding="utf-8") as f:
        text = f.read()
        return text, 200, {"Content-Type": "text/yaml"}


@app.route("/")
def index():
    return "Hello world!  Your web application is working!"


if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1', port=8081)

4.2 ai-plugin.json接口配置

  • 构思插件 manifest 描述文件(ai-plugin.json,必选)
    一个插件需要一份ai-plugin.json命名的manifest文件,这个文件需要描述插件的基本信息。
种类 类型 描述/选项 是否必填
schema_version String 插件的版本号,用于开发者标记和使用
name_for_model String 模型将用于定位插件的名称(不允许使用空格,只能使用字母和数字)此字段将作为插件的唯一标识。描述请带有一定的语义,不要超过20个字符。
name_for_human String 此字段将面向用户查看,是插件对外公开的名字。不超过20个字符。建议编写时按照如下要点顺序: “插件能力->适用场景->使用条件”
description_for_model String 面向模型的自然语言描述,请描述插件的核心能力、使用场景等,将用于模型参考解析是否触发插件,建议不超过200个字符。
description_for_human String 面向用户介绍插件,建议介绍插件的主要能力,相关限制等。不超过100个字符,前端可完整显示前40 个字符,超出的字符将在用户 hover 时展示。
auth ManifestAuth 用户鉴权相关字段
api Object API规范
logo_url String 用于获取插件标识的URL。建议大小:512 x 512。支持透明背景。必须是图像,不允许使用GIF。
contact_email String 安全/审核、支持和停用的电子邮件联系方式
legal_info_url String 用户查看插件信息的重定向URL
HttpAuthorizationType HttpAuthorizationType “bearer”或”basic”。默认basic
ManifestAuthType ManifestAuthType “none”、”user_http”、”service_http”或”oauth”
interface BaseManifestAuth BaseManifestAuth 类型:ManifestAuthType;说明:字符串;
ManifestNoAuth ManifestNoAuth 不需要身份验证:BaseManifestAuth和{ type: ‘none’ }
ManifestAuth ManifestAuth ManifestNoAuth、ManifestServiceHttpAuth、ManifestUserHttpAuth、ManifestOAuthAuth
examples object {“url”:”www.baidu.com”} 文件url
{
    "schema_version": "v1",
    "name_for_human": "股票报价",
    "name_for_model": "股票报价",
    "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"
}

4.3 openapi.yaml接口配置

APIs定义描述文件需要满足OpenAPI标准(详见swagger.io/specificati…

文心一言只能获取到您在API描述中明确定义的内容。这意味着您只需要向模型暴露插件能力实现必要的API端点,无需暴露所有API端点。

一个基础的OpenAPI格式的API描述如下所示:

事项 规范说明
yaml 文件总长度 YAML 文件总长度,不可超过 1000个字符 (不包含空格)
paths **request:数量:定义 1-2 个接口 (建议)api_id 不可超过 20 个字符 接口描述 summary 和 description在 description 字段中描述详细的接口介绍,长度不超过 150 个字符 (强制) summary 字段可抽象接口能力,长度不超过 50 个字符 (强制)存在 description,则优先使用 descriptionresponse:**body中不要返回状态码、错误码 (建议)body仅给和插件结果相关的信息 (比如结果文本) (建议)错误码用http code表示 (建议)
components 参数名称:最多 20 个字符,使用 string 类型 (强制)参数描述:最多 50 个字符,使用 string 类型 (强制)参数数量:参数不超过 5 个 (建议)参数类型:建议使用string, number,boolean;array和包含复杂嵌套的object不建议使用 (建议)
openapi: 3.0.1
info:
    title: 股票报价
    description: 获取给定股票的价格和数量信息。
    version: "v1"
servers:
    - url:  http://你自己的ip地址:8081

paths:
    /stock:
        get:
            operationId: getStockData
            summary: 检索给定股票符号的价格和交易量信息。
            parameters:
                - in: query
                  name: symbol
                  schema:
                      type: string
                  description: 要获得报价的股票的符号。例如,股票符号MSFT代表微软公司。
            responses:
                "200":
                    description: OK

5.效果

【文心一言插件开发】股票信息查询插件开发教程

【文心一言插件开发】股票信息查询插件开发教程

【文心一言插件开发】股票信息查询插件开发教程

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

阿里通义千问 vs ChatGPT:五个问题看出差距

2023-11-18 21:44:14

AI教程

ChatGPT:未来智能语言模型,解放大脑,你还不来?

2023-11-18 21:54:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索