0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLMのプロンプト原則

0
Last updated at Posted at 2026-06-21

LLMに汎用的なプロンプト(Instructionファイル, Customizationファイル, etc.)を作らせると、毎回似た修正を繰り返しがちになる。これを避けるために プロンプト原則 を Skill にまとめた。原則そのものと、各項目の意図を順に解説していく。

プロンプト原則

シンプルを突き詰める。

---
name: prompt-principles
description: LLM 向けの prompt を作成・編集・レビューする際に従うべき原則
---

# Prompt Principles

- 過剰な指示を削り、効く指示だけを残す
  - **Context Rot**: 入力トークンが増えるほど出力品質が下がる
  - **Instruction-Density Decay**: 指示が多いほど遵守率が下がる
- **Do the simplest thing that works**: 同等に機能する指示の内、最もシンプルな指示を採る

## Include

- **Non-parametric knowledge**: 素のモデルが持たない知識・事実・情報
- 状況固有で、素のモデルの挙動から変える必要がある事項(例: 判断基準、前提、条件、方針、手順、範囲)

## Exclude

- **Parametric knowledge**: モデルが既知の知識・事実・情報
- モデルが容易に取得可能な情報
- 詳細すぎる・長すぎる記述

## How to Write

- **Right altitude**: 具体的すぎると柔軟性が失われ、抽象的すぎると挙動が安定しないため、それらを避ける適正な抽象度で指示する
  - 挙動を導く判断基準・方針を与える
  - 抽象的・自由度の高い指示では理由・背景を添える(自律的・柔軟な挙動を促す)
  - 一貫性が求められる(例: 形式、構造、スタイル)、または指示で挙動を定めにくい場合、代表的な例を厳選して示す
- **Output contract**: 期待する回答の方向性がある場合、それを規定する要素を示し、解釈の幅を絞る(例: 条件、形式、構成、内容、範囲、量)
- **Positive framing**: 望む挙動を直接的に書く
- 達成を判定できない語(例: 丁寧に、適切に)に挙動を委ねない。判定性が必要なら基準を規定する
- 広く浸透し意味の定まった用語・呼称がある場合、それを優先採用して文章を圧縮する(例: 概念名、手法名、形式名、役割名、文体名、規格名)
- 英語表記が一般的である用語・概念は英語表記を優先する
- 文章は項目や役割に応じて分類し、節・箇条書き・表・ブロックなどで構造化する

なぜシンプルに書くのか

Prompt Principles

  • 過剰な指示を削り、効く指示だけを残す
    • Context Rot: 入力トークンが増えるほど出力品質が下がる
    • Instruction-Density Decay: 指示が多いほど遵守率が下がる
  • Do the simplest thing that works: 同等に機能する指示の内、最もシンプルな指示を採る

LLMを期待する挙動へ誘導し、指示を効果的に作用させるために、シンプルで無駄のない指示を書かせる。
LLMへの指示・トークン量は少ないほど性能が高くなりやすい。ここではその背景が詰め込まれた用語を与えることで、効率的にLLMへその考え方を叩き込んでいる。

用語採用の背景

  • Context Rot: 界隈では有名かつ重要な用語なので、採用
  • Instruction-Density Decay: 用語としては Curse of Instructions の方が正確だが、LLMへの作用を考慮して、意味がより伝わりやすい本用語を採用
  • Do the simplest thing that works: 過剰な指示を削り、効く指示だけを残すと重複する部分があるが、カバー領域が異なる・重要なので強調する意味でも重複が許容される ので採用
  • 不採用
    • Lost in the middle (長い指示の先頭・末尾以外は遵守されにくい): そんな長いプロンプトは作成対象ではないので

何を書き、何を削るか

Include

  • Non-parametric knowledge: 素のモデルが持たない知識・事実・情報
  • 状況固有で、素のモデルの挙動から変える必要がある事項(例: 判断基準、前提、条件、方針、手順、範囲)

Exclude

  • Parametric knowledge: モデルが既知の知識・事実・情報
  • モデルが容易に取得可能な情報
  • 詳細すぎる・長すぎる記述

LLMの挙動を期待する方向へ変える指示を書かせ、過剰な指示は削らせる。
モデルが既に知っていること(Parametric knowledge)を書いても挙動は変わらず、トークンを増やして遵守率を下げるだけ。

How to Write — どう書くか

何を書くかを絞ったら、次はどう書くか。

