IdeaSpool の AI 自動タグ付け機能を実装したとき、一つの大きな問題にぶつかりました。AI に自由にタグを生成させると、同じ概念に対して異なる表記のタグが混在してしまうのです。
この記事では、タグの一貫性を保つためのプロンプト設計について紹介します。
問題:タグが混在する
2026年1月19日の開発日記から:
- タグの一貫性問題
- 最初は AI に自由にタグを生成させていた
- 「React」「リアクト」「react.js」が混在して困った
- → 既存タグをプロンプトに渡し、可能な限り再利用するよう指示
AI は文脈に応じて最適な表現を選ぼうとします。英語のドキュメントについて書かれたアイデアには「React」、日本語の文脈では「リアクト」、技術的な詳細には「react.js」といった具合です。
これでは後からタグでフィルタリングしたとき、同じ概念のアイデアがバラバラになってしまいます。
解決策1:既存タグを参照させる
最も効果的だったのは、既存のタグリストをプロンプトに含めることです:
const existingTags = await getExistingTags(); // ["React", "TypeScript", "設計", ...]
const prompt = `
以下のアイデアに適切なタグを付けてください。
## 既存タグ(可能な限り再利用してください)
${existingTags.join(', ')}
## アイデア
${ideaContent}
## 出力形式
タグをカンマ区切りで出力してください。
`;
「可能な限り再利用してください」という指示を入れることで、AI は新しいタグを作る前に既存タグを検討するようになります。
解決策2:日本語タグを強制する
IdeaSpool のターゲットユーザーは日本人エンジニアです。英語タグと日本語タグが混在すると視認性が悪いため、日本語に統一しました:
日本語タグ強制: 英語タグが混在すると視認性が悪い。ターゲットユーザーは日本人エンジニア
const prompt = `
以下のアイデアに適切なタグを付けてください。
## ルール
- タグは必ず日本語で出力してください
- 技術用語も日本語で表記してください(例: React → リアクト)
## 既存タグ
${existingTags.join(', ')}
## アイデア
${ideaContent}
`;
ただし、「React」のような固有名詞を無理に日本語化すると違和感があります。実際には「固有名詞はそのまま、一般用語は日本語」というバランスを取りました。
学び:「禁止」より「推奨」
プロンプト設計で最も重要な学びがこれです:
AI のプロンプトは「禁止」より「推奨」の方が効果的
最初は「英語タグを生成しないでください」と書いていましたが、AI は時々ルールを破りました。
「推奨」に変えると効果的でした:
// NG: 禁止形
const prompt = `
タグを付けてください。
- 英語タグを生成しないでください
- 新しいタグを作らないでください
`;
// OK: 推奨形
const prompt = `
タグを付けてください。
- 日本語タグを優先してください
- 既存タグがあれば、そちらを使ってください
- 新しいタグが必要な場合は、シンプルな表現にしてください
`;
禁止形は「やってはいけないこと」を列挙するため、AI が何をすべきか曖昧になります。推奨形は「やるべきこと」を明確にするため、AI が正しい方向に進みやすくなります。
実装例:完全なプロンプト
IdeaSpool で使っている実際のプロンプト構造です:
async function generateTags(ideaContent: string): Promise<string[]> {
const existingTags = await getExistingTags();
const prompt = `
あなたはアイデア管理ツールのタグ付けアシスタントです。
## タスク
以下のアイデアに適切なタグを1〜5個付けてください。
## ガイドライン
1. 既存タグを優先的に使用してください
2. 既存タグにない概念の場合のみ、新しいタグを作成してください
3. タグは短く、具体的にしてください
4. 技術用語はカタカナ表記を推奨します
## 既存タグ
${existingTags.length > 0 ? existingTags.join(', ') : '(まだありません)'}
## アイデア
${ideaContent}
## 出力形式
タグをカンマ区切りで出力してください。説明は不要です。
`;
const response = await callAI(prompt);
return response.split(',').map(tag => tag.trim());
}
結果
この設計に変更してから、タグの一貫性が大幅に向上しました:
- 同じ概念に対するタグの表記揺れが 90% 以上減少
- ユーザーがタグでフィルタリングしたとき、関連アイデアが正しくグループ化される
- 新規タグの作成が減り、タグリストが管理しやすくなった
まとめ
AI タグ付けで一貫性を保つためのプロンプト設計:
- 既存タグを渡す: AI に過去のタグを参照させて再利用を促す
- 言語を統一: ターゲットユーザーに合わせて日本語/英語を決める
- 禁止より推奨: 「〜しないで」ではなく「〜してください」と書く
- ガイドラインを明確に: 優先順位を数字で示す
AI は指示されたことを忠実に実行しようとしますが、曖昧な指示には曖昧に応えます。一貫性が必要な場面では、具体的で肯定的な指示を心がけましょう。
Zeronova(ゼロノバ)
Product Manager / AI-Native Builder
Web/IT業界19年以上・20以上のWebサービスを担当したPdM。東証プライム上場企業の子会社代表として事業経営を経験。現在はAIを駆使して企画から実装まで完結させる個人開発を実践中。