9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaだってGPT-3.5を使ってChatGPTクローンが作れる

Last updated at Posted at 2023-01-30

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呼び出しを実装することができます。

  1. OpenAI APIキーを取得する
  2. Java用のクライアントライブラリを使用する
  3. 呼び出しを実装する

これらの手順を踏むことで、JavaでOpenAIのGPT-3を利用することができます。

1. OpenAI APIキーを取得する

こちらに詳しく載っているいるサイトがあったので、リンクを貼っておきます。

2. Java用のクライアントライブラリを使用する

Javaのクライアントライブラリを検索したところ、こちらのライブラリが一番使えそうなので、こちらを載せておきます。

Mavenで利用する場合は、このように指定すると利用できるようになります。

pom.xml
    <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モドキを作るのをこちらにまとめ直しています。

9
5
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?