idea_world_labDEV JOURNAL
2026年7月13日月曜日

Qwen Validation Debugger プロンプト適用構造

作成日: 2026年 7月 13日

文書目的

この文書は tools/qwen-validation-debugger に実際に適用されたプロンプトを整理する。

解釈を付け加えず、コードがどの関数でどのプロンプトを作成し、どの API に送信し、どのような応答形式を期待するかだけを記録する。

対象ファイル

ファイル この文書で見る内容
tools/qwen-validation-debugger/core.js 実際の Qwen リクエストに入るプロンプト生成関数
tools/qwen-validation-debugger/server.js プロンプトを受け取り Qwen/OpenAI 互換 API に送るルーティング
tools/qwen-validation-debugger/public/app.js どのボタン/操作がどの API とプロンプトを呼び出すか

API 呼び出し共通構造

server.js の callQwen() はすべてのプロンプトを同じ方式で送信する。

{
  model,
  messages: [{ role: 'user', content: prompt }],
  temperature: 0
}
値 出典
endpoint ブラウザ入力値 qwenEndpoint
model ブラウザ入力値 qwenModel
apiKey ブラウザ入力値 qwenApiKey
prompt core.jsのプロンプト生成関数の返り値

APIキーはブラウザからリクエストボディでサーバーに渡されますが、localStorageには保存しません。

プロンプト呼び出し経路

画面操作 ブラウザ関数 サーバー API core.js プロンプト関数 応答整理関数
項目ラベリング classifyItem() POST /api/classify-item buildClassificationPrompt() extractJsonObject(), normalizeClassification()
コード生成 generateCode() POST /api/generate-code buildCodePrompt() extractJsonObject(), normalizeGeneratedCode()
JSONL生成 generateJsonl() POST /api/generate-jsonl buildJsonlPrompt() extractJsonObject()
JSONL検証 verifyJsonl() POST /api/verify-jsonl buildVerificationPrompt() normalizeYesNo()
JSONLプロンプトプレビュー renderSlot() API呼び出しなし buildJsonlPromptPreview() 画面表示専用

テーブル定義

プロンプトで使用するテーブル定義は core.js の TABLE_DEFINITIONS にあります。

docs_chunks

項目 値
label docs_chunks
purpose 公式ドキュメントの説明型根拠がコードチャンクと直接合っているか確認する。
directFields content, code_blocks, api_symbols, heading, symbol

schema:

chunk_id
doc_version
source_url
source_file
source_sha256
doc_type
symbol
section_path
heading
content
code_blocks
language_tags
godot_version_tags
api_symbols
token_count
metadata

api_mapping

項目 値
ラベル api_mapping
目的 Godot 3からGodot 4へ名前、クラス、関数、シンボルがどのように変わるかの根拠がコードチャンクと直接合っているか確認する。
directFields source_api, target_api, match_terms, notes

schema:

mapping_id
source_api
target_api
change_type
godot_from
godot_to
confidence
evidence_chunk_ids
match_terms
notes
negative_patterns

label_prototypes

項目 値
label label_prototypes
purpose 単なる名前変更ではなく、関数の使用方法、引数の構成、呼び出しパターンが全体として変わる例がコードチャンクと直接合致しているか確認する。
directFields input_pattern, expected_finding, recommended_action, validator_rules.required_when_seen_in_code, validator_rules.before_code, validator_rules.after_code

schema:

prototype_id
label
task_type
input_pattern
expected_finding
recommended_action
evidence_mapping_ids
evidence_chunk_ids
severity
validator_rules

スロットケース定義

getSlotCase({ tableName, versionKey, expectation })は JSONL 生成プロンプトに入る goal、generationRule、expectedAnswer を決定します。

