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

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

1.插件介绍

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

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

2.插件开发权限申请

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

直接申请即可

3.快速开始

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

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

4.具体实现

目录结构如下

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

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

cmd 复制代码
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 启动插件

python 复制代码
#!/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("/logo.png")
async def plugin_logo():
    """
        注册用的:返回插件的logo,要求48 x 48大小的png文件.
        注意:API路由是固定的,事先约定的。
    """
    return send_file('logo.png', mimetype='image/png')


@app.route("/.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("/.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
json 复制代码
{
    "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不建议使用 (建议)
yaml 复制代码
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.效果

相关推荐
xiandong201 小时前
240929-CGAN条件生成对抗网络
图像处理·人工智能·深度学习·神经网络·生成对抗网络·计算机视觉
innutritious2 小时前
车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27
人工智能·深度学习·计算机视觉
橙子小哥的代码世界2 小时前
【深度学习】05-RNN循环神经网络-02- RNN循环神经网络的发展历史与演化趋势/LSTM/GRU/Transformer
人工智能·pytorch·rnn·深度学习·神经网络·lstm·transformer
985小水博一枚呀4 小时前
【深度学习基础模型】神经图灵机(Neural Turing Machines, NTM)详细理解并附实现代码。
人工智能·python·rnn·深度学习·lstm·ntm
SEU-WYL5 小时前
基于深度学习的任务序列中的快速适应
人工智能·深度学习
OCR_wintone4215 小时前
中安未来 OCR—— 开启高效驾驶证识别新时代
人工智能·汽车·ocr
matlabgoodboy5 小时前
“图像识别技术:重塑生活与工作的未来”
大数据·人工智能·生活
最近好楠啊6 小时前
Pytorch实现RNN实验
人工智能·pytorch·rnn
OCR_wintone4216 小时前
中安未来 OCR—— 开启文字识别新时代
人工智能·深度学习·ocr
学步_技术6 小时前
自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器
人工智能·机器学习·自动驾驶·线控系统·制动系统