ホームページ >Java >&#&チュートリアル >AI モデルの簡単な統合: AI モデルの構築と評価 (Spring Boot および Hugging Face)

AI モデルの簡単な統合: AI モデルの構築と評価 (Spring Boot および Hugging Face)

Susan Sarandon
Susan Sarandonオリジナル
2025-01-03 12:17:39639ブラウズ

AI 革命が到来しており、それに伴い、テキストを生成し、ビジュアルを作成し、複雑な問題を解決できる強力なモデルのリストが増え続けています。しかし、正直に言って、オプションが多すぎると、どのモデルがプロジェクトに最適であるかを判断するのは困難になる可能性があります。これらのモデルを迅速にテストし、その結果を実際に実行して確認し、どれを実稼働システムに統合するかを決定する方法があったとしたらどうでしょうか?

Hugging Face の推論 API を入力してください。これは、最先端の AI モデルを探索して活用するための近道です。プラグアンドプレイ ソリューションを提供することで、モデルのセットアップ、ホスティング、トレーニングの手間を省きます。新しい機能のブレーンストーミングを行っている場合でも、モデルの機能を評価している場合でも、Hugging Face を使用すると AI の統合がこれまでより簡単になります。

このブログでは、Spring Boot を使用して、AI モデルを簡単にテストおよび評価できる軽量のバックエンド アプリケーションを構築する手順を説明します。期待できることは次のとおりです:


?学べること

  • AI モデルへのアクセス: Hugging Face の推論 API を使用してモデルを探索およびテストする方法を学びます。
  • バックエンドの構築: これらのモデルと対話する Spring Boot アプリケーションを作成します。
  • テスト モデル: サンプル プロンプトを使用して、テキストと画像を生成するためのエンドポイントをセットアップし、テストします。

最終的には、さまざまな AI モデルをテストし、プロジェクトのニーズに対する適合性について情報に基づいた意思決定を行うための便利なツールが手に入ります。好奇心と実装の間のギャップを埋める準備ができたら、始めましょう!


⁉️ なぜハグ顔推論 API を使うのか?

Hugging Face が AI 統合にとって大きな変革となる理由は次のとおりです:

  • 使いやすさ: モデルをトレーニングしたりデプロイしたりする必要はありません。API を呼び出すだけです。
  • 多様性: テキスト生成、画像作成などのタスクのために 150,000 を超えるモデルにアクセスします。
  • スケーラビリティ: プロトタイピングや実稼働での使用に最適です。

?構築するもの

次のような Spring Boot アプリケーションである QuickAI を構築します。

  1. テキストを生成: プロンプトに基づいてクリエイティブなコンテンツを作成します。
  2. 画像を生成します: テキストの説明をビジュアルに変換します。
  3. API ドキュメントを提供します: Swagger を使用して API をテストし、操作します。

?はじめる

ステップ 1: ハグフェイスにサインアップする

まだアカウントをお持ちでない場合は、huggingface.co にアクセスしてアカウントを作成してください。

ステップ 2: API キーを取得する

アカウント設定に移動し、API キーを生成します。このキーにより、Spring Boot アプリケーションが Hugging Face の推論 API と対話できるようになります。

ステップ 3: モデルを探索する

ハグフェイスモデルハブをチェックして、ニーズに合ったモデルを見つけてください。このチュートリアルでは、以下を使用します:

  • テキスト生成モデル (例: HuggingFaceH4/zephyr-7b-beta)。
  • 画像生成モデル (例、stabilityai/stable-diffusion-xl-base-1.0)。

⁉️ Spring Boot プロジェクトのセットアップ

ステップ 1: 新しい Spring Boot プロジェクトを作成する

Spring Initializr を使用して、次の依存関係を持つプロジェクトをセットアップします。

  • Spring WebFlux: リアクティブでノンブロッキングの API 呼び出し用。
  • ロンボク島: 定型コードを削減します。
  • Swagger: API ドキュメント用。

ステップ 2: ハグ顔構成を追加する

Hugging Face API キーとモデル URL を application.properties ファイルに追加します。

huggingface.text.api.url=https://api-inference.huggingface.co/models/your-text-model
huggingface.api.key=your-api-key-here
huggingface.image.api.url=https://api-inference.huggingface.co/models/your-image-model

?次は何ですか?

コードを詳しく見て、テキストと画像を生成するサービスを構築しましょう。乞うご期待!

1. テキスト生成サービス:

@Service
public class LLMService {
    private final WebClient webClient;
    private static final Logger logger = LoggerFactory.getLogger(LLMService.class);

