由于我们的模型还没有微调好,为了方便后续开发,我先接入百度千帆API进行测试。
创建千帆应用
要使用千帆大模型,首先要注册账号并创建应用;创建应用的地址是:百度智能云千帆大模型平台
创建好后如下所示:
其中的API Key和Secret Key两项是访问应用的凭证,创建新对话时需要用到。
接入API
我在测试中使用了ERNIE-3.5-8K模型,使用方法在:ERNIE-3.5-8K - 千帆大模型平台 | 百度智能云文档
可以看到需要鉴权才能访问API。
因为flutter使用的语言是dart,而百度并没有提供dart的库文件,因此需要手动访问,因此我选择了实现方便的access_token方式鉴权。
获取access_token这一步属于初始化的部分,应该放在上一周设计的接口的init部分,其代码如下:
@override
Future init() async{
dio.options.contentType="application/json";
var response=await dio.post("https://aip.baidubce.com/oauth/2.0/token",
queryParameters: {
"grant_type":"client_credentials",
"client_id":"这是API Key",
"client_secret":"这是Secret Key"
}
);
access_token=response.data["access_token"];
message=[];
}
理论上获取access_token不应该放在前端进行,因为用户可能通过解包获取到我的Key,但是我这里只是作为测试用,因此使用了这种不严谨的危险写法。
对话时根据文档上的要求传入对应参数,然后获取到回答返回给用户:
@override
Future<String> getMessage(String msg) async{
message.add(_Message("user", msg));
log(jsonEncode(message));
var response=await dio.post(
"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-lite-8k",
queryParameters: {
"access_token":access_token
},
data:{
"messages":message
}
);
message.add(_Message("assistant", response.data["result"]));
return response.data["result"];
}
由于上周将接口抽象出来,因此不需要再修改其他地方的代码,只需要完成接口的实现就行了。
最终效果如下: