为什么Java开发者需要ChatGPT?或者如何停止恐惧并爱上神经网络
你好,同行!如果你在读这篇文章,那么你和我一样,已经厌倦了为技术支持编写千篇一律的回复、生成无聊的产品描述或手动分析评论。如果我告诉你,只需一个晚上,你就可以通过连接真正的人工智能,为你的Java应用程序注入活力呢?是的,我说的就是那个能够开玩笑、编写代码,甚至向猫解释勾股定理的ChatGPT。
在本文中,我们不会讨论概率论或学习Transformer模型。我们只需使用Java,添加一点HTTP请求,然后让GPT-4(如果预算紧张,也可以是3.5)为我们工作。听起来像魔法吗?实际上,这是纯粹的工程学。我们开始吧!
我们需要什么?最低限度的必备工具
在编写代码之前,请确保你拥有:
- JDK 11或更高版本(我们将使用在11版本中引入的新
HttpClient); - OpenAI API密钥——可以在OpenAI平台上获取。别忘了充值(只需几美元,用于测试就足够了);
- 任何IDE——IntelliJ IDEA、Eclipse,如果你是硬核玩家,甚至可以使用记事本;
- Maven或Gradle——用于方便地管理依赖(但我们会尽量少用)。
顺便说一句,如果你认为在Java中集成ChatGPT是一件复杂且需要机器学习的事情,那么我很高兴地告诉你:一切都可以通过一个简单的HTTP请求解决。运行时不需要任何神经网络,只需要REST API。
项目准备:Maven和依赖
创建一个新的Maven项目,并在pom.xml中添加一个库——Jackson,用于处理JSON。没有它可不行,因为ChatGPT只使用这种语言与世界交流。
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>就这样!不需要任何SDK,不需要任何封装——只有纯粹的Java和我们的聪明才智。如果你使用Gradle,只需添加implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'。
向OpenAI API发送请求的结构
在编写代码之前,让我们先了解一下服务器需要什么。ChatGPT API接收发送到端点https://api.openai.com/v1/chat/completions的POST请求。请求体是一个JSON,结构如下:
{ "model": "gpt-3.5-turbo", "messages": [ {"role": "system", "content": "你是一个有用的助手。"}, {"role": "user", "content": "讲一个关于Java开发者的笑话。"} ], "temperature": 0.7}我们来解释一下这些字段:
- model——哪个模型来回答。为了节省成本,使用
gpt-3.5-turbo,为了获得更好的回答,使用gpt-4; - messages——消息数组。系统消息设定基调,而user是我们的请求;
- temperature——从0到2。值越高,回答越有创意(同时神经网络产生幻觉的可能性也越大)。
响应也以JSON格式返回,我们感兴趣的是choices[0].message.content字段。那里隐藏着我们将要展示给用户的文本。
编写代码:用于ChatGPT的Java客户端
创建一个名为ChatGPTClient的类。它将负责发送请求和处理响应。所有代码都在一个文件中,以避免创建过多的实体。
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpRes