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.jscallQwen() はすべてのプロンプトを同じ方式で送信する。

{
  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.jsTABLE_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 生成プロンプトに入る goalgenerationRuleexpectedAnswer を決定します。

条件 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_scopecommon または 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.jsgetJsonlGenerationCodes(detail, slot)がJSONL生成プロンプトに入れるコードを決定します。

slot.versionKey SOURCE入力
migration GODOT3_SOURCE_CODEdetail.codes.godot3.sourceCodeGODOT4_TARGET_CODEdetail.codes.godot4.sourceCode
common SOURCE_CODEdetail.codes.common.sourceCode
godot3 SOURCE_CODEdetail.codes.godot3.sourceCode
godot4 SOURCE_CODEdetail.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.jsbuildJsonlPromptPreview() はモデルに送る関数ではなく、画面に表示するプレビューです。

呼び出し 位置

項目
ブラウザ 関数 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.jsgetSlotSpecs(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 いいえ
tableNameapi_mapping または label_prototypessourceVersionKey === migrationtargetVersionKey === godot3 はい
tableNameapi_mapping または label_prototypessourceVersionKey === migrationtargetVersionKey !== godot3 いいえ
tableNameapi_mapping または label_prototypessourceVersionKey === godot3targetVersionKey === godot3 はい
その他 いいえ

プロンプト変更記録表

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

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