Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

langchain4j-testing-strategies

LangChain4jアプリケーション向けのユニットテスト・統合テスト・AIモックパターンを提供します。モックLLMレスポンスの作成、検索チェーンのテスト、RAGワークフローの検証、TestcontainersベースのJava AIサービス統合テストの実装が可能です。AIサービスのユニットテスト、LangChain4jコンポーネントの統合テスト、AIモデルのモック化、LLMベースのJavaアプリケーションのテストを行う際に使用してください。

description の原文を見る

Provides unit test, integration test, and mock AI patterns for LangChain4j applications. Creates mock LLM responses, tests retrieval chains, validates RAG workflows, and implements Testcontainers-based integration tests for Java AI services. Use when unit testing AI services, integration testing LangChain4j components, mocking AI models, or testing LLM-based Java applications.

SKILL.md 本文

LangChain4J Testing Strategies

Overview

LangChain4j の AI Services、RAG システム、ツール実行のためのユニットテスト、Testcontainers を使った統合テスト、エンドツーエンド検証のパターンです。

使用時機

  • AI サービスのユニットテスト: LangChain4j AiServices を使用するサービスの高速で独立したテストが必要な場合
  • LangChain4j コンポーネントの統合テスト: 実際の ChatModel、EmbeddingModel、RAG パイプラインを Testcontainers でテストする場合
  • AI モデルのモック: 外部 API を呼び出さずに確定的なレスポンスが必要な場合
  • LLM ベースの Java アプリケーションのテスト: RAG ワークフロー、ツール実行、取得チェーンを検証する場合

Instructions

1. モックを使用したユニットテスト

高速で独立したテストのためにモックモデルを使用します。references/unit-testing.md を参照してください。

ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(any(String.class)))
    .thenReturn(Response.from(AiMessage.from("Mocked response")));

var service = AiServices.builder(AiService.class)
        .chatModel(mockModel)
        .build();

2. テスト用の依存関係を設定

Maven/Gradle の依存関係をセットアップします。references/testing-dependencies.md を参照してください。

  • langchain4j-test - ガードレール アサーション
  • testcontainers - コンテナ化されたテスト
  • mockito - 外部依存関係のモック
  • assertj - 流暢なアサーション

3. Testcontainers を使用した統合テスト

実際のサービスでテストします。references/integration-testing.md を参照してください。

@Testcontainers
class OllamaIntegrationTest {
    @Container
    static GenericContainer<?> ollama = new GenericContainer<>(
        DockerImageName.parse("ollama/ollama:0.5.4")
    ).withExposedPorts(11434);

    @Test
    void shouldGenerateResponse() {
        // コンテナのヘルスチェック
        assertTrue(ollama.isRunning());
        await().atMost(30, TimeUnit.SECONDS)
            .until(() -> ollama.getLogs().contains("API server listening"));

        ChatModel model = OllamaChatModel.builder()
                .baseUrl(ollama.getEndpoint())
                .build();

        // テスト前にモデルがレスポンスすることを確認
        assertDoesNotThrow(() -> model.generate("ping"));

        String response = model.generate("Test query");
        assertNotNull(response);
    }
}

4. 高度な機能

ストリーミング、メモリ、エラーハンドリング パターンは references/advanced-testing.md に記載されています。

5. テスティング ワークフロー

references/workflow-patterns.md のテスト ピラミッドに従います:

  • 70% ユニットテスト: モックを使用した高速で独立したテスト
  • 20% 統合テスト: ヘルスチェック付きの実際のサービス
  • 10% エンドツーエンドテスト: 完全なワークフロー
70% ユニットテスト ─ Mock ChatModel、ガードレール、エッジケース
20% 統合テスト ─ Testcontainers、ベクトルストア、RAG
10% エンドツーエンドテスト ─ 完全なユーザージャーニー

