活用テクニック2026年2月25日

AI アシスト学習設定の仕組み — LLM × スキーマ解析で実現する自動設定提案

Qast の AI アシスト学習設定がどのように動作しているかを技術的に解説します。LLM へのプロンプト設計、スキーマ情報の活用、提案結果のバリデーションまで、裏側のアーキテクチャを紹介します。

AI アシスト学習設定のアーキテクチャ図

Qast の AI アシスト学習設定は、単に LLM に「いい感じに設定して」と頼んでいるわけではありません。データセットのスキーマ情報、利用可能なアルゴリズムカタログ、評価指標の一覧を構造化して LLM に渡し、返却された JSON をバリデーション・サニタイズする多段パイプラインで実現しています。この記事では、その仕組みを詳しく解説します。

全体の処理フロー

AI アシスト学習設定は、以下の 7 ステップで動作します。

  1. 1

    データセット情報の取得

    データセット ID からデータセットのメタ情報(名前・行数・列数・ステータス)を取得します。ステータスが ready でない場合はエラーを返します。

  2. 2

    スキーマ情報の取得

    データセットに紐づくスキーマ(各カラムの名前・推論されたデータ型・ターゲットフラグ・ID フラグ・除外フラグ)を取得します。

  3. 3

    カタログ情報の取得

    利用可能な学習器(learner)、評価関数(metric)、損失関数(loss)のカタログを並列で取得します。各エントリにはキー名、表示名、対応タスクタイプが含まれます。

  4. 4

    プロンプトの組み立て

    システムプロンプト(AI の役割定義・出力フォーマット指定)とユーザープロンプト(データセット情報 + カラム一覧 + カタログ一覧 + ユーザーの自然言語プロンプト)を構造化して組み立てます。

  5. 5

    LLM の呼び出し

    組み立てたプロンプトを LLM(OpenAI GPT や Anthropic Claude)に送信します。temperature は 0.2 に設定し、安定した出力を得ます。

  6. 6

    レスポンスのパースとバリデーション

    LLM の返答から JSON を抽出し、Zod スキーマでバリデーションします。マークダウンのコードフェンスが含まれていても正しく処理できます。

  7. 7

    サニタイズ(照合チェック)

    提案された学習器キー・評価関数キー・カラム名が実際に存在するかを照合し、不正なキーを除外します。これにより LLM のハルシネーション(存在しないアルゴリズム名を生成してしまうケース)を防ぎます。

プロンプト設計のポイント

AI アシスト学習設定のプロンプトは、システムプロンプトとユーザープロンプトの 2 層構造になっています。システムプロンプトでは AI の役割(AutoML エキスパート)を定義し、出力フォーマット(JSON スキーマ)を厳密に指定します。ユーザープロンプトには、データセットのメタ情報・カラム一覧・利用可能な学習器/評価関数/損失関数のリストを構造化して含めます。

カラム一覧は最大 50 列までに制限しています。これは LLM のコンテキスト長を節約しつつ、十分な情報を提供するためのバランスです。各カラムにはデータ型の推論結果(numeric, categorical, datetime, text など)も含まれるため、AI はカラム名だけでなくデータの特性も考慮して提案を行います。

json
{
  "taskType": "classification",
  "targetColumn": "churn",
  "learners": ["xgboost", "lightgbm", "random_forest"],
  "evalFn": "f1",
  "lossFn": "log_loss",
  "cvFolds": 5,
  "hpo": true,
  "hpoNTrials": 30,
  "searchMode": "ai_stepwise",
  "dateColumn": null,
  "excludeColumns": ["customer_id", "phone_number"],
  "reasoning": "データにchurnカラム(離脱フラグ)があり...",
  "columnNotes": [
    {"name": "customer_id", "note": "顧客IDのため学習から除外推奨"},
    {"name": "tenure", "note": "契約期間。離脱予測に有効な特徴量"}
  ]
}

バリデーションとサニタイズ

LLM の出力は必ずしも正確ではありません。存在しないアルゴリズム名を生成したり、データセットにないカラム名を参照したりする可能性があります。そこで Qast では、LLM の返答を 2 段階でチェックしています。

第 1 段階は Zod スキーマによる構造バリデーションです。taskType が定義済みの値であること、learners が文字列配列であること、cvFolds が 2〜20 の範囲であることなど、型と範囲をチェックします。第 2 段階はカタログ・スキーマとの照合(サニタイズ)です。提案された学習器キーが実際のカタログに存在するか、目的変数や除外列がデータセットのカラムに存在するかを検証し、不正なエントリを除外します。

LLM が生成した学習器キーがすべて無効だった場合は、フォールバックとして LLM が提案した上位 3 つをそのまま採用します。これにより、カタログの更新とプロンプトの同期がずれた場合でも、完全にエラーになることを防いでいます。

LLM クライアントの抽象化

Qast の AI 機能は特定の LLM プロバイダーに依存しない設計になっています。LLMClient インターフェースを定義し、OpenAI と Anthropic の両方を同じインターフェースで利用できます。環境変数で切り替え可能なため、コスト・精度・レイテンシの要件に応じてプロバイダーを選択できます。

また、テスト時にはモックの LLM クライアントを注入できる設計になっています。これにより、実際の API を呼ばずに AI アシスト機能の単体テストが可能です。

プロンプトのバージョニング

AI アシスト学習設定のプロンプトにはバージョン番号が付与されています。API のレスポンスにはプロンプトバージョンが含まれるため、どのバージョンのプロンプトで生成された提案かを追跡できます。プロンプトの改善や A/B テストを行う際に、この情報が役立ちます。

Qast を導入してみませんか?

導入のご相談やデモのご依頼は、お気軽にお問い合わせください。