我们都知道文心一言很厉害,那怎么对接,开发插件,更好的来运用呢?下面给我们打个样!
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("/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 |
{
"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.作用