トラブルシューティング

  • コンテナが起動しない: Docker デーモンが実行中であることを確認し、イメージが存在することを確認し、タイムアウトを増やします
  • モデルが応答しない: baseUrl が正しいことを確認し、コンテナログをチェックし、モデルが読み込まれていることを確認します
  • テストタイムアウト: 遅いモデルの場合は @Timeout 期間を増やし、コンテナのリソース制限を確認します
  • テストが不安定: アサーション前にリトライロジックまたはヘルスチェックを追加します

Examples

ユニットテスト

@Test
void shouldProcessQueryWithMock() {
    ChatModel mockModel = mock(ChatModel.class);
    when(mockModel.generate(any(String.class)))
        .thenReturn(Response.from(AiMessage.from("Test response")));

    var service = AiServices.builder(AiService.class)
            .chatModel(mockModel)
            .build();

    String result = service.chat("What is Java?");
    assertEquals("Test response", result);
}

Testcontainers を使用した統合テスト

@Testcontainers
class RAGIntegrationTest {
    @Container
    static GenericContainer<?> ollama = new GenericContainer<>(
        DockerImageName.parse("ollama/ollama:0.5.4")
    );

    @BeforeAll
    static void waitForContainerReady() {
        await().atMost(60, TimeUnit.SECONDS)
            .until(() -> ollama.getLogs().contains("API server listening"));
    }

    @Test
    void shouldCompleteRAGWorkflow() {
        assertTrue(ollama.isRunning());

        var chatModel = OllamaChatModel.builder()
                .baseUrl(ollama.getEndpoint())
                .build();

        var embeddingModel = OllamaEmbeddingModel.builder()
                .baseUrl(ollama.getEndpoint())
                .build();

        var store = new InMemoryEmbeddingStore<>();
        var retriever = EmbeddingStoreContentRetriever.builder()
                .chatModel(chatModel)
                .embeddingStore(store)
                .embeddingModel(embeddingModel)
                .build();

        var assistant = AiServices.builder(RagAssistant.class)
                .chatLanguageModel(chatModel)
                .contentRetriever(retriever)
                .build();

        String response = assistant.chat("What is Spring Boot?");
        assertNotNull(response);
        assertTrue(response.contains("Spring"));
    }
}

ベストプラクティス

  • テスト分離のために @BeforeEach/@AfterEach を使用
  • ユニットテストで実際の API を呼び出さない。常にモックを使用
  • 外部サービス呼び出しに @Timeout を含める
  • 成功とエラーハンドリングの両方のシナリオをテスト
  • レスポンスの一貫性とエッジケースを検証

共通パターン

モック戦略

ChatModel mockModel = mock(ChatModel.class);
when(mockModel.generate(anyString())).thenReturn(Response.from(AiMessage.from("Mocked")));
when(mockModel.generate(eq("Hello"))).thenReturn(Response.from(AiMessage.from("Hi")));
when(mockModel.generate(contains("Java"))).thenReturn(Response.from(AiMessage.from("Java")));

アサーション ヘルパー

assertThat(response).isNotNull().isNotEmpty();
assertThat(response).containsAll(expectedKeywords);
assertThat(response).doesNotContain("error");

リファレンス ドキュメント

  • Testing Dependencies - Maven/Gradle 設定
  • Unit Testing - モックモデル、ガードレール
  • Integration Testing - Testcontainers、実際のサービス
  • Advanced Testing - ストリーミング、メモリ、エラーハンドリング
  • Workflow Patterns - テスト ピラミッド、ベストプラクティス

制約と警告

  • AI レスポンスは非決定論的。信頼性の高いユニットテストにはモックを使用
  • テストでの実際の API 呼び出しを避け、コストとレート制限を防止
  • 統合テストには Docker が必要。コンテナのヘルスチェックを使用
  • RAG テストは適切にシードされたエンベディング ストアが必要
  • モックベースのテストは実際の LLM の動作を保証できない。統合テストで補足
  • テスト固有の設定プロファイルを使用。本番データに影響を与えない

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
giuseppe-trisciuoglio
リポジトリ
giuseppe-trisciuoglio/developer-kit
ライセンス
MIT
最終更新
不明

Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: giuseppe-trisciuoglio · giuseppe-trisciuoglio/developer-kit · ライセンス: MIT