    // Constructor to initialize WebClient with Hugging Face API URL and API key
    public LLMService(@Value("${huggingface.text.api.url}") String apiUrl,
                      @Value("${huggingface.api.key}") String apiKey) {
        this.webClient = WebClient.builder()
                .baseUrl(apiUrl) // Set the base URL for the API
                .defaultHeader("Authorization", "Bearer " + apiKey) // Add API key to the header
                .build();
    }

    // Method to generate text using Hugging Face's Inference API
    public Mono<String> generateText(String prompt) {
        // Validate the input prompt
        if (prompt == null || prompt.trim().isEmpty()) {
            return Mono.error(new IllegalArgumentException("Prompt must not be null or empty"));
        }

        // Create the request body with the prompt
        Map<String, String> body = Collections.singletonMap("inputs", prompt);

        // Make a POST request to the Hugging Face API
        return webClient.post()
                .bodyValue(body) 
                .retrieve() 
                .bodyToMono(String.class) 
                .doOnSuccess(response -> logger.info("Response received: {}", response)) // Log successful responses
                .doOnError(error -> logger.error("Error during API call", error)) // Log errors
                .retryWhen(Retry.backoff(3, Duration.ofMillis(500))) // Retry on failure with exponential backoff
                .timeout(Duration.ofSeconds(5)) // Set a timeout for the API call
                .onErrorResume(error -> Mono.just("Fallback response due to error: " + error.getMessage())); // Provide a fallback response on error
    }
}

2. 画像生成サービス:

@Service
public class ImageGenerationService {

    private static final Logger logger = LoggerFactory.getLogger(ImageGenerationService.class);
    private final WebClient webClient;

    public ImageGenerationService(@Value("${huggingface.image.api.url}") String apiUrl,
                                  @Value("${huggingface.api.key}") String apiKey) {
        this.webClient = WebClient.builder()
                .baseUrl(apiUrl)
                .defaultHeader("Authorization", "Bearer " + apiKey)
                .build();
    }

    public Mono<byte[]> generateImage(String prompt) {
        if (prompt == null || prompt.trim().isEmpty()) {
            return Mono.error(new IllegalArgumentException("Prompt must not be null or empty"));
        }

        Map<String, String> body = Collections.singletonMap("inputs", prompt);

        return webClient.post()
                .bodyValue(body)
                .retrieve()
                .bodyToMono(byte[].class) / Convert the response to a Mono<byte[]> (image bytes)
                .timeout(Duration.ofSeconds(10)) // Timeout after 10 seconds
                .retryWhen(Retry.backoff(3, Duration.ofMillis(500))) // Retry logic
                .doOnSuccess(response -> logger.info("Image generated successfully for prompt: {}", prompt))
                .doOnError(error -> logger.error("Error generating image for prompt: {}", prompt, error))
                .onErrorResume(WebClientResponseException.class, ex -> {
                    logger.error("HTTP error during image generation: {}", ex.getMessage(), ex);
                    return Mono.error(new RuntimeException("Error generating image: " + ex.getMessage()));
                })
                .onErrorResume(TimeoutException.class, ex -> {
                    logger.error("Timeout while generating image for prompt: {}", prompt);
                    return Mono.error(new RuntimeException("Request timed out"));
                });
    }
}

プロンプトとその結果の例: ?

1. テキストベースのエンドポイント:

Effortless AI Model Integration: Build and Evaluate AI Models (Spring Boot and Hugging Face)

2. 画像ベースのエンドポイント:

Effortless AI Model Integration: Build and Evaluate AI Models (Spring Boot and Hugging Face)

?プロジェクトを探索する

始める準備はできましたか? QuickAI GitHub リポジトリをチェックして完全なコードを確認し、手順に従ってください。役に立ったと思ったら、⭐を付けてください。

ボーナス?

このプロジェクトをさらに進めてみませんか?

  • フロントエンド アプリの構築に役立つ API ドキュメント用に Swagger UI を構成しました。
  • お気に入りのフロントエンド フレームワーク (React、Angular、または単純な HTML/CSS/Vanilla JS など) を使用して、シンプルなフロントエンド アプリを構築します。

?おめでとうございます。ここまで進みました。

これで、Hugging Face の使い方がわかりましたか?:

  1. アプリケーションで AI モデルをすばやく使用するには。
  2. テキストの生成: プロンプトからクリエイティブなコンテンツを作成します。
  3. 画像の生成: テキストの説明をビジュアルに変換します。

?つながろう!

コラボレーションしたい場合や提案があれば、LinkedIn で私を見つけてください。ポートフォリオでは、ここ GitHub で私の他のプロジェクトも調べてください。

ご質問やご提案がございましたら、以下にコメントしてください。喜んで対応させていただきます。

コーディングを楽しんでください! ?

以上がAI モデルの簡単な統合: AI モデルの構築と評価 (Spring Boot および Hugging Face)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。