著者:Sven Loesekann
テクノロジー:角度、角型、角材料、タイプスクリプト、スプリングブート、スプリングAI、Openai、Ollama、PostgreSQL(Vector、hstore)、Liquibase、JPA、Gradle、Java
これは、Springaiを使用して図書館のドキュメントとチャットする方法を示すプロジェクトです。ドキュメントをアップロードできます。次に、通常のデータベースとベクトルデータベースに保存できます。 AIは、ベクトルデータベースに保存されているドキュメントのチャンクから埋め込みを作成するために使用されます。チャットでは、埋め込みで提出され、ベクトルデータベースへのリクエストに使用される質問をすることができます。最低距離のドキュメントベクトルは、データベースからドキュメントをロードし、ドキュメントコンテンツトークンに基づいてAIから回答を要求するために使用されます。これにより、AIはドキュメントの内容に基づいて答えを生成し、幻覚を制限できます。さらなる研究のために、ソースドキュメントへのリンクが提供されています。
このプロジェクトでは、Spring AIを使用したSpring Bootを使用して、OpenaiとVectorデータベースにアクセスします。 PostgreSQL DBは、ベクトル、HSTORE、UUID-OSSP拡張機能で使用されます。リキバーゼは、データベースの移行を管理するために使用されます。 JPAは、RESTコントローラーによるサービスのデータベースアクセスに使用されます。フロントエンドの角度の場合、角度の材料とタイプスクリプトを使用して、ドキュメントのテーブル、アップロードダイアログ、ドキュメントチャットを作成します。 Angular CLIは、Frontend BuildとGradleに使用され、プロジェクトビルドに使用されます。
Ollamaは、ローカルに実行されたAI/LLMモデルの使用に使用されます。 Ollamaは、ローカルマシンのDocker画像としてインストールまたは実行できます。 Ollamaは、さまざまなユースケースに対してAI/LLMモデルのライブラリをサポートしています。画像説明のためのLlavaなどのモデル、RAGベースの質問応答のFalcon、SQL生成用のSQLCoder、機能呼び出しのためのMixTralを使用できます。 Ollamaは、GPUが利用可能である場合はGPUを使用でき、CPUを使用しても機能します。 Spring AIには、AIサービスの使用と同様の使用を行うOllamaサポートがあります。現在のCPUには、多くの場合、パフォーマンスの問題があります。 CPUプロバイダーは、これらの問題を解決するために、将来AIエンジンをCPUに追加したいと考えています。
このプロジェクトは、Spring AIを使用したSpring Bootを使用して、PGVector拡張機能とOllamaでPostgreSQLを使用する画像データベースに疑問を投げかけます。インポートされ、サイズ変更された画像は、オラマでローカルに実行されるLLAVAモデルで生成される説明です。これらの説明は埋め込みで変換され、Vectorデータベースに説明とともに保存されます。画像とメタデータは、リレーショナルデータベースに保存されます。画像データベースへの質問が埋め込みになり、ベクトルデータベースが最近傍に照会されます。最高の一致は、画像と説明で返されます。結果はフロントエンドに表示されます。これにより、AI/LLMSが使用可能になる前に不可能な新しい種類の画像検索が可能になります。
このプロジェクトでは、Spring AIを使用して、LLMSを使用して質問をSQLクエリに変換し、フロントエンドで結果を表示します。リレーショナルデータセットに提供されるメタデータに基づいて、LLMはテーブルと列のメタデータの埋め込みを作成できます。また、このプロジェクトでは、特定の列のコンテンツの埋め込みを作成して、列をSQLクエリに結合して使用するかどうかを決定できるようにします。その埋め込みメタデータを使用すると、LLMは合理的なSQLクエリで質問を回し、結果をフロントエンドに表示することができます。フロントエンドは、柔軟な量の列と行を備えた角度の材料テーブルを使用します。
このプロジェクトでは、Spring AIを使用して、本に関する質問をOpenLibrary APIへのREST関数呼び出しに変えます。 llama3.1モデルと、APIを呼び出すスプリングAI関数を使用します。 API応答は、応答を作成するために使用されます。
このプロジェクトでは、Spring AIを使用してテストクラスを生成します。それを行うために、テストするクラスが提供され、テストするクラスが依存します。テストの例クラスも提供できます。 OllamaベースのAI/LLMは、すべての情報を使用してプロンプトを取得し、テストクラスのソースのドラフトを生成します。
このプロジェクトでは、Spring AIを使用して、本の概要を生成します。要約を生成するには、章の見出しと最後の章の後の見出しを提供する必要があります。次に、箇条書きの形での章の概要が生成されます。章の概要の本の要約が作成されています。
このプロジェクトは、Spring AIを使用して、ソースへのリンクを持つドキュメントの提供されたセットに基づいて回答を生成する方法を示しています。 Angular Frontendは、バックエンドのユーザーインターフェイスを提供し、応答を表示します。
このプロジェクトでは、Spring AIを使用してアップロードされた画像の説明を生成し、画像、説明、説明の埋め込みを保存する方法を示しています。画像データベースに尋ねられた質問は埋め込みになり、画像に最適な説明が返されます。 Angular Frontendは、結果を表示し、画像をアップロードするためのユーザーインターフェイスを提供します。
このプロジェクトでは、スプリングAIを使用して、テーブル/列の提供されたメタデータに基づいてSQLクエリを生成する方法を示しています。 Angular Frontendは、結果をテーブルに表示するユーザーインターフェイスを提供します。
このプロジェクトでは、Spring AIを使用してRESTインターフェイスを選択して、呼び出し、RESTコールのパラメーターを提供する方法を示しています。 Angular Frontendは、ユーザーインターフェイスを提供して、質問をし、残りの呼び出しの結果を表示します。
このプロジェクトでは、Spring AIを使用して、自然言語の質問で照会できる画像データベースを作成し、説明と最も近いマッチング画像を返すことができます。
Spring AIは、Openai / Ollama Servicesをシンプルで便利に使用するようになり、このプロジェクトはそれを示しています。
このプロジェクトには、システムコンテキスト図、コンテナ図、コンポーネント図があります。図はstructurizrで作成されています。ファイルranstructurizr.shには、structurizrを使用するコマンドが含まれており、ディレクトリstructurizrにはdslファイルが含まれています。
Helm Directoryには、Minikubeを使用してAIDOCUMENTLIBRARYCHATプロジェクトを実行するためのKubernetesセットアップがあります。ヘルムチャートは、必要なパラメーター(SpringProfileはvalues.yaml)を使用して、postgresデータベースとAidocumentLibraryChatを展開します。 JDK 16のリソース制限サポートを使用して、メモリを制限します。 KubernetesはCPUの使用を制限し、Spring Actuatorが提供するStartupprobesとLivensionProbesを使用します。
runpostgresql.shファイルには、ベクトル拡張をローカルに使用してpostgresql docker画像をプルして実行するコマンドがあります。
OpenAI APIキーを取得するには、https://platform.openai.comでアカウントを作成し、ユーザー設定にキーを作成する必要があります。そのキーをApplication.Propertiesに追加する必要があります: 'spring.ai.openai.api-key'。代替として、環境変数「Open-Api-Key」として提供できます。
OllamaはAIモデルをローカルで実行できます。ファイルrunollama.shには、Dockerコンテナとして実行するコマンドがあります。アプリケーションは、「useollama = true」Gradleビルドプロパティを使用して、依存関係を含む必要があります。アプリケーションは、Ollamaベースのモデルを使用するように構成/機能をオンにするには、「Ollama」プロファイルで開始する必要があります。 OllamaはGPU加速をサポートしています。
ベクトル拡張0.5.1以下のPostgreSQL
Java 21以降
Gradle 8.3以下
nodejs 18.13.x以降
NPM 8.19.x以降
Angular CLI 17以降