当前位置: 首页 > 知识库问答 >
问题:

java - 如何在Java项目里整合ChatGPT?

颛孙博易
2023-04-23

如题,如何在Java项目中调用ChatGPT的接口,我看了官方文档看不懂。

共有2个答案

冀胤运
2023-04-23

github有直接写好的,拿下来做个参考可以。 比如chatgptjava 。

乐正远
2023-04-23

请把这整篇文章过一遍:
[https://juejin.cn/post/7208907027841171512]
你使用的应该是openAI提供的API-key,并且使用软件对某一个代理IP和端口进行了监听,参照这里面的第2.3.6点:


@Slf4j
@Component
public class OpenAiApi {

    @Value("${open.ai.url}")
    private String url;
    @Value("${open.ai.token}")
    private String token;

    private static final MultiThreadedHttpConnectionManagerCONNECTION_MANAGER=new MultiThreadedHttpConnectionManager();

    static {
        // 默认单个host最大链接数
CONNECTION_MANAGER.getParams().setDefaultMaxConnectionsPerHost(
                Integer.valueOf(20));
        // 最大总连接数,默认20
CONNECTION_MANAGER.getParams()
                .setMaxTotalConnections(20);
        // 连接超时时间
CONNECTION_MANAGER.getParams()
                .setConnectionTimeout(60000);
        // 读取超时时间
CONNECTION_MANAGER.getParams().setSoTimeout(60000);
    }

    public ExecuteRet get(Stringpath, Map<String, String> headers) {
        GetMethod method = new GetMethod(url +path);
        if (headers== null) {
            headers = new HashMap<>();
        }
        headers.put("Authorization", "Bearer " + token);
        for (Map.Entry<String, String> h : headers.entrySet()) {
            method.setRequestHeader(h.getKey(), h.getValue());
        }
        return execute(method);
    }

    public ExecuteRet post(Stringpath, Stringjson, Map<String, String> headers) {
        try {
            
            PostMethod method = new PostMethod(url +path);

            //log.info("POST Url is {} ", url + path);
            // 输出传入参数
    log.info(String.format("POST JSON HttpMethod's Params = %s",json));
            StringRequestEntity entity = new StringRequestEntity(json, "application/json", "UTF-8");
            method.setRequestEntity(entity);
            if (headers== null) {
                headers = new HashMap<>();
            }
            headers.put("Authorization", "Bearer " + token);
            for (Map.Entry<String, String> h : headers.entrySet()) {
                method.setRequestHeader(h.getKey(), h.getValue());
            }
            return execute(method);
        } catch (UnsupportedEncodingExceptionex) {
log.error(ex.getMessage(),ex);
        }
        return new ExecuteRet(false, "", null, -1);
    }

    public ExecuteRet execute(HttpMethodmethod) {
        HttpClient client = new HttpClient(CONNECTION_MANAGER);
        // 创建代理对象
HttpHost proxy = new HttpHost("你的代理主机ip", 你的代理主机端口);
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
        int statusCode = -1;
        String respStr = null;
        boolean isSuccess = false;
        try {
            client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF8");
            statusCode = client.executeMethod(method);
method.getRequestHeaders();

            // log.info("执行结果statusCode = " + statusCode);
            InputStreamReader inputStreamReader = new InputStreamReader(method.getResponseBodyAsStream(), "UTF-8");
            BufferedReader reader = new BufferedReader(inputStreamReader);
            StringBuilder stringBuffer = new StringBuilder(100);
            String str;
            while ((str = reader.readLine()) != null) {
log.debug("逐行读取String = " + str);
                stringBuffer.append(str.trim());
            }
            respStr = stringBuffer.toString();
            if (respStr != null) {
             log.info(String.format("执行结果String = %s, Length = %d", respStr, respStr.length()));
                          } 
            inputStreamReader.close();
            reader.close();
            // 返回200,接口调用成功
            isSuccess = (statusCode == HttpStatus.SC_OK);
            } catch (IOExceptionex) {
        } finally {
method.releaseConnection();
        }
        return new ExecuteRet(isSuccess, respStr,method, statusCode);
    }

}

核心的设置代理的代码:

HttpHost proxy = new HttpHost("你的代理主机ip", 你的代理主机端口);
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

如果你不是采用HttpClient的方法,其他的发起请求的客户端也是相似的,只要设置响应的代理主机就可以了,其他代码不需要变动

 类似资料:
  • 如何从命令行创建Java Gradle项目? 它应该创建标准的maven文件夹布局,如下图所示。 更新: 那么有办法在一个命令中完成吗?

  • 我找到了一个符合我目的的图书馆,但它是写在Kotlin上的。我可以在Java项目中使用它吗? 框架:https://github.com/mpetlyuk/initial_tips Kotlin上的用法:

  • 问题内容: 我已经使用eclipse中的 m2e插件* 将 Java Web项目 转换为 Maven项目 。现在,我需要将其转换回Java Web项目。现在,如何将其更改回Java Web项目。 * 问题答案: 请尝试以下操作: 在Maven项目上打开上下文菜单 选择“ Maven”->“禁用Maven自然” 希望能有所帮助。

  • 问题内容: 我正在尝试导出Java项目。我可以通过使用选项导出-> Java-> JAR文件来创建JAR文件。我无法将此jar文件导入Eclipse(Java的没有导入选项)。我在这里做错什么了吗? 针对Web开发人员使用Eclipse Java EE IDE(版本:Juno发行版) 问题答案: 有比导出和导入罐子更简单的方法。假设您的项目名为MyProject123。只是: 只需使用文件管理器打

  • 我想用编写一些Java代码。