前言
2023年8月31日,文心一言 率先向全社會(huì)全面開(kāi)放。
隨之而來(lái)的便是向開(kāi)發(fā)者開(kāi)放 插件 生態(tài)。
插件
插件是什么
如果說(shuō)文心一言是一個(gè)智能中樞大腦,插件就是文心一言的耳、目、手。插件將“文心一言”AI能力與外部應(yīng)用相結(jié)合,既能豐富大模型的能力和應(yīng)用場(chǎng)景,也能利用大模型的生成能力完成此前無(wú)法實(shí)現(xiàn)的任務(wù),比如發(fā)郵件等。
工作原理
- 插件注冊(cè):開(kāi)發(fā)者將插件的 manifest 文件注冊(cè)到一言插件庫(kù)中,校驗(yàn)通過(guò)后一言即可使用插件處理用戶(hù) query 。
- 插件觸發(fā):解析調(diào)度模塊將使用生成的API,來(lái)調(diào)用插件服務(wù)。插件服務(wù)完成處理后,返回 json 數(shù)據(jù)由一言匯總結(jié)果進(jìn)行返回。
- 插件解析:一言插件系統(tǒng)的觸發(fā)調(diào)度模塊,將識(shí)別用戶(hù) query,并將根據(jù) manifest 文件中的插件API接口和參數(shù)的自然語(yǔ)言描述來(lái)選擇使用哪個(gè)插件,以及生成調(diào)用插件的 API。
例如用戶(hù)在平臺(tái)上選擇天氣插件,
輸入
:“今天北京的天氣怎么樣?”。 模型首先會(huì)根據(jù)用戶(hù)意圖調(diào)用天氣插件
,并且解析
query中時(shí)間(今天)和地點(diǎn)(北京)信息,然后以json 結(jié)構(gòu)輸入
開(kāi)發(fā)者提供的天氣API接口中,獲得接口返回的天氣信息,經(jīng)過(guò)大模型進(jìn)行語(yǔ)言潤(rùn)色
后,生成面向用戶(hù)的回答。
申請(qǐng)開(kāi)發(fā)權(quán)限
申請(qǐng)開(kāi)發(fā)權(quán)限:https://yiyan.baidu.com/developer
等待申請(qǐng)通過(guò)的郵件就可以開(kāi)始了
開(kāi)始
第一步:安裝python
python下載鏈接:https://www.python.org/downloads/
問(wèn)題1:如果在cmd中輸入python會(huì)打開(kāi)應(yīng)用商店,就在用戶(hù)變量的 PATH 中把WindowsApps移到python下面
問(wèn)題2:如果cmd中報(bào)“pip指令找不到”,那就要在用戶(hù)變量的 PATH 中添加C:\Users\25218\AppData\Local\Programs\Python\Python311\Scripts
第二步:搭建項(xiàng)目
單詞本的項(xiàng)目:https://pan.baidu.com/s/1K7wjPMPMprxtosnF5D-3tQ?pwd=q7xa
接入一個(gè)插件核心流程如下所示:
- 構(gòu)思插件 manifest 描述文件(ai-plugin.json,必選)
- 定義插件服務(wù)描述文件(openapi.yaml,必選)
- 開(kāi)發(fā)自己的plugin-server(openapi服務(wù),必選)
manifest 描述文件:ai-plugin.json
{
"schema_version":"v1",(插件的版本號(hào),用于開(kāi)發(fā)者標(biāo)記和使用)
"name_for_human":"天氣預(yù)報(bào)_dwh",(此字段將面向用戶(hù)查看,平臺(tái)內(nèi)全局唯一標(biāo)識(shí),后綴數(shù)字建議長(zhǎng)且隨機(jī),更不容易重名沖突)
"name_for_model":"weather_prediction_dwh",(模型將用于定位插件的名稱(chēng),建議是有語(yǔ)義信息的英文字符串)
"description_for_human":"個(gè)性化查詢(xún)不同地區(qū)的天氣",(面向用戶(hù)介紹插件,建議介紹插件的主要能力,相關(guān)限制等。不超過(guò)100個(gè)字符,前端可完整顯示前40 個(gè)字符,超出的字符將在用戶(hù) hover 時(shí)展示。)
"description_for_model":"幫助用戶(hù)查詢(xún)不同地區(qū)的天氣",(面向模型的自然語(yǔ)言描述,請(qǐng)描述插件的核心能力、使用場(chǎng)景等,將用于模型參考解析是否觸發(fā)插件,建議不超過(guò)200個(gè)字符。)
"auth": (用戶(hù)鑒權(quán)相關(guān)字段)
{
"type": "none"
},
"api":(API規(guī)范)
{
"type": "openapi",
"url": "http://127.0.0.1:8081/.well-known/openapi.yaml"
},
"logo_url": "http://127.0.0.1:8081/logo.png",(用于獲取插件標(biāo)識(shí)的URL)
"contact_email": "support@example.com",(安全/審核、支持和停用的電子郵件聯(lián)系方式)
"legal_info_url": "http://www.example.com/legal"(用戶(hù)查看插件信息的重定向URL)
}
插件服務(wù)描述文件:openapi.yaml
openapi: 3.0.1
info:
title: 天氣預(yù)報(bào)
description: 個(gè)性化查詢(xún)不同地區(qū)的天氣。
version: "v1"
servers:
- url: http://127.0.0.1:8081
paths:
/get_weather:
post:
operationId: getWeather
summary: 展示天氣
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/getWeather"
responses:
"200":
description: 天氣展示完成
content:
application/json:
schema:
$ref: "#/components/schemas/weatherResponse"
components:
schemas:
getWeather:
type: object
required: [city]
properties:
city:
type: string
description: 城市
weatherResponse:
type: object
required: [weather]
properties:
weather:
type: object
description: 天氣內(nèi)容
開(kāi)發(fā)自己的plugin-server
Python Web框架里比較有名當(dāng)屬Django,F(xiàn)lask相對(duì)于Django而言是輕量級(jí)的Web框架。
#!/usr/env python3
# -*- coding: UTF-8 -*-
from flask import Flask, request, send_file, make_response
from flask_cors import CORS
import json
import random
import requests
#讀取key
file = open('.env')
KEY=file.readline()[4:]
print(KEY)
file.readline()
app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "https://yiyan.baidu.com"}})
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("/logo.png")
async def plugin_logo():
"""
注冊(cè)用的:返回插件的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():
"""
注冊(cè)用的:返回插件的描述文件,描述了插件是什么等信息。
注意: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():
"""
注冊(cè)用的:返回插件所依賴(lài)的插件服務(wù)的API接口描述,參照openapi規(guī)范編寫(xiě)。
注意:API路由是固定的,事先約定的。
"""
with open(".well-known/openapi.yaml", encoding="utf-8") as f:
text = f.read()
return text, 200, {"Content-Type": "text/yaml"}
@app.route("/get_weather", methods=["POST"])
async def get_weather():
"""
查詢(xún)天氣
"""
city = request.get_json().get('city')
r=requests.get("第三方接口?key="+KEY+"&city="+city)
return make_json_response(json.loads(r.text))
@app.route('/')
def index():
return 'welcome to my webpage!'
if __name__ == '__main__':
app.run(debug=True, host='127.0.0.1', port=8081)
第三步:上傳插件
可以通過(guò)輸入http:127.0.0.1:8081或者項(xiàng)目壓縮包(rar、zip)提交。
SDK
SDK文檔:https://github.com/PaddlePaddle/ERNIE-Bot-SDK
這個(gè)功能需要進(jìn)行認(rèn)證鑒權(quán),付費(fèi)服務(wù),支持的模型平臺(tái)有以下三個(gè)。
例子:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-708918.html
相關(guān)鏈接
百度文心一言插件文檔:https://yiyan.baidu.com/developer
百度文心一言SDK:https://github.com/PaddlePaddle/ERNIE-Bot-SDK
高德天氣查詢(xún)文檔:https://lbs.amap.com/api/webservice/guide/api/weatherinfo/#t1
高德開(kāi)放平臺(tái):https://lbs.amap.com/
單詞本demo:https://pan.baidu.com/share/init?surl=K7wjPMPMprxtosnF5D-3tQ&pwd=q7xa文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-708918.html
到了這里,關(guān)于文心一言插件開(kāi)發(fā)全流程,ERNIE-Bot-SDK可以調(diào)用文心一言的能力的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!