見出し画像

OpenAI API for java

 生成AIを利用したアプリケーションを java で実装できれば android へ組み込みやすいです。ライブラリを使うと HTTP(S)通信、json生成/解析などを任せて 生成AIの操作に注力できます。そんなライブラリを調べた備忘録です。


solxyz-jsn/gpt-sample-with-java

前提

2023-06-23 コミット 5021a7742ae44ee94f52c92aba2d02b21f59d438
AlmaLinux release 8.9
OpenJDK 11.0.22
Apache Maven 3.9.6
 IDE( Eclipse | IntelliJ )を使わなくても動作確認できます。

サンプル src/main/java/jp/co/solxyz/SimpleQuery.java

 「src/main/java/jp/co/solxyz/SimpleQuery.java」の 18行目「OPENAI_API_KEY」にopenai APIキー、23行目「PROMPT」に好きな質問を記載します。また上記環境ですと「mvn install」コマンドで

Fatal error compiling: エラー: 17は無効なターゲット・リリースです -> [Help 1]

となったので pom.xml ファイルの 「<java.version>17</java.version>」を「<java.version>11</java.version>」に修正します。

$ mvn install exec:java -Dexec.mainClass=jp.co.solxyz.SimpleQuery

で、回答が表示されます。当時の com.azure.ai.openai 1.0.0-beta.2 が使われていますが 1.0.0-beta.3 に上げるだけでコンパイルエラーとなりました。

TheoKanning/openai-java

前提

2023-12-14 コミット e7de81c29319d605703a874c3f1fa56f61122e8b
AlmaLinux release 8.9
OpenJDK 11.0.22

 git clone, openai APIキーだけで コンパイル時いくつか警告が出るものの動作確認できたものは「Running the example project」のうち次の2サンプルでした。

サンプル1

$ ./gradlew runExampleOne

で、静止画を生成しコンソールに取得用URLが表示されました。

サンプル2

$ ./gradlew runExampleTwo

 コンソールで交互に会話を繰り返すチャットでした。日本語を入力すれば日本語で応答します。

> Task :example:runExampleTwo
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by retrofit2.Platform (file:/home/wanko/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/retrofit/2.9.0/d8fdfbd5da952141a665a403348b74538efc05ff/retrofit-2.9.0.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of retrofit2.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
First Query:
<============SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Response: Sup dude, what's up? How can I help you today?
Next Query: unExampleTwo
<<=<=<======Response: Hey there! How's it going? What can I do for you?
Next Query: =-> 93% EXECUTING [6m 54s]
<==<========Response: Aw, you're leaving already? Alright then, have a great day! If you need anything in the future, just hit me up. Take care!
Next Query:
<=<=<=<=====Response: Sure thing! What can I help you with?
Next Query: =-> 93% EXECUTING [7m 30s]
<===========Response: オッケー、分かるよ。俺が手助けするさ。何か質問がある?
Next Query: =-> 93% EXECUTING [7m 42s]
<===========Response: あぁ、了解。終わるんだね。じゃあ、いつでも戻ってきてね!また何かあったら、気軽に話しかけてくれ。それじゃ、またね!93% EXECUTING [8m 5s]
<============-> 93% EXECUTING [8m 18s]
> :example:runExampleTwo
^C

sashirestela/simple-openai

前提

2024-04-23 コミット 08fee44f007846e7686f5eae83a0b13f349ba156
AlmaLinux release 8.9
OpenJDK 11.0.22
Apache Maven 3.9.6

サンプル image

 「Run Examples」の手順通りでokです(「Azure OpenAI」キー設定は「image」では不要です)。

$ ./rundemo.sh image debug

 4つの静止画が生成されました。

Generate
Edit
Variation

 Maven でのテスト手法など お手本としてとても参考になります。

終わり

 今流行りのAI分野は文字通り日進月歩ですね。幸い git 管理されたリソースは任意の状態を復元できるので助かります。

この記事が気に入ったらサポートをしてみませんか?