条件 label expectedAnswer goal generationRule
docs_chunks + positive 説明根拠 JSONL はい SOURCE_CODE を直接説明する公式ドキュメント型 JSONL を作成する。 JSONL の説明/コード/シンボル フィールドのうち少なくとも一つは SOURCE_CODE 内の実際の文字列/API 呼び出しと直接一致している必要があります。
docs_chunks + negative 他のコード説明 JSONL いいえ SOURCE_CODE と一部 API/トピック が重なって検索候補のように見えることがありますが、実際には別のコード動作を説明する公式ドキュメント型 JSONL を作成する。 JSONL は検索候補のように一部 API やトピック が重なっていても構いません。ただし SOURCE_CODE の核心目的、対象オブジェクト、最終的な動作/結果を直接説明してはいけません。
expectation === negative + versionKey === migration 無関係変換 JSONL いいえ Godot 3 コードと Godot 4 コードの両方に適用すべきでない無関係な 3→4 変換/パターン JSONL を作成する。 JSONL は 3→4 変換形式で記述するが、GODOT3_SOURCE_CODE の変更前根拠も、GODOT4_TARGET_CODE の変更後根拠も直接扱ってはいけません。
expectation === negative + migration 以外 無関係変換 JSONL いいえ SOURCE_CODE に適用すべきでない無関係な変換/パターン JSONL を作成する。 JSONL は別の API、別のノード、別の呼び出しパターンを扱い、SOURCE_CODE の変換 source 根拠になってはいけません。
versionKey === migration + positive 3→4 変換根拠 JSONL Godot 3 ははい / Godot 4 はいいえ Godot 3 コードの変更前パターンを Godot 4 コードの変更後形態に変換する 3→4 変換根拠 JSONL を作成する。 JSONL の source_api、source_pattern、match_terms、input_pattern、before_code、required_when_seen_in_code は GODOT3_SOURCE_CODE の実際の変更前文字列/API 呼び出しと直接一致し、target_api、after_code、recommended_action は GODOT4_TARGET_CODE の変更後形態を説明する必要があります。
versionKey === godot3 + positive 変換必要 JSONL はい SOURCE_CODE 内の Godot 3 / source-side API や呼び出しパターンを Godot 4 に置き換える必要があることを示す JSONL を作成する。 JSONL の source_api、source_pattern、match_terms、input_pattern、before_code、required_when_seen_in_code のうち少なくとも一つが SOURCE_CODE 内の実際の変換 source 文字列/API 呼び出しと直接一致している必要があります。
versionKey === godot4 + positive 既に適用 JSONL いいえ SOURCE_CODE がすでに Godot 4 ターゲット形態であるため、追加のマイグレーション根拠として判断されてはいけない JSONL を作成する。 JSONL は target_api、after_code、signature_stable、no_change、common syntax のようにすでに適用済み、または変換が不要であることを示す内容であり、SOURCE_CODE を変換 source と判断させてはいけません。
その他 positive 共通/不要 JSONL いいえ SOURCE_CODE が共通文法であるため、api_mapping または label_prototypes マイグレーション根拠として判断されてはいけない JSONL を作成する。 JSONL は target_api、after_code、signature_stable、no_change、common syntax のようにすでに適用済み、または変換が不要であることを示す内容であり、SOURCE_CODE を変換 source と判断させてはいけません。

1. ラベリングプロンプト

呼び出し位置

項目 値
ブラウザ関数 classifyItem(itemId)
サーバー API POST /api/classify-item
core 関数 buildClassificationPrompt({ itemTitle })
入力値 itemTitle
応答 JSON syntax_scope, label, reason, godot3_focus, godot4_focus

プロンプト原文

あなたは Godot コードテスト項目分類器です。

以下の TEST_ITEM が Godot 3 と Godot 4 で同じ文法/同じコードチャンクでテストできるか、あるいは Godot 3 用コードと Godot 4 用コードを別々に作成すべきか判定してください。

判定基準:
- 同じ GDScript 文法と同じ API 呼び出しで Godot 3/4 の両方で自然に説明できる項目は "common" です。
- クラス名、関数名、シグネチャ、ノード名、呼び出し方式など、バージョンごとに意味的に異なる API/文法は "separate" です。
- 曖昧な場合は "separate" とします。テストを安全に多く作る方が良いです。
- 回答は必ず JSON オブジェクトを一つだけ出力してください。

JSON 形式:
{
  "syntax_scope": "common または separate",
  "label": "短い日本語ラベル",
  "reason": "なぜそう判断したかの一二文",
  "godot3_focus": "Godot 3 コード生成時の注目ポイント",
  "godot4_focus": "Godot 4 コード生成時の注目ポイント"
}

