一个Java版本的chatgpt SDK
Hello,大家好。今天给大家带来一个Java版本的chatgpt SDK。
项目地址:
2022.12.12:目前OpenAI升级接入了cloudflare的前置端,楼主正在加紧适配中。
起因
最近chatgpt在技术圈大火,甚至有些出圈的趋势。
过程
在github上搜索了一下,star数最多的应该是,是一个基于python的项目,研究了一下他的实现,发现能够良好的满足要求,感兴趣的同学可以阅读一下相关代码或留言,此处不详细展开。
项目介绍
本项目为了避免重复造轮子,底层直接使用了acheong08/ChatGPT,通过http协议进行交互,而没有去适配OpenAI的http接口,这样随着acheong08/ChatGPT的迭代,我们可以有更多精力放在上层的业务功能上。
如何开始
注册一个OpenAI账号
进入进行注册,中国大陆手机号码无法注册,个人用途建议因不涉及到隐私,可以考虑使用接码平台,请自行搜索。
启动python服务
python >= 3.7
服务文件在 src/main/resources/server.py,由于acheong08/ChatGPT还在持续快速迭代,所以可能需要经常性的更新依赖pip3 install revChatGPT --upgrade。
-
执行以下命令
pip3 install flask flask-restful pip3 install revChatGPT --upgrade python3 server.py
默认服务启动会在 http://127.0.0.1:5000 提供服务
导入依赖
https://search.maven.org/artifact/com.swordintent.chatgpt/web-api/
Maven
<dependency> <groupId>com.swordintent.chatgpt</groupId> <artifactId>web-api</artifactId> <version>1.0.0</version> </dependency>
Gradle
implementation com.swordintent.chatgpt:web-api:1.0.0
在程序中使用
- 首先, 需要调用chatgptClient.init(address, chatGptConfig) 方法来初始化客户端。
-
需要修改email,password和address.
ChatgptClient chatgptClient = ChatgptClientImpl.getInstance(); ChatGptConfig chatGptConfig = ChatGptConfig.builder() .email("") .password("") .build(); String address = "http://127.0.0.1:5000"; chatgptClient.init(address, chatGptConfig);
-
高级用法: acheong08/ChatGPT也支持通过session_token or Authorization来认证,所以在初始化时,也可以分别传递这两个参数,但由于OpenAI的认证方式持续又变化,所以不推荐使用这种方式。
- 调用chatgptClient.chat(request) 方法来进行聊天.
-
在第一轮聊天时, conversationId and parentId需要置为null(默认). 并且,如果需要重置这轮对话,也将他们置为null即可.
//第一轮对话,或重置多轮对话 ChatRequest request = ChatRequest.builder() .prompt(content) .conversationId(null) .parentId(null) .build(); ChatResponse response = chatgptClient.chat(request);
-
如果需要进行多轮对话,只需要将上一轮对话的响应中的conversationId 和 parentId设置到下一轮对话的请求参数中即可。
//多轮对话 ChatRequest request = ChatRequest.builder() .prompt(content) .conversationId(response.getConversationId()) .parentId(response.getParentId()) .build(); ChatResponse response = chatgptClient.chat(request);
- 友情提示.
-
为了单账户下的多用户、多轮对话, 当多次调用chatgptClient.chat(request)方法时,不会每次都进行用户名和密码的认证,而只会在调用chatgptClient.init(address, chatGptConfig)时进行一次,并在接下来全局使用。 所以,认证状态有可能被OpenAI不定时取消, 这时,你需要再进行一次chatgptClient.chat(request)的调用,以刷新认证状态。