One能聊天介绍:基于ChatGPT实现的微信小程序,适配H5和WEB端。包含前后端,支持打字效果输出流式输出,支持AI聊天次数限制,支持分享增加次数等功能
One能聊天开源地址:https://github.com/oldinaction/ChatGPT-MP
One能聊天演示环境:可关注【阿壹族】公众号,并回复【One能聊天】查看
下文将介绍在One能聊天项目中接入百度千帆大模型 — 文心一言
开通服务
首先介绍一下百度AI相关产品矩阵
如下图百度力推的千帆大模型超级工厂,他包含
- 千帆大模型平台:其中大模型开发就是自己训练一个大模型,这种比较有技术含量,少部分企业才会用到;大模型调用则包含百度开放的文心大模型(即文心一言,ERNIE 4.0和ERNIE 3.5为模型版本分类,对标ChatGPT),还包括一些第三方模型供调用
- 千帆AppBuilder:是提供开发者基于文心大模型可以快速开发出一个AI应用,创建的应用可以集成一些官方的组件(如天气查询、快递查询等),也可以集成自定义组件(通过画布拖拽,自行编排组件逻辑,如调用企业内部API或调用大模型接口),另外还可导入知识库供大模型使用(支持txt/pdf/doc/url等模式)。通过AppBuilder创建的应用官方提供一个访问链接供普通用户使用(界面是通用的AI聊天界面),开发者也可以通过SDK调用创建的AI应用从而集成到实际的业务系统中。这部分会在后续文章中做详细说明
- 千帆AI原生应用商店:就是百度自己开发的AI应用。如超级助理,下载浏览器插件即可使用,支持划词翻译、网页解读、OCR识别等功能
本文主要对文心大模型ERNIE的API调用做详细说明
创建应用:进入 https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application 创建,可勾选启用的模型,如ERNIE-3.5-8K
、ERNIE-4.0-8K
、Yi-34B-Chat
(免费)等
部分模型计费说明如下
单次API调用案例
@RequestMapping("/baidu/ernieBotTurbo")
public Result baiduErnieBotTurbo(@RequestBody Map<String, Object> params) {
BaiduConfig baiduConfig = SpringU.getBean(BaiduConfig.class);
BaiduService baiduService = new BaiduService(baiduConfig.getApiKey(), baiduConfig.getApiSecret());
BaiduChatMessage chatMessage = BaiduChatMessage.builder()
.content((String) params.get("content"))
.role("user")
.build();
ErnieBotTurboStreamParam postParam = ErnieBotTurboStreamParam.builder()
.user_id(StpUtil.getLoginIdAsString())
.messages(MiscU.Instance.toList(chatMessage))
.build();
ErnieBotTurboResponse ernieBotTurboResponse = baiduService.ernieBotTurbo(postParam);
return Result.success(ernieBotTurboResponse);
}
// 该方法是同步请求API,会等大模型将数据完全生成之后,返回响应结果,可能需要等待较长时间,视生成文本长度而定
public ErnieBotTurboResponse ernieBotTurbo(ErnieBotTurboStreamParam param) {
if (param == null) {
log.error("参数异常:param不能为空");
throw new RuntimeException("参数异常:param不能为空");
}
if (param.isStream()) {
param.setStream(false);
}
String fullChatUrl = SpringU.getBean(BaiduConfig.class).getFullChatUrl();
String post = HttpUtil.post(fullChatUrl + BaiduConfig.getToken(appKey, secretKey), JSONUtil.toJsonStr(param));
return JSONUtil.toBean(post, ErnieBotTurboResponse.class);
}
public class BaiduConfig {
@Value("${aezo-chat-gpt.baidu.api-key:}")
private String apiKey;
@Value("${aezo-chat-gpt.baidu.api-secret:}")
private String apiSecret;
@Value("${aezo-chat-gpt.baidu.chat-url:yi_34b_chat}")
private String chatUrl;
/**
* Yi-34B-Chat 免费使用 https://cloud.baidu.com/doc/WENXINWORKSHOP/s/vlpteyv3c
* 模型对应路径如,更多参考官方文档:
* Yi-34B-Chat: yi_34b_chat
* ERNIE-Lite-8K-0922: eb-instant
* ERNIE-Speed-8K: ernie_speed
*/
private static final String CHAT_URL_TPL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/%s?access_token=";
public static String getToken(String appKey, String secretKey) {
String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + appKey