TEST_ITEM:
${itemTitle}

応答 正規化

normalizeClassification(parsed)は次を保存する。

内部 フィールド 出典
syntaxScope parsed.syntax_scope
label parsed.label
reason parsed.reason
godot3Focus parsed.godot3_focus
godot4Focus parsed.godot4_focus

syntax_scopeは common または separate のみが通過する。

2. コード 生成 プロンプト

呼び出し 位置

項目 値
ブラウザ 関数 generateCode(itemId, versionKey)
サーバー API POST /api/generate-code
core 関数 buildCodePrompt({ itemTitle, syntaxScope, targetVersion })
入力 値 itemTitle, syntaxScope, targetVersion
応答 JSON godot_version, syntax_scope, source_code, notes

versionInstruction 分岐

targetVersion versionInstruction
common Godot 3 と Godot 4 の両方で共通して見られる GDScript コードチャンクを 1 つ作成せよ。
godot3 Godot 3.x 専用で差異が現れる GDScript コードチャンクを 1 つ作成せよ。
godot4 Godot 4.x 専用で差異が現れる GDScript コードチャンクを 1 つ作成せよ。

プロンプト 原文

あなたは Godot テスト用コードチャンク生成器です.

${versionInstruction}

要件:
- プロジェクト全体ではなく、関数単位または小さなコードブロック単位で作成する。
- テスト項目と直接関連するコードのみ作成する。
- コード内にバージョン判定に必要な API/構文が現れるようにする。
- 回答は必ず JSON オブジェクトを一つだけ出力する。
- Markdown のコードフェンスを使用しない。

JSON 形式:
{
  "godot_version": "${targetVersion}",
  "syntax_scope": "${syntaxScope}",
  "source_code": "GDScript コードチャンク",
  "notes": "コードで確認すべき重要ポイント"
}

テスト項目:
${itemTitle}

応答正規化

normalizeGeneratedCode(parsed)は次を保存します。

内部フィールド 出典
godotVersion parsed.godot_version
syntaxScope parsed.syntax_scope
sourceCode parsed.source_code
notes parsed.notes

source_codeが空の場合は失敗処理を行います。

3. JSONL生成プロンプト

呼び出し位置

項目 値
ブラウザ関数 generateJsonl(itemId, slotId)
サーバーAPI POST /api/generate-jsonl
コア関数 buildJsonlPrompt({ itemTitle, tableName, expectation, versionKey, versionLabel, sourceCode, targetCode })
入力値 itemTitle, tableName, expectation, versionKey, versionLabel, sourceCode, targetCode
応答 JSON オブジェクト

sourceCode / targetCode 選択

app.jsのgetJsonlGenerationCodes(detail, slot)がJSONL生成プロンプトに入れるコードを決定します。

slot.versionKey SOURCE入力
migration GODOT3_SOURCE_CODEにdetail.codes.godot3.sourceCode、GODOT4_TARGET_CODEにdetail.codes.godot4.sourceCode
common SOURCE_CODEにdetail.codes.common.sourceCode
godot3 SOURCE_CODEにdetail.codes.godot3.sourceCode
godot4 SOURCE_CODEにdetail.codes.godot4.sourceCode

プロンプト原文

あなたは Godot RAG テスト用 JSONL 生成器です。

目標:
${slotCase.goal}

対象テーブル:
${table.label}

テーブルの用途:
${table.purpose}

フィールド一覧:
${table.schema.map((field) => `- ${field}`).join('\n')}

直接マッチング判断に重要なフィールド:
${table.directFields.map((field) => `- ${field}`).join('\n')}

生成規則:
- 回答は必ず JSON オブジェクトを一つだけ出力する。
- Markdown コードフェンスを使用しない。
- ${slotCase.generationRule}
- docs_chunks は説明根拠マッチングで、api_mapping と label_prototypes はマイグレーションソース根拠マッチングです。
- 既に Godot 4 ターゲット形態で適用されたコードや共通文法コードは api_mapping/label_prototypes の「変換必要」根拠ではありません。
- negative_patterns と reject_when_seen_in_code は拒否条件です。このフィールドに入った文字列は「はい」根拠ではなく「いいえ」根拠として解釈されるべきです。
- 広いテーマ語だけに合わせず、実際の文字列/API 呼び出し基準で関連/無関係が分かれるようにする。
- テーブルの用途から外れたフィールドを任意に増やさない。
- source_url、source_file、*_id の値はテスト用に自然に作成する。

