Gen Ai - Springboot / Langchain4J の例
生成 AI は、入力データに基づいて新しいコンテンツを生成できる人工知能のサブセットを指します。これには、テキスト、画像、音楽、さらにはビデオを作成できるモデルが含まれます。生成 AI の例には、OpenAI の GPT-3 や DALL-E などの言語モデルがあり、それぞれテキスト記述から人間のようなテキストと画像を生成できます。
生成 AI モデルは通常、膨大なデータセットでトレーニングされ、深層学習技術を使用してデータ内のパターンと構造を学習します。以下のような幅広い用途があります。
- 自然言語処理 (NLP): チャットボット、翻訳、コンテンツ作成用に人間のようなテキストを生成します。
- クリエイティブ アート: アートワーク、音楽、デザイン要素を作成します。
- データ拡張: 他の機械学習モデルをトレーニングするための追加データを生成します。
- ヘルスケア: 医療画像処理を支援し、個別の治療計画を作成します。
LangChain4J Gen AI API が開発者による Spring Boot AI アプリの構築にどのように役立つか
LangChain4J は、Spring Boot で構築されたものを含む Java アプリケーションへの大規模言語モデル (LLM) と AI 機能の統合を簡素化するように設計された Java ライブラリです。これが開発者にどのように役立つかは次のとおりです。
- LLM 用の統合 API: LangChain4J は、OpenAI や Google Vertex AI などの複数の LLM プロバイダーをサポートする統合 API を提供します。この抽象化により、開発者はコードベースを大幅に変更することなく、異なる LLM を切り替えることができます。
- 埋め込みストアの統合: さまざまな埋め込みストアと統合され、ベクトル化されたデータの効率的な処理が可能になります。これは、AI 応答を強化するために知識ベースから関連情報がフェッチされる検索拡張生成 (RAG) タスクに特に役立ちます。
- 機能のツールボックス: ライブラリには、プロンプト テンプレート、メモリ管理、出力解析のための包括的なツール セットが含まれています。これらのツールは、高レベルの抽象化とすぐに使用できるコンポーネントを提供することで、複雑な AI アプリケーションの構築に役立ちます。
- Spring Boot の統合: LangChain4J は Spring Boot をサポートしているため、開発者は堅牢でスケーラブルな AI アプリケーションを簡単に作成できます。この統合により、Spring の依存関係注入機能と構成管理機能を活用して、Spring Boot アプリケーションに AI サービスをシームレスに組み込むことができます。
- 例とドキュメント: LangChain4J は広範なドキュメントと例を提供し、さまざまなユースケースを通じて開発者をガイドし、アプリケーションに AI を活用した機能を実装する方法を示します。
ケーススタディ: ヘルスケア アプリ - Gen Ai 対応の診断マイクロサービス
Gen AI の例: エンタープライズ機能に関する 8 つの LLM (3 つのクラウドベースと 5 つのローカル) の比較
以下の比較は、LangChain4J API (OpenAI ChatGPT でサポートされている) で利用可能な機能に基づいています。これらの機能は、Gen AI ベースのエンタープライズ アプリ開発に不可欠です。
# | 例 | GPT4o | メタ・ラマ3 | ミストラル | マイクロソフト ファイ-3 | Googleジェマ | TIIファルコン2 | クロード3 | ジェミニ 1.5 |
---|
1. | こんにちは世界 | ? | ? | ? | ? | ? | ? | ? | ? |
2. | 複雑な世界 | ? | ? | ? M1 | ? | ? | ? | ? | ? |
3. | カスタムデータ | ? | ? | ? | ? | ? | ? F1 | ? | ? |
4. | 画像生成 | ? | ? L1 | ? M2 | ? P1 | ? | ? F2 | ? | ? |
5. | プロンプトテンプレート | ? | ? | ? M3 | ? | ? | ? | ? | ? |
6. | ツール | ? | ? L2 | ? M4 | ? P2 | ? G1 | ? F3 | ? | ? G1 |
7. | チャットメモリー | ? | ? | ? | ? P3 | ? G2 | ? | ? | ? G2 |
8. | フューショット | ? | ? | ? M5 | ? | ? | ? | ? | ? G3 |
9. | 言語翻訳者 | ? | ? | ? M6 | ? | ? | ? | ? | ? |
10. | センチメントアナライザー | ? | ? | ? | ? | ? | ? | ? | ? |
11. | データエクストラクタ | ? O1 | ? L3 | ? M7 | ? P4 | ? G3 | ? F4 | ? | ? G4 |
12. | 永続ストア | ? | ? | ? M8 | ? P5 | ? G4 | ? | ? | ? |
8 つの LLM の検索拡張生成 (RAG) の例
# | 例 | GPT4o | メタ・ラマ3 | ミストラル | マイクロソフト ファイ-3 | Googleジェマ | TIIファルコン2 | クロード3 | ジェミニ 1.5 |
---|
51. | 単純 | ? | ? | ? | ? | ? | ? | ? | ? |
52. | セグメント | ? | ? | ? | ? | ? | ? | ? | ? |
53. | クエリトランスフォーマー | ? | ? | ? | ? | ? | ? | ? | ? |
54. | クエリルーター | ? | ? L4 | ? M9 | ? P6 | ? G4 | ? F5 | ? | ? G5 |
55. | 再ランキング | ? | ? | ? | ? | ? | ? | ? | ? |
56. | メタデータ | ? | ? | ? | ? | ? | ? | ? | ? |
57. | 複数のコンテンツレトリバー | ? | ? | ? | ? | ? | ? | ? | ? |
58. | コンテンツ取得のスキップ | ? | ? | ? | ? | ? | ? | ? | ? |
59. | ヘルスケアアプリ | ? | ? | ? | ? | ? | ? | ? | ? |
エンタープライズ機能に基づくトップ LLM ランキング
# | ランク | 会社 | LLM | スコア | カテゴリ |
---|
1 | 1 | 人間的 | クロード 3 俳句 | 21/21 | 雲 |
2 | 2 | オープンAI | チャット GPT 4o | 20/21 | 雲 |
3 | 3 | メタ | ラマ 3 | 17/21 | 地元 |
4 | 4 | TII | ファルコン2 | 16/21 | 地元 |
5 | 4 | グーグル | ジェミニ 1.5 プロ | 16/21 | 雲 |
6 | 4 | グーグル | ジェマ | 16/21 | 地元 |
7 | 5 | マイクロソフト | ファイ3 | 15/21 | 地元 |
8 | 6 | ミストラル | ミストラル | 12/21 | 地元 |
注: クラウドベースの LLM は 5,000 億を超えるパラメータをサポートしますが、ローカル LLM はほとんどが 80 億のパラメータに基づいています。
テストスコアの詳細を確認してください
ローカル LLM のインストール
Ollama を使用してローカル LLM をインストールするには
- メタ・ラマ3
- Googleジェマ
- マイクロソフト PHI-3
- TIIファルコン2
- ミストラル
- ウィザードの数学
インストールガイドを確認してください。
クラウド LLM をテストするためのキーを取得する
登録して API キーを取得する
- Open AI - ChatGPT (API キーはここで作成できます: https://platform.openai.com/api-keys)
- Anthropic - クロード 3 (API キーはここで作成できます: https://console.anthropic.com/settings/keys)
- Google Cloud - (https://console.cloud.google.com/ - 手順については AiConstants.java を確認してください)
- Cohere - (API キーはこちら: https://dashboard.cohere.com/welcome/register)
- HuggingFace - (API キーはこちら: https://huggingface.co/settings/tokens)
- Rapid - (API キーはこちら: https://rapidapi.com/judge0-official/api/judge0-ce)
これらのキーを環境に設定します
// API Keys -----------------------------------------------------------------------
// OpenAI API key here: https://platform.openai.com/account/api-keys
public static final String OPENAI_API_KEY = System.getenv("OPENAI_API_KEY");
// Cohere API key here: // https://dashboard.cohere.com/welcome/register
public static final String COHERE_API_KEY = System.getenv("COHERE_API_KEY");
// Anthropic API key here:: https://console.anthropic.com/settings/keys
public static final String ANTHROPIC_API_KEY = System.getenv("ANTHROPIC_API_KEY");
// HuggingFace API key here: https://huggingface.co/settings/tokens
public static final String HF_API_KEY = System.getenv("HF_API_KEY");
// Judge0 RapidAPI key here: https://rapidapi.com/judge0-official/api/judge0-ce
public static final String RAPID_API_KEY = System.getenv("RAPID_API_KEY");
Gen AI - コードパッケージの構造
パッケージ io.fusion.air.microservice.ai.genai
- コントローラー (例をテストするための残りのエンドポイント)
- コア
- アシスタント (LangChain4J AiService に基づく)
- モデル (コードで使用されるデータ モデル)
- プロンプト (特定の出力を得る構造化されたプロンプト)
- サービス (LLM 固有のビジネス ロジックはすべての例で再利用されます。)
- ツール (LLM 検索に基づいて呼び出される関数)
- 例 (Claude 3、Falcon 2、GPT 4o、Gemini、Gemma、Llama3、Mistral、Phi-3、Wizard Math)
- utils (ChatLanguageModel と構成、API キー、およびコンソール ランナーを作成するための汎用コード)
コード構造
SpringBoot アプリ起動後のクイックテスト
ChatGPT 4o を使用した感情分析
ChatGPT 4o を使用したコンテンツモデレーション
RAG(カスタムデータ)を利用したチャットボット - 導入事例:レンタカーサービス
RAG アーキテクチャ
検索拡張生成 (RAG) は、権威ある外部知識ベースを組み込むことによって、大規模言語モデル (LLM) の出力を強化します。 LLM は膨大なデータセットでトレーニングされ、数十億のパラメーターを利用して質問応答、言語翻訳、テキスト補完などのタスクに対する応答を生成しますが、RAG はモデルのトレーニング データを超えた特定の最新の情報ソースを参照することでこれらの出力を最適化します。このプロセスにより、LLM の機能が大幅に拡張され、モデルの再トレーニングを必要とせずに特殊なドメインや組織の内部知識に対応できるようになります。その結果、RAG は、生成されたコンテンツの関連性、正確さ、コンテキストの適切性を維持するためのコスト効率の高いソリューションを提供します。
大規模言語モデル (LLM) は、いくつかの課題に直面しています。
- 正しい答えがない場合、誤った情報を提供する可能性があります。
- ユーザーが具体的な最新の応答を期待している場合、古い情報や一般的な情報を提供する可能性があります。
- 信頼できない情報源に基づいて応答を生成する可能性があります。
- 異なるトレーニング ソースが異なる概念を説明するために同じ用語を使用する場合、用語の混乱により不正確な応答が生成される可能性があります。
検索拡張生成 (RAG) は、信頼できる事前に決定された知識ソースから関連情報を取得するようにモデルを指示することで、LLM に関連するいくつかの課題に対処します。このアプローチにより、組織はモデルによって生成されたコンテンツをより詳細に制御できるようになり、精度と関連性が確保されます。さらに、LLM が応答を作成するために使用するソースとプロセスについての明確な洞察をユーザーに提供します。
(カスタムデータ) レンタカーサービス契約を伴う LLM を使用した会話
ChatGPT 4o を使用したデータ抽出
LangChain4J は 2 つの抽象化レベルで動作します。
- レベルが低い。このレベルでは、最も自由度が高く、ChatLanguageModel、UserMessage、AiMessage、EmbeddingStore、Embedding などのすべての下位コンポーネントにアクセスできます。これらは、LLM を利用したアプリケーションの「プリミティブ」です。それらを組み合わせる方法は完全に制御できますが、さらにグルー コードを記述する必要があります。
- ハイレベル。このレベルでは、AiServices や Chains などの高レベル API を使用して LLM と対話するため、複雑さや定型文はすべて隠蔽されます。動作を柔軟に調整したり微調整したりすることはできますが、これは宣言的な方法で行われます。
続きを読む... LangChain4J の概要
パッケージ構造
前提条件
- スプリングブート 3.2.4
- ジャワ22
- Jakarta EE 10 (jakarta.servlet. 、jakarta.persistence. 、javax.validation.*)
- PostgreSQL データベース 14
- オラマ 0.1.38
デフォルトでは、アプリは H2 インメモリ データベースを使用します。これにはデータベースのセットアップは必要ありません。
ステップ 1.1 - はじめに
- git クローン https://github.com/arafkarsh/ms-springboot-324-ai.git
- cd ms-springboot-324-ai
- CDデータベース
- README.md を読んでデータベース (PostgreSQL データベース) をセットアップします。
- デフォルト (開発モード) では、アプリはインメモリ H2 データベースを使用します。
ステップ 1.2 - コンパイル (コードの準備ができたら)
1.2.1 コードをコンパイルする
ms-springboot-324-ai から「コンパイル」を実行します。
- コンパイルまたは ./compile (Linux および Mac OS で実行)
- mvn クリーン; mvn -e パッケージ; (すべてのプラットフォーム)
- IDE コンパイル オプションを使用する
1.2.2 「コンパイル」スクリプトの動作
- 対象フォルダーをクリーンアップする
- ビルド番号を生成します。およびビルド日 (application.properties のバックアップを取得)
- 最終出力の SpringBoot fat jar と Maven Thin jar をビルドする
- jar ファイル (および依存関係) を src/docker フォルダーにコピーします。
- application.properties ファイルを現在のフォルダーと src/docker フォルダーにコピーします。
ステップ 1.2.2 では、application.properties ファイルが「コンパイル」スクリプトによって自動生成されます。これは重要なステップです。 application.properties ファイルが生成されないと、サービスは実行されません。事前に構築されたアプリケーションプロパティファイルがあります。
ステップ 1.3 - 実行
1.3.1 サービスの開始
- run または ./run (Linux または Mac OS で実行)
- prod を実行します (実稼働プロファイルを実行するため、デフォルトは開発プロファイルです)
- mvn spring-boot:run (すべてのプラットフォーム - プロファイル開発 H2 インメモリ データベース)
- mvn spring-boot:run -Dspring-boot.run.profiles=prod (すべてのプラットフォーム - プロファイル prod PostgreSQL DB)
1.3.2 サービスをテストする
- test OR ./test (Linux または Mac OS で実行)
- (テスト スクリプトから)curl コマンドを直接実行します。
チャットモデル
- OpenAI (利用可能な例)
- Ollama - ローカル マシン上で AI モデルを実行します (サンプルが利用可能)
- Azure オープン AI
- アマゾンの岩盤
- コヒアの命令
- AI21 Labs のジュラシック 2
- メタのラマ2
- アマゾンのタイタン
- Google Vertex AI Palm
- Google ジェミニ
- HuggingFace - Llama2 などの Meta のモデルを含む数千のモデルにアクセス
- ミストラルAI
テキストから画像へのモデル
- OpenAI と DALL-E (利用可能な例)
- 安定性AI
文字起こし(音声からテキストへ)モデル
モデルの埋め込み
- OpenAI
- オラマ
- Azure OpenAI
- ONNX
- PostgresML
- 岩盤の凝集
- 岩盤タイタン
- Google VertexAI
- ミスタルAI
Vector Store API は、さまざまなプロバイダー間での移植性を提供し、移植性を維持する新しい SQL のようなメタデータ フィルタリング API を備えています。
ベクトルデータベース
- Azure ベクトル検索
- 彩度
- ミルバス
- Neo4j
- PostgreSQL/PGVector
- 松ぼっくり
- レディス
- ウィアビエイト
- クドラント
サポートされているモデルは、
- OpenAI
- Azure OpenAI
- バーテックスAI
- ミストラルAI
CRUD操作例を確認する
- テスト用に REST エンドポイントを使用した Postman をセットアップする
- CRUDの例
- JWT トークンの例
CRUD_Examples.md を確認します。
(C) 著作権 2024 : Apache 2 ライセンス : 著者: Araf Karsh Hamid
* Apache License バージョン 2.0 (「ライセンス」) に基づいてライセンスされています。
* ライセンスに準拠する場合を除き、このファイルを使用することはできません。
* ライセンスのコピーは次の場所から入手できます。
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 適用される法律で義務付けられている場合、または書面による同意がない限り、ソフトウェア
* ライセンスに基づいて配布されるものは、「現状のまま」で配布されます。
* 明示的か黙示的かを問わず、いかなる種類の保証や条件もありません。
* 権限を管理する特定の言語についてはライセンスを参照してください。
* ライセンスに基づく制限。