当前位置:首页|资讯|ChatGPT|腾讯|编程

ChatGPT是程序员的好帮手?还是要干掉程序员?

作者:IT编程培训-源码时代发布时间:2023-04-14

需求

刚好我准备搭建一个对接ChatGPT的服务,部署在云服务器上,这样应该就可以更方面的使用ChatGPT的服务了。

看了下腾讯云上的云服务的价钱,还是比较合适的,不知道618的时候会不会还有优惠。

 


第一步,询问ChatGPT

好了,我们把这个需求抛给 ChatGPT ,让它说一说要如何对接。

 


哇,是不是很强,不仅步骤清晰,而且还有核心代码,每一步还都贴心的做了说明。

第二步,实战

好的我们这就按照ChatGPT说的,去找到自己的API key

 


然后,我们照着它所说的创建好项目:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.openai</groupId>
            <artifactId>openai-java-sdk</artifactId>
            <version>0.1.0</version>
        </dependency>
    </dependencies>

但是,我们在加载Maven 时出现了一个错误:

 


这里我们发现了ChatGPT瞎编了一个不存在的库 ⊙﹏⊙b汗

 

第三步,调试ChatGPT

而且,但我们向他出错的原因时,他竟然还有模有样的给出了回答。

但是实际上,并没有这个sdk,好了我们还是自己发送Http请求,实现最基础的方式来对接吧。


import cn.itsource.mychatgpt.service.OpenAIService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OpenAiController {

    @Autowired
    private OpenAIService openAIService;

    @PostMapping("/MyChat")
    public String myChat(@RequestBody String prompt) {
        return openAIService.myChat(prompt);
    }
}

import com.alibaba.fastjson.JSON;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.*;

@Service
public class OpenAIServiceImpl implements OpenAIService {

    private static final String API_KEY = "sk-YOU-API-KEY";
    private static final String API_URL = "https://api.openai.com/v1/completions";
    private static final HttpHeaders headers = new HttpHeaders();

    static {
        headers.set("Content-Type", "application/json");
        headers.set("Authorization", "Bearer " + API_KEY);
    }

    public  String myChat(String prompt) {
        RestTemplate restTemplate = new RestTemplate();

       // String prompt = "Once upon a time";
        String model = "text-davinci-002";
        int maxTokens = 500;

        // 拼接json格式的请求体
        //String requestBody = "{\"prompt\": \"" + prompt + "\", \"model\": \"" + model + "\", \"max_tokens\": " + maxTokens + "}";
        
        Map data = new HashMap();
        data.put("model",model);
        data.put("prompt",prompt);
        data.put("max_tokens",maxTokens);        
        // 用Json对象转一下,避免拼接字符串的问题
        String requestBody = JSON.toJSONString(data);

        HttpEntity<String> entity = new HttpEntity<>(requestBody, headers);

        ResponseEntity<String> response = restTemplate.postForEntity(API_URL, entity, String.class);
        if (response.getStatusCode() == HttpStatus.OK) {
            System.out.println(response.getBody());
        } else {
            System.out.println("Request failed with status code: " + response.getStatusCode());
            throw new RunTimeException("网络异常,请稍后重试!");
        }
        return response.getBody();
    }
}

 

但是这个请求的地址依然有问题,GPT依然一本正经的告诉了我一些看起来还蛮靠谱的解决方案:

 


 

 

第四步,人工介入实现开发

算了,我们还是老老实实的参考官方文档吧,于是我让ChatGPT告诉了我OpenAI的开发文档地址:

 


 

官方文档的地址: https://platform.openai.com/docs/api-reference

通过查看官方文档里,我们终于找到了:

 


 

 

这回我们清楚了,要想和ChatGPT聊天,我们需要发送POST请求,请求地址是:https://api.openai.com/v1/chat/completions 

并且要设置请求头参数:

"Content-Type: application/json" 和 "Authorization: Bearer $OPENAI_API_KEY"

Json 格式请求体,必须要包括 model 和 messages

{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello!"}]
}

当然,还有一些其他的参数,这里我就不一一介绍了,有兴趣的可以自己参考官方文档的说明。

 

这次我们在到PostMan里测试一下,添加好请求头,我们发送个请求测试一下

 


 

要想实现聊天,让ChatGPT知道我们的上下文只需要在下次请求的时候,把他回答的 "role": "assistant" 和 content也放到 messages 数组中就可以实现了。

OK,清楚了请求地址和参数,我们修改代码中的配置。

终于,我们成功通过SpringBoot 实现了ChatGPT的对接:

 


剩下的,只需要找一个合适的前端页面,发送请求,就可以愉快的和ChatGPT对话了。

 

 

总结:

通过这次使用ChatGPT的辅助开发流程,我们可以发现,对于一些简单的知识,ChatGPT基本上没得问题, 他可以给出具体的实现步骤和常规的解决方案。

但是,一旦专业性比较强一点的任务,ChatGPT 就开始编了。它 会给你编一个不存在的库,甚至还给出不存在的github连接, 还会瞎编源码(文件名对, 内容不对), 你给它说不存在, 它就换个名字,换个链接继续编。

而这些问题的本质,是 ChatGPT的实现原理导致的(大概率的语言模型),它并不清楚它所生成的答案到底是什么,只是给予概率的计算,生成的合乎语法格式的大概率答案。

总的来说,如果你不懂编程,直接用它生成的代码,是跑不起来的(代码缺失+Bug),还是需要程序员来定位到出错的地方,并解决。

所以,对于这样的情况来说,人工智能AI 它只是一个工具,未来程序员还是不可或缺的,它可以成为程序员的好帮手,肯定无法替代程序员。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1