一、先看效果
目前程序员盒子Web应该已经基于OpenAI开放能力实现了一个用起来还比较流畅的AI智能对话机器人。
访问程序员盒子首页: 程序员盒子 - 助力编程学习提效
Ctrl + Enter 快捷键可唤醒AI助手:
我问:程序员盒子网站
AI回答:程序员盒子网站是一家专注于提供程序员需要的资源的网站。它提供了各种关于编程的资源,以及讨论、分享等社区功能,使用户可以更快更好的学习开发技能。程序员盒子网站收集了大量与编程相关的资料和内容,这些资料包括但不限于书籍、教程、技术文章、编程语言等。它还提供了一个交流平台,让用户可以相互分享经验,讨论技术问题,提出建议和解决问题。
如图对话所示,当我问到程序员盒子网站的时候,AI的回答却是对网站内容进行的一定分析之后给出了回复,这个回复内容在网上找不到的(也证明分析能力还是很强的,确实可以称为我的一个AI助手!)
那我们下来看下这样的对话能力我们改如何实现,即如何接入OpenAi的对话能力,自己实现一个ChatGPT的对话功能。
二、申请Token
大家自己如果有了解过的也知道OpenAi在访问账号、网络等对国内有限制,盒子对此作了一层简单的封装,让我们的对话能力接入变得非常简单。首先,在对话之前你需要先申请OpenAi接口请求Token,这个由程序员盒子cu.api接口平台提供技术支持:
接口文档地址: OpenAi Token国内获取API接口
盒子提供了后端请求的API与支持前端跨域请求的Jsonp API两个接口:
Java调用示例:
// 创建自己的token获取API(其中AK、SK在程序员盒子个人中心接口调用菜单下可以获取)String tokenApi = String.format("https://www.coderutil.com/api/openai/getToken?access-key=%s&secret-key=%s", 盒子为你分配的AK, 盒子为你分配的SK);// 请求获取tokenString token = HttpClientUtil.get(tokenApi, String.class);
三、请求OpenAi 对话API实现对话能力
这里说前端如何实现,主要关心对话数据能力:
示例代码:
/*** 聊天对话*/
public Object chat(String input) {// 请求程序员盒子获取TokenString token = getTokenFromCoderUtilApi(ak, sk);// 请求头参数Map<String, String> headers = this.buildHeaders(token);// 对话模型、输入 bodyMap<String, Object> param = this.buildChatParam(input);// openAi 对话接口String completionsApi = "https://api.openai.com/v1/completions";try {// 请求并返回对话结果return HttpClientUtil.post(completionsApi, param, headers, Object.class);} catch (URISyntaxException e) {throw new RuntimeException(e);}
}/*** 构造请求头*/
private Map<String, String> buildHeaders(String token) {Map<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/json");headers.put("Authorization", "Bearer ".concat(token));return headers;
}/*** 构造请求参数*/
private Map<String, Object> buildChatParam(String input) {Map<String, Object> param = new HashMap<>();param.put("model", "text-davinci-003"); // 对话模型param.put("prompt", input+"\n");param.put("max_tokens", 3000);param.put("temperature", 0.8);return param;
}
Done!!
程序员盒子接入百度文心大模型文生图能力_程序员盒子技术团队的博客-CSDN博客