OpenAI が提供している ChatGPT は非常に面白いですね。
ここまで、すごいものが出ると今後、GPTやChatGPTがさらに進化することが想像できますね。
この記事では、GPTを使ったChatGPTクローンをJavaで実行するまでを紹介していきます。
どうやってChatGPTクローンを作るのか?
ChatGPTクローンを作る方法としては、LangChainというものがあり、OpenAIのGPT-3やGoogleのFLAN-T5 XLといった大規模言語モデル(LLM)を使いやすくするためのフレームワークです。
詳しくはnpakaこと布留川英一のnoteを参照のこと。
しかし、上記のLLMは無料では使用できず、OpenAIのAPIアカウントが必要であり、連携するAPIによっては追加の費用が発生する可能性があります。
JavaでGPT-3を使うには
GPT-3をJavaで使うには、OpenAI APIを利用する方法があります。下記手順に従い、APIキーの取得とJavaでのAPI呼び出しを実装することができます。
- OpenAI APIキーを取得する
- Java用のクライアントライブラリを使用する
- 呼び出しを実装する
これらの手順を踏むことで、JavaでOpenAIのGPT-3を利用することができます。
1. OpenAI APIキーを取得する
こちらに詳しく載っているいるサイトがあったので、リンクを貼っておきます。
2. Java用のクライアントライブラリを使用する
Javaのクライアントライブラリを検索したところ、こちらのライブラリが一番使えそうなので、こちらを載せておきます。
Mavenで利用する場合は、このように指定すると利用できるようになります。
<dependencies>
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>client</artifactId>
<version>0.9.0</version>
</dependency>
</dependencies>
3. 呼び出しを実装する
実際のJavaからの呼び出しはこのように実装します。
ここのライブラリの呼び出しはPythonとかとパラメータの呼び出しは変わっていないので、Pythonの記事とかでも案外参考になったりします。
OpenAiService service = new OpenAiService("your_token");
CompletionRequest completionRequest = CompletionRequest.builder()
.prompt("Somebody once told me the world is gonna roll me")
.model("ada")
.echo(true)
.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
ChatGPTクローンをJavaで作ってみる
では、そろそろGPT-3を使って実際コーディングして会話をしてみます。
AIアシスタント風な実装になっています。
package jp.livlog.gpt3sample;
import java.util.ResourceBundle;
import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.completion.CompletionChoice;
import com.theokanning.openai.completion.CompletionRequest;
public class Sample1 {
public static void main(final String[] args) {
final var config = ResourceBundle.getBundle("config");
final var token = config.getString("openai.token");
final var service = new OpenAiService(token);
System.out.println("\nCreating completion...");
final var message = "やっぱり、冬の鍋はおいしいですね。";
final var prompt = "The following is a conversation with an AI assistant. The assistant is helpful, creative, clever.\nHuman: " + message
+ "\nAI: ";
final var completionRequest = CompletionRequest.builder()
.model("text-davinci-003")
.prompt(prompt)
.maxTokens(256)
.build();
final var completionResult = service.createCompletion(completionRequest);
final var choiceList = completionResult.getChoices();
for (final CompletionChoice choice : choiceList) {
System.out.println(choice);
}
}
}
冬の鍋について聞いてみました。
その回答もなかなか、いい感じで返してくれていますね。
Creating completion...
CompletionChoice(text= 冬の鍋の様々な種類も、なかなか美味しく頂きますよ!お好みで鍋を作ってみると、素敵な時間を楽しめるかもしれませんね!, index=0, logprobs=null, finish_reason=stop)
最後
簡単にですが、ChatGPTクローンを作ってみましたが、これだけのコーディングで対話できるようになったので、本当にここまで来たのかということを実感しますね。
ただ、利用には有料であるため、実際に試すときは気を付けて利用をしてください。
これからは、自分のサービス(CotoGoto)に組み込む方法を考えていきたいと思います。
追記
最新のJavaでChatGPTモドキを作るのをこちらにまとめ直しています。