TEST_ITEM:
${itemTitle}

CODE_VERSION:
${versionLabel}

${isMigrationPair ? `GODOT3_SOURCE_CODE:
${sourceCode}

GODOT4_TARGET_CODE:
${targetCode}` : `SOURCE_CODE:
${sourceCode}`}

サーバー応答に一緒に含まれる値

POST /api/generate-jsonl 応答は以下を含む。

応答フィールド 内容
prompt 実際のモデルに送ったプロンプト
rawResponse モデル原文応答
jsonl extractJsonObject()でパースしたオブジェクト
jsonlText JSON.stringify(parsed) の結果
expectedAnswer expectedAnswerForSlot() の結果

4. JSONL 検証プロンプト

呼び出し位置

項目 値
ブラウザ関数 verifyJsonl(itemId, slotId, targetVersionKey)
サーバー API POST /api/verify-jsonl
core 関数 buildVerificationPrompt({ tableName, sourceVersionKey, targetVersionKey, sourceCode, jsonlText })
入力値 tableName, sourceVersionKey, targetVersionKey, sourceCode, jsonlText
モデル出力 はい または いいえ

question 分岐

tableName question
docs_chunks 以下の JSONL が SOURCE_CODE を直接説明する公式文書型根拠かどうか判定せよ。
api_mapping, label_prototypes 以下の JSONL を根拠に現在の SOURCE_CODE にマイグレーションを適用すべきか判定せよ。

firstRule 分岐

tableName firstRule
docs_chunks docs_chunks では JSONL が SOURCE_CODE の実際の文字列、API 呼び出し、コード目的、適用対象、結果を直接説明している場合のみ「はい」である。
api_mapping, label_prototypes api_mapping と label_prototypes では JSONL が現在の SOURCE_CODE に今適用すべき変更前パターンを説明している場合のみ「はい」である。

docs_chunks tableRules

- docs_chunksで「はい」は JSONL が SOURCE_CODE の核心的な動作を直接説明している場合にのみ許可されます。  
- 核心的な動作は単なる API 名ではなく、コードが何を計算し、どの対象に適用し、最終的にどのような状態/結果を生み出すかまでを含みます。  
- 同じ API や同じメソッドが出てきても、JSONL が別の目的、別の対象オブジェクト、別の結果を説明しているだけであれば検索候補にすぎず、直接的な根拠ではないため「いいえ」です。  
- JSONL が同じ API の一般的な説明だけを提供し、SOURCE_CODE の具体的なリソース、分岐、繰り返し、状態変化まで説明していなければ、直接的な説明根拠ではないので「いいえ」です。  
- SOURCE_CODE が繰り返し実行、単発実行、状態遷移、リソース置換のどのフローかを確認し、JSONL のフローが異なれば「いいえ」です。  
- 同じファイルや同じゲームフローで共に出現する機能同士は相互に検索候補になることがあります。この場合でも、SOURCE_CODE の最終目的、対象、結果と JSONL が説明する最終目的、対象、結果が一致するときだけ「はい」です。  
- api_symbols や heading に SOURCE_CODE の一部呼び出し名が含まれていても、content/code_blocks が別の作業フローを説明している場合は直接的な説明根拠ではありません。  
- ライフサイクル関数、共通型、一般的なプロパティ名のように複数のコードで繰り返される周辺手がかりだけが合致しても、直接的な根拠とはなりません。  
- JSONL の code_blocks が SOURCE_CODE と異なる例示コードを説明している場合、いくつかの API が同じでも「いいえ」です。  
- 類似した意味の別の API や類似の使用例を自分の知識で同等と推論しません。JSONL には現在の SOURCE_CODE の目的/対象/結果が直接示されている必要があります。  
- JSONL_GENERATED_FROM_CODE_VERSION と VERIFY_TARGET_CODE_VERSION が異なる場合、まず JSONL が現在検証対象バージョンのコード動作まで説明しているかを確認します。  
- バージョンが異なっても共通の API/共通の動作を明示的に説明すれば「はい」になることがありますが、JSONL の code_blocks/api_symbols が現在の SOURCE_CODE の実際の構文/API 呼び出しと異なる場合、同じ機能に見えても「いいえ」です。

