Java Quarkus Langchain を使用した本番環境の信頼性の高い AI エージェント - サービスとしての AI の一部

Susan Sarandon
リリース: 2024-10-27 08:53:30
オリジナル
1085 人が閲覧しました

著者

@herbertbeckman - LinkedIn
@rndtavares - LinkedIn

記事の一部

  1. Java Quarkus Langchain4j を使用した本番環境での信頼できる AI エージェント - パート 1 - サービスとしての AI (この記事)

  2. Java Quarkus Langchain4j 製品の信頼できる AI エージェント - パート 2 - メモリ (近日公開予定)

  3. Java Quarkus Langchain4j を使用した本番環境の信頼できる AI エージェント - パート 3 - RAG (近日公開予定)

  4. Java Quarkus Langchain4j を使用した本番環境の信頼された AI エージェント - パート 4 - ガードレール (近日公開)

導入

新興テクノロジーがブームになるたびに、企業はそれらを適用し、ビジネスの観点から待望の成果を得ることに熱心になります。それはイノベーションのための競争であり、先行者利益をめぐる戦いです。この競争の真っ只中、以前は不安を抱えていた企業が一連の要因により断念することがよくありますが、主な要因の 1 つはシステム全体の信頼性です。人工知能 (AI) は現在、最大の耐性テストの 1 つを経験しています。ソフトウェア開発者としての私たちの仕事は、AI を意識的に正しく使用することで一連のタスクとプロセスを実行できることを企業に実証することです。 。この記事では、企業が待望の結果を得るために本番環境の信頼できる AI エージェントに必要な機能とプロセスを 3 つのパートで説明し、市場で使用されているいくつかの概念を一緒に実装します。 。また、このソリューションの注意点についても詳しく説明します。開発者であるあなたには、できるだけ多くのテストを実施し、できるだけ多くのフィードバックを提供していただき、協力してこの理解をさらに深めていただくようお願いします。

実装された機能

  • チャット
  • ツール
  • チャットメモリー
  • 検索拡張生成 (RAG)
  • ガードレール

概念と定義

アシスタント vs 副操縦士 vs エージェント

最初に抱く疑問の 1 つは、エージェントが他の AI ユースケースとどう違うのかということです。エージェントには自動化に関連した機能があり、他のエージェントには支援と時間の最適化を目的としたアクティビティがあります。以下では、それぞれの使用例について詳しく説明します。

アシスタント

アシスタントは私たちを助け、情報を確認したり、知識を交換したりするのにかかる時間を大幅に節約してくれます。彼らは最も多様な主題をについてについて話しており、議論の前提を分析するために明確な推論が必要なときに役立ちます。もちろん、彼らにはそれ以上の権限がありますが、アシスタントの仕事に注目していただきたいのです。アシスタントはあなたに話しかけるだけです。彼はのみについて話したり、要約したり、詳細を説明したりすることができます。例として、ChatGPT、Claude AI、Gemini があります。

副操縦士

副操縦士はアシスタントよりも少し強力です。実際に何かを行うことができます。より具体的なアクションとしては、テキストの変更やリアルタイムでの変更の提案、変更中にヒントを与える、および/またはコンテキスト内で発生するイベントなどがあります。ただし、前に述べたように、これを行うにはコンテキストが必要であり、適切な提案を行うために必要なすべての情報が常に含まれているわけではありません。また、ユーザーの明示的な承認にも依存するため、ユーザーに直接依存することになります。良い例は、Github Copilot、Codium、Microsoft Copilot です。

エージェント

エージェントの主な目的は、明確な目的を持ったタスクを実行することです。その焦点は自動化にあり、具体的な作業を実際に自律的に実行します。これらすべては、当社がユーザーに提供するツールを通じてのみ可能になります。エージェントは LLM 自体ではなく、この LLM を調整するそのアプリケーションです。 LLM を意思決定を行うシステムの脳として、またその脳の本体のメンバーとしてそのアプリケーションを理解します。手が届かないのに、コップ一杯の水を買おうと考えることに一体何の意味があるのでしょうか?エージェントは、LLM に安全で監​​査可能、そして最も重要なことに信頼性の高い方法で何かを実行する権限を与えます。

行動を起こす

記事のこの最初の部分では、プロジェクトに AIService を実装します。これは AI プロバイダーとのインターフェイス層にすぎません。このプロジェクトでは OpenAI の LLM を使用しますが、お気に入りのプロバイダーを追加し、それに基づいて依存関係を調整することができます。

概念が明確に定義され、ここで何をするかがわかったので、コーディングに進みましょう!

プロジェクトの作成

Quarkus で依存関係マネージャーと拡張機能を選択して、Quarkus プロジェクトを作成します - コーディングを開始します。

プロジェクトの依存関係

