阿里面试官:如何用ChatGPT写一个ChatGPT的程序!

目录

第一步 询问ChatGPT

第二步 实战

第三步 调试ChatGPT

第四步 人工介入实现开发

总结 


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

第一步 询问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请求,实现最基础的方式来对接吧。

ok ,我们按照ChatGPT的提示,我们来编写代码,按照习惯进行分层,在Service层进行核心业务实现。

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 它只是一个工具,未来程序员还是不可或缺的,它可以成为程序员的好帮手,肯定无法替代程序员。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法为您提供编一个完整的阿里云OSS FTP程序的代码。 阿里云OSS是一种对象存储服务,而FTP是一种文件传输协议,它们之间的实现需要考虑到很多细节,比如认证、安全、数据传输等等。这需要您进行详细的文档研究并了解您的特定需求。 然而,您可以使用JavaScript SDK来连接阿里云OSS,并使用FTP模块来实现FTP传输,例如使用`basic-ftp`模块。下面是一个简单的例子,演示如何使用`basic-ftp`模块来上传文件到阿里云OSS: ```javascript const OSS = require('ali-oss'); const ftp = require('basic-ftp'); // 配置信息,根据您的阿里云账户和OSS实例进行调整 const ossConfig = { accessKeyId: 'your_access_key_id', accessKeySecret: 'your_access_key_secret', region: 'oss-cn-hangzhou', bucket: 'your_bucket_name', }; const ftpConfig = { host: 'ftp.example.com', user: 'your_ftp_username', password: 'your_ftp_password', secure: false, }; // 创建OSS客户端 const client = new OSS(ossConfig); // 上传文件到OSS async function uploadToOSS(localFilePath, remoteFileName) { try { const result = await client.put(remoteFileName, localFilePath); console.log('Upload success:', result); } catch (err) { console.error('Upload failed:', err); } } // 上传文件到FTP async function uploadToFTP(localFilePath, remoteFileName) { const ftpClient = new ftp.Client(); try { await ftpClient.access(ftpConfig); await ftpClient.uploadFrom(localFilePath, remoteFileName); console.log('Upload success:', remoteFileName); } catch (err) { console.error('Upload failed:', err); } finally { ftpClient.close(); } } // 将本地文件上传到OSS和FTP const localFilePath = 'path/to/local/file'; const remoteFileName = 'path/to/remote/file'; uploadToOSS(localFilePath, remoteFileName); uploadToFTP(localFilePath, remoteFileName); ``` 请注意,这只是一个非常简单的示例,用于说明如何连接阿里云OSS和FTP,并上传文件。 您需要进一步了解阿里云OSS和FTP,以根据您的具体需求进行更详细的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值