一个Java版本的chatgpt SDK【2023-03-02更新】
Hello,大家好。今天给大家带来一个Java版本的chatgpt SDK。
项目地址: swordintent/chatgpt-web-api
2022.12.12:目前OpenAI升级接入了cloudflare的前置端,楼主正在加紧适配中。
2023.2.4:采用openAI的官方api实现,可用
2023.2.2:免费模型已经不可用,需要使用付费模型,新账号包含$18额度,a)pip3 install revChatGPT==1.2.2 b)export GPT_ENGINE="text-davinci-003",后边将切换至java版本的api
2023.3.2 升级至官方api.
起因
最近chatgpt在技术圈大火,甚至有些出圈的趋势。
虽然第一时间就进行了体验,但本着独乐乐不如众乐乐,萌生接入到个人公众号的后台的想法。
过程
说干就干,这是一个典型的单账户(只有一个OpenAI的账户
)下的多用户(公众号服务于多个用户
)场景,同时需要支持多轮对话(聊天嘛,不寒掺
),所以需要调研目前的chatgpt服务能否满足要求。
在github上搜索了一下,star数最多的应该是acheong08/ChatGPT,是一个基于python的项目,研究了一下他的实现,发现能够良好的满足要求,感兴趣的同学可以阅读一下相关代码或留言,此处不详细展开。
项目介绍
本项目为了避免重复造轮子,底层直接使用了acheong08/ChatGPT
,通过http协议进行交互,而没有去适配OpenAI的http接口,这样随着acheong08/ChatGPT
的迭代,我们可以有更多精力放在上层的业务功能上。
限制: 目前OpenAI的服务并不稳定,且响应时间略长,所以集成到微信公众号内需要使用异步消息,同步体验可能不佳,大家感兴趣可以搜索gz号swordintent
进行体验,也可以参照本项目实现公众号机器人
如何开始
注册一个OpenAI账号
进入OpenAI进行注册,中国大陆手机号码无法注册,个人用途建议因不涉及到隐私,可以考虑使用接码平台,请自行搜索。
启动python服务
python >= 3.7
服务文件在 src/main/resources/server.py
。
- 执行以下命令
pip3 install flask flask-restfulpip3 install --upgrade revChatGPTpython3 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)
方法来初始化客户端。
- 需要修改,
password
和address
,password
为openAI的api-keys, 可以从这里找到. address
根据实际部署情况来设置.
ChatgptClient chatgptClient = ChatgptClientImpl.getInstance();ChatGptConfig chatGptConfig = ChatGptConfig.builder().email("").password("").build();String address = "http://127.0.0.1:5000";chatgptClient.init(address, chatGptConfig);
- 调用
chatgptClient.chat(request)
方法来进行聊天.
- 在第一轮聊天时,
conversationId
需要置为null
(默认).
并且,如果需要重置这轮对话,也将他们置为null
即可.
//第一轮对话,或重置多轮对话ChatRequest request = ChatRequest.builder().prompt(content).conversationId(null).build();ChatResponse response = chatgptClient.chat(request);
- 如果需要进行多轮对话,只需要将上一轮对话的响应中的
conversationId
设置到下一轮对话的请求参数中即可。
//多轮对话ChatRequest request = ChatRequest.builder().prompt(content).conversationId(response.getConversationId()).build();ChatResponse response = chatgptClient.chat(request);
- 友情提示.
- 目前的实现方案是将python的chatbot对象完全序列化后存入
conversationId
,所以可能会比较大,后边会优化. - 正如上述实现,每次重启python server时,也必须将java程序的conversationId设置为空,否则会出现请求失败.
作者:技术词话
来源链接:https://blog.csdn.net/liuhe36/article/details/128286885
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。