コンテンツにスキップ

自動テストケース生成機能 仕様書

概要

このドキュメントは、Knowledge Yard V2 の検索精度評価テストケースを自動生成する機能の仕様を定義します。


目的

背景

  • 手動で作成したテストケースは100%合格でも、実際のユーザー入力では失敗することがある
  • 「テストに穴がある」状態を可能な限り解消する
  • システマチックにテストを網羅し、フィードバック前に問題を発見する

目標

  • フィードバック激減: ユーザーからの「回答がおかしい」報告を最小化
  • カバレッジ向上: 145件 → 1,000件以上のテストケース
  • 自動化: 新しいドキュメント追加時も自動でテスト生成

アーキテクチャ

┌─────────────────────────────────────────────────────────────┐
│                    generate_test_cases.py                    │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐  │
│  │  Keywords    │───▶│  LLM API     │───▶│  Test Cases  │  │
│  │  (Predefined)│    │  (Variation) │    │  (YAML)      │  │
│  └──────────────┘    └──────────────┘    └──────────────┘  │
│                                                              │
│  Input:                                                      │
│  - ドキュメント×キーワード定義                               │
│  - 質問パターンテンプレート                                  │
│                                                              │
│  Output:                                                     │
│  - tests/generated_cases.yaml                                │
│                                                              │
└─────────────────────────────────────────────────────────────┘

質問パターン

パターン 説明 難易度
formal 正式な質問 easy 「有給休暇の規定について教えてください」
casual 口語・カジュアル medium 「有給ってどうなってるの?」
ultra_casual 極端な口語 hard 「ぶっちゃけ有給何日あんの?」
situation 状況説明型 hard 「来週休みたいんだけど」
short 極端に短い hard 「有給」
wrong_term 間違った用語 medium 「PTOは何日?」
negative 否定疑問 hard 「有給って取れないの?」
english_mix 英語混じり medium 「リーブの申請方法は?」
newbie 新入社員視点 medium 「入社したてで有給って使える?」
manager 管理職視点 hard 「部下に有給を取らせたいんだけど」

キーワード定義

構造

{
    "ドキュメント名": [
        {
            "keyword": "メインキーワード",
            "category": "カテゴリ",
            "related": ["関連語1", "関連語2", ...]
        },
        ...
    ]
}

対象ドキュメント

ドキュメント キーワード数 カテゴリ
就業規則 16 勤務時間, 休暇, 休職, 退職, 採用, 通勤, 服務規律, ハラスメント
賃金規程 4 給与
出張旅費規程 2 出張
育児介護休業規程 3 育児介護
コンプライアンス規程 2 コンプライアンス
内部通報 2 内部通報
稟議規程 3 稟議
取締役会規程 2 取締役会
重大インシデント 2 インシデント
経理規程 3 経理
人事委員会 2 人事
ISO9001 3 品質管理

合計: 44キーワード × 10パターン = 440テストケース(理論値)


使用方法

基本コマンド

# ドライラン(LLM呼び出しなし、構造確認のみ)
python tests/generate_test_cases.py --dry-run

# 全パターン生成
python tests/generate_test_cases.py

# 特定のドキュメントのみ
python tests/generate_test_cases.py --source "就業規則"

# 特定のパターンのみ
python tests/generate_test_cases.py --patterns casual ultra_casual situation

# 出力ファイル指定
python tests/generate_test_cases.py --output tests/new_cases.yaml

オプション

オプション 説明 デフォルト
--dry-run LLM呼び出しなしでテスト false
--output 出力ファイルパス tests/generated_cases.yaml
--source 対象ドキュメントフィルタ 全て
--patterns 生成するパターン 全10パターン
--api-url API URL(キーワード抽出用) http://localhost:7071/api

出力形式

生成されるYAML

# 自動生成テストケース
# Generated: 2025-12-20T22:00:00
# Total: 440 cases

- id: gen-syuugyouki-yuukyuu-casual
  question: "有給ってどうなってるの?"
  expected_keywords:
    - "有給休暇"
    - "年休"
    - "休み"
  expected_source: "就業規則"
  category: "休暇"
  difficulty: medium
  pattern: casual
  base_keyword: "有給休暇"

メタデータ

フィールド 説明
id 一意識別子(gen-{source}-{keyword}-{pattern}形式)
question LLMが生成した質問文
expected_keywords 回答に含まれるべきキーワード
expected_source 期待されるソースドキュメント
category 質問カテゴリ
difficulty 難易度(パターンから自動設定)
pattern 使用した質問パターン
base_keyword ベースとなったキーワード

運用フロー

初回生成

# 1. 全テストケースを生成
python tests/generate_test_cases.py --output tests/generated_cases.yaml

# 2. 既存テストとマージ(手動または自動)
# tests/eval_cases.yaml に追記

# 3. 評価実行
python tests/run_eval.py

# 4. 失敗ケースを分析・修正

定期更新

# 新しいドキュメント追加時
python tests/generate_test_cases.py --source "新ドキュメント名"

# 特定パターンの追加
python tests/generate_test_cases.py --patterns new_pattern

制限事項

カバーできないケース

ケース 理由 対策
文脈依存質問 「さっきの件」など ユーザーフィードバックで追加
複合質問 複数トピックの組み合わせ 手動テスト追加
社内俗語 予測不能 フィードバックで追加
誤解に基づく質問 無限のパターン フィードバックで追加

推奨運用

  1. 自動生成で80%カバー → 基本的な質問パターンを網羅
  2. フィードバックで20%補完 → 予想外のケースを追加
  3. 定期的に再生成 → キーワード追加時に再実行

API コスト

Azure OpenAI 使用量(推定)

項目 数値
キーワード数 44
1キーワードあたりトークン 約1,000(入力+出力)
合計トークン 約44,000
GPT-4o-mini コスト 約$0.02
GPT-4o コスト 約$0.50

推奨: GPT-4o-mini を使用(コスト効率が良い)


今後の拡張予定

短期

  • [ ] 既存テストケースとの重複チェック機能
  • [ ] 生成結果のプレビュー機能
  • [ ] バッチ実行モード

中期

  • [ ] インデックスからの動的キーワード抽出
  • [ ] ユーザーログからの質問パターン学習
  • [ ] A/Bテスト用のバリエーション生成

長期

  • [ ] CI/CDパイプラインへの統合
  • [ ] 自動リグレッションテスト

関連ファイル

ファイル 説明
tests/generate_test_cases.py 生成スクリプト本体
tests/eval_cases.yaml 手動テストケース
tests/generated_cases.yaml 自動生成テストケース
tests/run_eval.py 評価実行スクリプト

作成日: 2025-12-20