Java入門者が Eclipseで作る、GPT3のAPIを使ったChatBot

AI
スポンサーリンク

GPT3 APIの取得

OpenAIのGPT3のAPIを使ったChatBotはPythonで作成すると簡単にできます。

けれども、場合によってはJavaを使いたい場合があるかもしれません。ChatBot自体のコードはそんなに難しくないかもしれませんが、環境を整えるのが面倒です。

今回はMavenプロジェクトを作成して、そこで動くChatBotに挑戦します。

ちなみにChatGPTにその方法を聞いたところ、実に簡単な方法を教えてくれますが実際には動きませんでした。おそらく事前に準備する内容が端折られているためと思われます。

Mavenとは

Mavenは、Apacheプロジェクトのひとつとして開発が進められているため、「Apache Maven」と表記される場合もあります。

Mavenは、Javaプロジェクトのビルド、依存関係の管理、テスト、デプロイなどを自動化するツールです。Mavenは、プロジェクトの構成情報をXMLファイルで管理し、プロジェクトのビルドと依存関係の解決に基づいてビルドプロセスを自動化します。

Mavenでできることをまとめると次のようになります。

  1. ビルド自動化: Mavenは、ビルドプロセスを自動化します。ビルドスクリプトを記述する必要がなく、ビルドを実行するだけで、Mavenが必要なタスクを自動的に実行します。
  2. 依存関係管理: Mavenは、依存関係を管理するための強力なツールです。プロジェクトが依存するライブラリを定義し、Mavenは必要なライブラリを自動的にダウンロードしてプロジェクトに組み込みます。
  3. プロジェクト構成管理: Mavenは、プロジェクトの構成情報を管理するための機能を提供します。プロジェクトの構成情報は、XMLファイルで管理され、プロジェクトのビルドや依存関係解決に使用されます。
  4. テスト自動化: Mavenは、JUnitなどのテストフレームワークをサポートしており、テストの自動化を容易にします。
  5. プラグイン: Mavenは、多数のプラグインを提供しており、機能の追加や拡張が容易になります。

EclipseでMavenを使う方法

EclipseにMavenが導入されているかどうかは、Eclipseのバージョン情報で確認できます。
「ヘルプ」>「Eclipse IDEについて」Macの場合は「Eclipse」>「バージョン情報Eclipse」

Mavenプロジェクトを作成

Mavenに対応したプロジェクトを作成するには、Eclipseのメニューから「新規」>「その他」を選択します。

次に、「Maven プロジェクト」を選択し、「次へ」を選択します。

「シンプルなプロジェクトの作成」を選択し、「次へ」を選択します。

プロジェクトの構成画面では、「グループid」、「アーティファクトid」を入力します。

グループidとアーティファクトidは合わせてパッケージの名前になりますので、パッケージ名を付ける感覚で命名します。

その後、名前にプロジェクトの情報を入力して「完了」ボタンをクリックします。

以下のようなプロジェクトが出来上がります。

pom.xmlの編集

Mavenプロジェクトを作成すると自動でpom.xmlができています。

このxmlファイルに使用するjavaのバージョンと使用したいパッケージの指定を行います。

以下のpom.xmlコード例はこれら2つの情報を追加したものです。

今回のChatBotのコード例では、apiだけでなく、clientも取り込まないとうまくいかないので注意して下さい。

また、<dependencies>で<dependency>を囲む必要がありますので注意して下さい。

使用するライブラリ情報はMavenのサイトから<dependency>タグで囲む内容を取得します。

今回はOpenAIのAPI取得情報 ページから下図の赤枠部分をコピペで使います。

完成したpom.xmlの例

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>sample</groupId>
  <artifactId>gpt3</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>chatbot</name>
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>
<!-- https://mvnrepository.com/artifact/com.theokanning.openai-gpt3-java/api -->
<dependencies>
<dependency>
    <groupId>com.theokanning.openai-gpt3-java</groupId>
    <artifactId>api</artifactId>
    <version>0.11.0</version>
</dependency>
<dependency>
    <groupId>com.theokanning.openai-gpt3-java</groupId>
    <artifactId>client</artifactId>
    <version>0.11.0</version>
</dependency>
</dependencies>

</project>

ライブラリのインストールはプロジェクトを右クリックで出てくるメニューの実行から「Maven install」を選択します。

Buildに成功すると次のような表示になります。

もし、失敗したなら、プロジェクトを右クリックして「プロパティ」を選択して、「プロジェクト固有の設定を可能にする」のチェックを外すと解決する場合があります。

ChatBotのコード例

OpenAIのトークンを取得

事前にOpenAIのサイトでトークンを取得します。

まず、OpenAIにログインします。
ログインできたら、ページの右上にある「Personal」をクリックします。

次に「View API keys」をクリックします。

出てきたページの「Create new secret key」でシークレットキーを作成

このAPIを使用するには有料ですが、最初は無料で18ドル分だけ使えます。それ以降は別途有料会員になれば使える仕組みです。

ChatBotの参考コード

JavaだってGPT-3.5を使ってChatGPTクローンが作れる」のコードをほとんどそのまま使っています。とりあえず動くことが目的ですから、セキュリティ問題とかは考慮していませんので、APItokenはベタ打ちで入れています。

package gpt3;

import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.completion.CompletionChoice;
import com.theokanning.openai.completion.CompletionRequest;

@SuppressWarnings("deprecation")
public class GPT3Chatbot {

    public static void main(final String[] args) {
        final var token = "自分のAPItokenを記入";
        final var service = new OpenAiService(token);
        var message = "Javaを効率よく勉強する方法を教えて下さい。";
        
        System.out.println("問いかけ:" + 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(512)
                .build();
        final var completionResult = service.createCompletion(completionRequest);
        final var choiceList = completionResult.getChoices();

        for (final CompletionChoice choice : choiceList) {
            System.out.println(choice);
        }
    }
}

コード実行の結果

これから先の細かなカスタマイズはそれぞれの目的に合わせてコーディングすれば良いと思います。

タイトルとURLをコピーしました