暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一个Java版本的chatgpt SDK

原创 不诉离殇 2022-12-12
3983

Hello,大家好。今天给大家带来一个Java版本的chatgpt SDK

项目地址: swordintent/chatgpt-web-api

起因

最近chatgpt在技术圈大火,甚至有些出圈的趋势。

虽然第一时间就进行了体验,但本着独乐乐不如众乐乐,萌生接入到个人公众号的后台的想法。

过程

说干就干,这是一个典型的单账户(只有一个OpenAI的账户)下的多用户(公众号服务于多个用户)场景,同时需要支持多轮对话(聊天嘛,不寒掺),所以需要调研目前的chatgpt服务能否满足要求。

在github上搜索了一下,star数最多的应该是acheong08/ChatGPT,是一个基于python的项目,研究了一下他的实现,发现能够良好的满足要求,感兴趣的同学可以阅读一下相关代码或留言,此处不详细展开。

项目介绍

本项目为了避免重复造轮子,底层直接使用了acheong08/ChatGPT,通过http协议进行交互,而没有去适配OpenAI的http接口,这样随着acheong08/ChatGPT的迭代,我们可以有更多精力放在上层的业务功能上。

限制: 目前OpenAI的服务并不稳定,且响应时间略长,所以集成到微信公众号内需要使用异步消息,同步体验可能不佳,大家感兴趣可以微信搜索swordintent公众号,或扫描体验。
无标题.png

如何开始

注册一个OpenAI账号

进入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'

在程序中使用

  1. 首先, 需要调用chatgptClient.init(address, chatGptConfig) 方法来初始化客户端。
  • 需要修改email,passwordaddress.
    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的认证方式持续又变化,所以不推荐使用这种方式。
  1. 调用chatgptClient.chat(request) 方法来进行聊天.
  • 在第一轮聊天时, conversationId and parentId需要置为null(默认).
    并且,如果需要重置这轮对话,也将他们置为null即可.
    //第一轮对话,或重置多轮对话
    ChatRequest request = ChatRequest.builder()
                                    .prompt(content)
                                    .conversationId(null)
                                    .parentId(null)
                                    .build();
    
    ChatResponse response = chatgptClient.chat(request);

  • 如果需要进行多轮对话,只需要将上一轮对话的响应中的conversationIdparentId设置到下一轮对话的请求参数中即可。
    //多轮对话
    ChatRequest request = ChatRequest.builder()
                                    .prompt(content)
                                    .conversationId(response.getConversationId())
                                    .parentId(response.getParentId())
                                    .build();
    ChatResponse response = chatgptClient.chat(request);
  1. 友情提示.
  • 为了单账户下的多用户、多轮对话, 当多次调用chatgptClient.chat(request)方法时,不会每次都进行用户名和密码的认证,而只会在调用chatgptClient.init(address, chatGptConfig)时进行一次,并在接下来全局使用。

  • 所以,认证状态有可能被OpenAI不定时取消, 这时,你需要再进行一次chatgptClient.chat(request)的调用,以刷新认证状态。

最后修改时间:2022-12-12 15:15:20
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论