api_mapping / label_prototypes tableRules

- api_mappingとlabel_prototypesの質問は「JSONLとコードが少しでも関係あるか」ではなく「このJSONLを根拠に現在のSOURCE_CODEを今変更すべきか」である。  
- まず現在のSOURCE_CODEをJSONL基準で、変更前コード、既に変更後コード、無関係コード、変換不要コードのどれに該当するか判定せよ。  
- 「はい」は現在のSOURCE_CODEが変更前コードであり、JSONLが示す変換を今適用すべきときのみ許可する。  
- 3→4統合JSONLはGodot 3変更前コードとGodot 4変更後コードを併せて見て作成した根拠である。検証時には現在のSOURCE_CODEがそのうち変更前コードか変更後コードかを分けて判断せよ。  
- 現在のSOURCE_CODEがすでにGodot 4 target形態であれば、JSONLがマイグレーション説明と関連して見えても「すでに適用済み」なので「いいえ」とする。  
- label_prototypesの「変換必要」判定は、現在のSOURCE_CODEが変更前の使用方法、引数構成、呼び出しパターンを実際に含んでいるときのみ「はい」とする。  
- 無関係変換JSONLは検証対象がGodot 3コードであっても、現在のSOURCE_CODEに適用すべき変換がなければ「いいえ」とする。  
- source/before/required系統の内容は変更前コードの根拠と読み、target/after/recommended系統の内容は変更後形態と読み、negative/reject系統の内容は現在のコードにその変換を適用してはならない条件と読む。  
- 関数名が同じでも、呼び出し引数、戻り値処理、継承ノード、周辺コード構造など、JSONLが示す変更前パターンがSOURCE_CODEに直接残っているときのみ「はい」とする。  
- source_apiとtarget_apiが同名を共有したり、match_termsにsource/target用語が共に含まれることがある。このとき単一関数名や広範なmatch_termsだけが一致しても「はい」ではない。  
- 同一ファイルや同一ゲームフローで共に登場する機能同士は相互に検索候補となり得る。とはいえ、現在のSOURCE_CODEに適用すべき変更前パターンが直接残っていなければ「いいえ」とする。  
- JSONL_GENERATED_FROM_CODE_VERSIONとVERIFY_TARGET_CODE_VERSIONが異なる場合、現在のSOURCE_CODEがJSONLの変更前コードか既に変更後コードかをまず区別せよ。  
- JSONL_GENERATED_FROM_CODE_VERSIONがマイグレーションでない単一バージョンスロットである場合、現在の検証対象コード内にsource/before/requiredパターンが直接存在するときのみ「はい」とする。  
- 現在のSOURCE_CODEがJSONLのtarget/after/recommended形態と同等またはそれ以上の新しい形態であれば、すでに適用されたコードなので「いいえ」とする。  
- 検証対象バージョンがGodot 4またはcommonで、SOURCE_CODEがすでにtarget/after形態であれば、JSONLが正しいマイグレーション知識であっても現在のコードには「いいえ」とする。  
- change_typeがsignature_stable、no_change、commonなど変換不要を示す場合は「いいえ」とする。  
- Godot 4コードまたは共通文法コードにマイグレーションJSONLが付随しても、追加変換が必要でなければ「いいえ」とする。

decisionRules

- 判定の前に SOURCE_CODE の核心的な動作を一文で捉え、JSONL が説明する核心的根拠も一文で捉えて両者を比較する。
- 両者の対象オブジェクト、呼び出し目的、入力/引数の流れ、最終結果が同じ方向であるときだけ直接的根拠とみなす。
- 類似した検索候補のように見えても、現在の SOURCE_CODE を説明するか、現在の SOURCE_CODE に適用できる根拠でなければ「いいえ」だ。

プロンプト原文

あなたはJSONL根拠マッチング判定機です.

${question}

テーブル:
${table.label}

テーブル用途:
${table.purpose}