プロジェクトの依存関係マネージャーとして Maven を使用します。以下は、追加した最初の依存関係です。

マベム

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-websockets-next</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-core</artifactId>
  <version>0.20.3</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-openai</artifactId>
  <version>0.20.3</version>
</dependency>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

プロジェクト構成

次のプロパティを src/main/resources/application.properties ファイルに追加します。

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-websockets-next</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-core</artifactId>
  <version>0.20.3</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-openai</artifactId>
  <version>0.20.3</version>
</dependency>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

YOUR_OPENAPI_KEY_HERE を、OpenAI プラットフォームに登録したキー (apiKey) に置き換えます。

ヒント: IDE で環境変数を作成し、プロパティ quarkus.langchain4j.openai.api-key を次のように変更します。

quarkus.tls.trust-all=true
quarkus.langchain4j.timeout=60s
quarkus.langchain4j.openai.api-key=YOUR_OPENAI_API_KEY_HERE
ログイン後にコピー
ログイン後にコピー

AIService の作成

まず、AIService を作成する必要があります。これは、エージェントに「個性」を与えるクラスになります。これを行うには、src/main/java/ ディレクトリに、次のコードを使用して Agent という名前のクラスを作成します。

quarkus.langchain4j.openai.api-key=${OPEN_API_KEY:NAO_ENCONTREI_A_VAR}
ログイン後にコピー
SystemPrompt (@SystemMessage) からわかるように、サッカーに特化したエージェントを作成しました。

チャットの作成

エージェントを作成したので、エージェントとのチャットを処理するクラスを作成する必要があります。これを行うには、src/main/java/ ディレクトリに、次のコードを使用して AgentWSEndpoint という名前のクラスを作成します。


これで、quarkus dev ui を通じて、現在まだアシスタントであるエージェントと会話できるようになります。以下にガイドとなるプリントをいくつか示します:
package <seupacote>;

import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import io.quarkiverse.langchain4j.RegisterAiService;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
@RegisterAiService
public interface Agent {

    @SystemMessage("""
            Você é um agente especializado em futebol brasileiro, seu nome é FutAgentBR
            Você sabe responder sobre os principais títulos dos principais times brasileiros e da seleção brasileira
            Sua resposta precisa ser educada, você pode deve responder em Português brasileiro e de forma relevante a pergunta feita

            Quando você não souber a resposta, responda que você não sabe responder nesse momento mas saberá em futuras versões.
            """)
    String chat(@UserMessage String message);
}
ログイン後にコピー

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service ツールの追加 (関数呼び出し)

次に、エージェントとアシスタントの違いを詳しく説明しましょう。ツール (関数呼び出し) を追加して、エージェントにタスクやプロセスを実行できるようにします。これをコーディングする前に、ツールの呼び出しがマクロでどのように機能するかを示す簡単な図を用意します。

出典: surface.aiAgente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service
ツール呼び出しがどのように機能するかがわかったので、ツールを使用してクラスを作成する必要があります。ツールごとに複数の異なるクラスを作成することもできます。この例では、「ToolBox」、つまりエージェントが使用できるツールをグループ化したツールボックスを作成します。コードは次のとおりです:

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-websockets-next</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-core</artifactId>
  <version>0.20.3</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-openai</artifactId>
  <version>0.20.3</version>
</dependency>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

その後すぐに、@ToolBox(AgentTools.class) アノテーションを通じて、使用可能なツールをエージェントに通知するアノテーションをエージェントに追加しました。次のようになります:

quarkus.tls.trust-all=true
quarkus.langchain4j.timeout=60s
quarkus.langchain4j.openai.api-key=YOUR_OPENAI_API_KEY_HERE
ログイン後にコピー
ログイン後にコピー

これで、エージェントに今何時か、今日の日付を尋ね、2 つの数値を加算して平方根を計算するように依頼できます。これらは説明のためにここで使用するツールですが、これを HTTP 呼び出し、ハッシュ関数、SQL クエリなどに置き換えることもできます。ここには多くの可能性があります。

Quarkus DEV UI によるテスト

これは、ツールを追加した後に実行されたテストの 1 つのスクリーンショットです:

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

ご覧のとおり、ツール呼び出しごとにログが作成され、LLM が実行を許可したコードを実際に呼び出したことを示します。

次のステップ

これで、エージェントでの作成の開始が完了しました。この記事のパート 2 ではエージェントにメモリを、パート 3 では RAG (Retrieval-Augmented Generation) を、パート 4 ではガードレールを間もなく追加します。楽しんでいただければ幸いです。またお会いしましょう。

しかし、これからは、この GitHub リポジトリにある記事のコードをすべて 確認することができます。

以上がJava Quarkus Langchain を使用した本番環境の信頼性の高い AI エージェント - サービスとしての AI の一部の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート