赞
踩
这是本人做的第一个项目。发此文特以记录在开发过程中的思路和踩过的坑。做法和思路不一定正确,希望如果有大佬看到了不足之处给与改正。欢迎有任何问题向我私信。
本功能的最终展示形态是通过预设好的模型,通过输入特定的关键词,向chatGPT提问并且获得返回结果。所有的客户端操作都会在网页上进行。
如果要转载,和我留言即可。
- System.setProperty("http.proxyHost", "127.0.0.1");
- System.setProperty("http.proxyPort", "7890");
-
- System.setProperty("https.proxyHost", "127.0.0.1");
- System.setProperty("https.proxyPort", "7890");
- export http_proxy = http://127.0.0.1:1080
- export https_proxy = http://127.0.0.1:1080
- curl https://api.openai.com/v1/chat/completions -H 'Content-Type: application/json' -H 'Authorization: Bearer XXXXXXX' -d '{
- "model": "gpt-3.5-turbo",
- "messages": [{"role": "user", "content": "This is a test"}],
- "temperature": 0.7
- }'
当然如果这个curl不通,可以尝试一下curl一下谷歌看看。因为openai那边服务器确实有点一言难尽的。不过此时就要提个心眼。别代理的ip被openai封了
- curl -i www.baidu.com //这是百度,检验至少能上网
- curl -i www.google.com //这是谷歌,有返回就是有效
这一步一定要注意。curl通就行。ping不通很正常不要纠结。用的东西不一样!
2.4:调用chatGpt的api
这一步花费时间也较长。一开始的时候我是想用okhttp进行连接的。但是连接一直失败一直失败。服务器返回400 bad request。我检查了很多遍都没啥问题。我怀疑是他要求的content项中是一个list而不是json。
在花了很长很长时间之后,我放弃了使用okhttp建立连接,转而使用sdk。
是的没错。他居然有java的sdk。github地址:GitHub - TheoKanning/openai-java: OpenAI GPT-3 Api Client in Java
注意他返回的是一个ChatCompletionChoice的list。把它其中的content里的内容拿出来,就是最后想要的东西啦。
3.1 本地调通
在这个上面我出现了一点问题。就是我发现用户的长请求timeout的比例特别高。自己的访问总是失败。
这个问题解决的很快。它的service方法中有一个多态方法是可以填写timeout时间的。
直接贴整段代码吧
- public static String askForResult(String input,Double temperature){
- System.setProperty("http.proxyHost", "127.0.0.1");
- System.setProperty("http.proxyPort", "7890");
-
- System.setProperty("https.proxyHost", "127.0.0.1");
- System.setProperty("https.proxyPort", "7890");
-
-
- //配置需要输入的格式
- List message =new ArrayList<>(0);
- message.add(new ChatMessage("user",input));
- System.out.println("开始处理请求");
-
-
- //设置timeout时间
- Duration timeout = Duration.ofSeconds((long) 180.0);
-
- OpenAiService service = new OpenAiService(apiKey,timeout);//加载api key
-
- //做一个连接
- ChatCompletionRequest request2=ChatCompletionRequest.builder()
- .model("gpt-3.5-turbo")
- .temperature(temperature)
- .messages(message)
- .build();
-
- //对返回值进行解析(返回初始是一个list。把它拆开取值)
- List<ChatCompletionChoice> list =service.createChatCompletion(request2).getChoices();
- ChatCompletionChoice ccc = list.get(0);
- String finalAnswer =ccc.getMessage().getContent();
- // System.out.println(finalAnswer);
- System.out.println("返回成功");
- return finalAnswer;
-
- }
3.2 部署到云服务器
这一步是我觉得最简单的。再吹一遍宝塔。
我是使用的ubantu系统,下载了一个clash core并启动。然后修改配置文件,最后布置docker。这个直接在youtube上跟着学就行了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。