判定基準:
- ${firstRule}
- 確認するJSONLフィールド: ${table.directFields.join(', ')}
- ${tableRules.join('\n- ')}
- ${decisionRules.join('\n- ')}
- 単にGodot、Godot3、Godot4、migration、2D、physicsなどの広い単語が同じであれば、関連なしです。
- JSONLに "does not describe"、"not related"、"unrelated"、"does not apply" のように否定的に記述された内容は、関連根拠として認めません。
- JSONLが他のAPI、他のノード、他のシステムに関する内容であれば「いいえ」です。
- あなたが知っているGodotの知識は使用せず、JSONLに記載された文字列根拠のみを使用してください。
- 回答は必ず「はい」または「いいえ」のいずれか一つだけ出力してください。

JSONL_GENERATED_FROM_CODE_VERSION:
${sourceVersionKey}

VERIFY_TARGET_CODE_VERSION:
${targetVersionKey}

SOURCE_CODE:
${sourceCode}

JSONL:
${jsonlText}

応答 正規化

normalizeYesNo(text)は次の応答のみを値として認めます。

入力 形式 内部 値
예 예
yes 예
아니오 아니오
no 아니오
code fence 内の上記の値 該当 値
最初 の 行の上記の値 該当 値
それ以外 空文字列

5. JSONL プロンプト プレビュー

app.jsの buildJsonlPromptPreview() はモデルに送る関数ではなく、画面に表示するプレビューです。

呼び出し 位置

項目 値
ブラウザ 関数 renderSlot()
API 呼び出し なし
使用 目的 slot 内部の JSONL 生成 プロンプト details 領域 表示

プレビュー 原文

あなたは Godot RAG テスト用 JSONL 生成器です.

目標: ${slotCase.goal}
対象テーブル: ${table.label}
テーブルの用途: ${table.purpose}
直接マッチングフィールド: ${table.directFields.join(', ')}

TEST_ITEM: ${itemTitle}
CODE_VERSION: ${versionLabel}

${isMigrationPair ? `GODOT3_SOURCE_CODE:
${sourceCode || '(Godot 3 コード生成後自動入力)'}

GODOT4_TARGET_CODE:
${targetCode || '(Godot 4 コード生成後自動入力)'}` : `SOURCE_CODE:
${sourceCode || '(コード生成後自動入力)'}`}

slot 生成規則

app.jsの getSlotSpecs(detail) が classification 結果に応じて slot を作成します。

common

classification が common の場合、次の slot を作成します。

versionKey tableName expectation
common docs_chunks positive
common docs_chunks negative
common api_mapping positive
common api_mapping negative
common label_prototypes positive
common label_prototypes negative

separate

classification が separate の場合、次の slot を作成します。

versionKey tableName expectation
godot3 docs_chunks positive
godot3 docs_chunks negative
godot4 docs_chunks positive
godot4 docs_chunks negative
migration api_mapping positive
migration api_mapping negative
migration label_prototypes positive
migration label_prototypes negative

expectedAnswer 計算

JSONL 生成応答の expectedAnswer

expectedAnswerForSlot({ tableName, versionKey, expectation }) は getSlotCase() の expectedAnswer を返します。

検証結果比較用 expectedAnswer

expectedAnswerForVerification({ tableName, sourceVersionKey, targetVersionKey, expectation }) の規則は次のとおりです。

条件 expectedAnswer
expectation === negative いいえ
tableName === docs_chunks かつ sourceVersionKey === targetVersionKey はい
tableName === docs_chunks かつ sourceVersionKey !== targetVersionKey いいえ
tableName が api_mapping または label_prototypes で sourceVersionKey === migration、targetVersionKey === godot3 はい
tableName が api_mapping または label_prototypes で sourceVersionKey === migration、targetVersionKey !== godot3 いいえ
tableName が api_mapping または label_prototypes で sourceVersionKey === godot3、targetVersionKey === godot3 はい
その他 いいえ

プロンプト変更記録表

後でプロンプトを修正した場合は、以下の表に続けて記入します。

日付 関数 変更前文句/規則 変更後文句/規則 確認結果
2026-07-13 全体 現在コード基準プロンプト構造 基準線文書化 記録完了
buildClassificationPrompt()
buildCodePrompt()
buildJsonlPrompt()
buildVerificationPrompt()