適正な抽象度で指示する

  • Right altitude: 具体的すぎると柔軟性が失われ、抽象的すぎると挙動が安定しないため、それらを避ける適正な抽象度で指示する
    • 挙動を導く判断基準・方針を与える
    • 抽象的・自由度の高い指示では理由・背景を添える(自律的・柔軟な挙動を促す)
    • 一貫性が求められる(例: 形式、構造、スタイル)、または指示で挙動を定めにくい場合、代表的な例を厳選して示す

具体的すぎる指示はLLMの柔軟性を損なうし、抽象的すぎる指示は解釈の幅が広すぎて挙動が安定しない。その中間の抽象度で書かせる。

(例)

  • ❌ 具体的すぎ:「FooErrorBarError は catch する」→ 具体例に引き摺られ、それ以外のエラーに対応できない
  • ❌ 抽象的すぎ:「エラーを適切に処理する」→ 基準が曖昧で、LLMの挙動が定まらない
  • ✅ 丁度いい抽象度:「回復可能な例外のみ catch し、そうでないエラーは伝播させる」→ 狙った範囲の例外に安定的に対応できる

出力を規定する

  • Output contract: 期待する回答の方向性がある場合、それを規定する要素を示し、解釈の幅を絞る(例: 条件、形式、構成、内容、範囲、量)

自由な出力が望ましくないケースでは、ちゃんと明示的な出力指示をさせる。

肯定形で書く

  • Positive framing: 望む挙動を直接的に書く

否定形より肯定形で書かせる。
否定形の方が効きが弱くなりやすい。

基準で挙動を定める

  • 達成を判定できない語(例: 丁寧に、適切に)に挙動を委ねない。判定性が必要なら基準を規定する

事前に定義できる範囲内で条件は明示する。(無理に条件を付ける必要はない)
良い感じの雰囲気の語に期待してはいけない。

  • ❌「適切な長さで要約する」
  • ✅「200 字以内で要約する」

定着した用語で圧縮する

  • 広く浸透し意味の定まった用語・呼称がある場合、それを優先採用して文章を圧縮する(例: 概念名、手法名、形式名、役割名、文体名、規格名)

LLMがよく知ってる用語を積極的に使わせる。
十分に浸透した用語なら、その用語だけでかなり広く深いコンテキストを与えられる。
ただし、知名度が不十分だったり、多義性があったりする場合は、説明を併記することで確実にLLMを導く。(これに関してはプロンプトに記述してないけど‥)

  • 例: Context Rot: 入力が長くなるほど出力品質が下がる

文章を構造化する

  • 文章は項目や役割に応じて分類し、節・箇条書き・表・ブロックなどで構造化する

構造的な文章を書かせる。
構造化することで無秩序になりにくく、メンテナンス性の高いプロンプトになりやすい。

言語

英語の方がトークン効率が良いので、理解を阻害しない範囲で英語を導入させる。
ただし、自分で常に改善・メンテしていくプロンプトなので、基本は日本語で書かせてる。
(メンテしてくつもりがないなら全部英語変換してOK)

多言語混在

  • 日本語・英語文章の混在: switchingで性能が下がるケースがあるらしいから避けとく(将来的には不明)
  • タイトルや用語だけ英語化: 特に問題ない(はず)

トークン効率(日本語/英語)

GPT-5系の公式トークナイザ(o200k_base)でのトークン分割の例を挙げとく。
(あくまで以下は一例。傾向としては日本語トークン数は1.5~2倍ぐらい)

  • 日本語文: モデル情報を中継していく
    • トークン数: 9
  • 英語文: Keep relaying model information
    • トークン数: 5
# トークン 種別
1 モデル カタカナ
2 情報 漢語熟語
3 ひらがな
4 漢字
5 継 (e7b6) バイト分割
6 継 (99) バイト分割
7 して ひらがな
8 ひらがな
9 ひらがな

(実験中)記号による圧縮

プロンプトに以下の1文を追加して、トークン圧縮を図れる。

  • 意味を維持できる場合、語句を同義の記号で置換して表現する(例: = ≠ ≥ ∴ ∵ → ✅ ❌ ▲▼)
    • : 「すなわち」、「従って」
    • : 「なぜならば」
    • ▲▼: UP/DOWN(↑↓がUP/DOWNの意味で使われるのを防ぐ。↑↓はフローや方向の意味に使わせる)

まとめ

現状のベストプラクティスを良い感じに集約して、プロンプト作成用のプロンプトを作った。
今後モデルが進化していくと、ノウハウがまた変わっていくのだろうけど‥

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?