快捷搜索: 王者荣耀 脱发

Web应用如何集成OpenAI开放能力实现ChatGPT的对话功能





一、先看效果

目前程序员盒子Web应该已经基于OpenAI开放能力实现了一个用起来还比较流畅的AI智能对话机器人。

访问程序员盒子首页: 

Ctrl + Enter 快捷键可唤醒AI助手:



我问:程序员盒子网站

AI回答:程序员盒子网站是一家专注于提供程序员需要的资源的网站。它提供了各种关于编程的资源,以及讨论、分享等社区功能,使用户可以更快更好的学习开发技能。程序员盒子网站收集了大量与编程相关的资料和内容,这些资料包括但不限于书籍、教程、技术文章、编程语言等。它还提供了一个交流平台,让用户可以相互分享经验,讨论技术问题,提出建议和解决问题。

如图对话所示,当我问到程序员盒子网站的时候,AI的回答却是对网站内容进行的一定分析之后给出了回复,这个回复内容在网上找不到的(也证明分析能力还是很强的,确实可以称为我的一个AI助手!)

那我们下来看下这样的对话能力我们改如何实现,即如何接入OpenAi的对话能力,自己实现一个ChatGPT的对话功能。

二、申请Token

大家自己如果有了解过的也知道OpenAi在访问账号、网络等对国内有限制,盒子对此作了一层简单的封装,让我们的对话能力接入变得非常简单。首先,在对话之前你需要先申请OpenAi接口请求Token,这个由程序员盒子cu.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);
  // 请求获取token
  String token = HttpClientUtil.get(tokenApi, String.class);



三、请求OpenAi 对话API实现对话能力

这里说前端如何实现,主要关心对话数据能力:

示例代码:

/**
 * 聊天对话
 */
public Object chat(String input) {
        // 请求程序员盒子获取Token
        String token = getTokenFromCoderUtilApi(ak, sk);
        // 请求头参数
        Map<String, String> headers = this.buildHeaders(token);
        // 对话模型、输入 body
        Map<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+"
");
        param.put("max_tokens", 3000);
        param.put("temperature", 0.8);
        return param;
}



Done!!

经验分享 程序员 微信小程序 职场和发展