Open37

公式ドキュメントから読み取れるChatGPT/Claudeのプラクティス

tristartristar

ChatGPTやClaudeのドキュメントを改めてみてみたら「こんな風に使うと良い」という情報が結構まとまっていて、両者に共通していたりする部分もあって驚いた。
共通するポイントをまとめてみたいと思ったのと、
長いドキュメントの一部に書かれている中から自分にとって重要と思ったものをまとめてみたいと思ったので書いていく。

tristartristar

ChatGPT, Claudeに共通しているポイント

tristartristar
  • 構造化したデータの表現はXMLが好まれる。(特に長いコンテキストの場面で)
    JSONも認識されるが、XMLと比較すると成績が悪く、エスケープ処理が必要などのオーバーヘッドがある。
  • データを区切るデリミタはMarkDownから始めるのが良い。XMLも良いが、デリミタに何を使うかはケースバイケースで、何が「より目立つか」で決める必要がある。XMLばかりの入力データの中でデリミタとしてXMLを使っても効果は薄れてしまう。
    https://cookbook.openai.com/examples/gpt4-1_prompting_guide#delimiters

Claudeの場合はXMLのタグについて一部指示されている。例えば、<thinking>タグを使うことで拡張思考モードの拡張思考ブロックに影響を与えるプロンプトを記述できる。
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips#essential-tips-for-long-context-prompts

tristartristar

20Kトークン以上など長いドキュメントを含める場合、冒頭やユーザーのクエリなどの前に挿入することでパフォーマンスが向上する。
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips#essential-tips-for-long-context-prompts

ChatGPT(GPT-4.1?)の場合、出来れば冒頭と末尾の両方に含める。片方だけにする場合は先頭に追加した方が良い。
https://cookbook.openai.com/examples/gpt4-1_prompting_guide#prompt-organization

tristartristar

「最初はシンプルな指示で始めて、動作を確認し必要に応じ指示を追加していくのが良い」
このコメントは色々なところで記述されている。

例えばClaude Code

A common mistake is adding extensive content without iterating on its effectiveness. Take time to experiment and determine what produces the best instruction following from the model.

https://www.anthropic.com/engineering/claude-code-best-practices#b-tune-your-files

GPT-4.1のRecommended Workflow

Start with an overall “Response Rules” or “Instructions” section with high-level guidance and bullet points.
If you’d like to change a more specific behavior, add a section to specify more details for that category, like # Sample Phrases.
If there are specific steps you’d like the model to follow in its workflow, add an ordered list and instruct the model to follow these steps.

https://cookbook.openai.com/examples/gpt4-1_prompting_guide#recommended-workflow

Chat-GPTのGeneral Promptの推奨

# Role and Objective
# Instructions
## Sub-categories for more detailed instructions
# Reasoning Steps
# Output Format
# Examples
## Example 1
# Context
# Final instructions and prompt to think step by step

https://cookbook.openai.com/examples/gpt4-1_prompting_guide#prompt-structure

ClaudeのExtendedThinking
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/extended-thinking-tips#use-general-instructions-first-then-troubleshoot-with-more-step-by-step-instructions

tristartristar

Claude全般

tristartristar

Claudeに何かを依頼する時は、Claude自身はユーザーと比較して新人のようにコンテキスト、スタイル、ガイドラインの知識がない状態でタスクに取り組むため、何を求めているか正確に説明するほど反応が良くなる。

※Claudeの内容を、タスクに関するコンテキストを持っていない他の同僚に見せた時混乱すると思われる場合、Claudeも同じように混乱する可能性が高い。

渡すべきコンテキストとしては

  • タスクの結果は何に使う予定か
  • タスクの結果は誰が見るのか
  • タスク全体のワークフローと、今その中のどの部分にあたるのか
  • タスクが完了した時とはどう見える時か

また、何をしてほしいかをなるべく具体的に記述することも重要。
例えば、出力結果としてコードだけが欲しい時は、そのように指示するべき。

指示は箇条書きや番号付きリストで与えられると、Claudeがその通りにタスクを進めやすい。

https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/be-clear-and-direct#how-to-be-clear-contextual-and-specific

tristartristar

ここに来て「Extended Thinking固有」の事項も出てきたので、それは別スレッドに書く。

tristartristar

GPT4.1

tristartristar

GPT-4.1はreasoning modelではないものの、ユーザーはモデルに対し明示的なステップバイステップのプランを生成させることが出来る。
("声に出して考える")
SWE-bench Verifiedで使用した実際のプロンプトが紹介されていて、かなり長い内容になっている。
https://cookbook.openai.com/examples/gpt4-1_prompting_guide#prompting-induced-planning--chain-of-thought

冒頭に以下のようなメッセージが含まれていて、積極的に「考える」ことを指示している。

Your thinking should be thorough and so it's fine if it's very long. You can think step by step before and after each action you decide to take.

You MUST iterate and keep going until the problem is solved.

Only terminate your turn when you are sure that the problem is solved.
Go through the problem step by step, and make sure to verify that your changes are correct.
NEVER end your turn without having solved the problem, and when you say you are
going to make a tool call, make sure you ACTUALLY make the tool call, instead of ending your turn.
tristartristar

GPT-4.1はユーザーの指示に従うことに長けているので、出力フォーマットを指定したり避けるべき事項を指定するといったことがより正確にできるようになっているが、忠実に従う分だけ「何を行い何を行わないべきか」指示する必要がある。
そういう意味で、既存のモデル用に最適化されたプロンプトはそのままでは4.1では使えないかもしれない。(これまでほど強くは暗黙的な意図を推論しないので)
https://cookbook.openai.com/examples/gpt4-1_prompting_guide#4-instruction-following

tristartristar

推奨されるワークフローとして以下が挙げられており、他のモデルと同様、シンプルに始めて、結果を見ながら調整することが推奨されている

  • ハイレベルな視点でのガイダンス、箇条書きから始める
  • 特定の挙動を細かく指示したい場合は、MarkDownの見出しなどを設けて詳細を記述する
  • モデルに従わせたいステップがある場合、番号付きリストで記述する
  • これでも意図通りの結果を得られない場合
    • 指示に衝突や不足がないか確認する。衝突がある場合、GPT-4.1は「プロンプトの末尾にある方」を優先する傾向がある
    • 期待する結果についての例を追加し、重要な動作を示している部分がルール中でも引用することを確認する
    • 「全部大文字」のような強調は通常使う必要がない。これらを使用した場合、GPT-4.1は過度に重視する可能性がある

※サンプルコードの作成やルールの衝突チェックといった作業はAI搭載のエディターが役に立つ

https://cookbook.openai.com/examples/gpt4-1_prompting_guide#recommended-workflow

tristartristar

ChatGPT全般

tristartristar
  • モデルが常に特定の行動をとるように指示することは、時に悪い影響を引き起こす。
    • 例えば「あなたはユーザーにレスポンスを返す前にツールを呼び出さなければならない」ような指示を出すと、ツール呼び出しにハルシネーションが含まれたりnullが渡されるといったことが起きる。
      対策として、「情報が不足している場合、ユーザーに情報の提供を求めてください」のような指示を含めることで避けることが出来る
  • サンプルの文章(フレーズ)を用意した時、モデルはそのサンプルをそのまま使ってしまうことがある。必要に応じてサンプルをカスタマイズすることを指示する必要がある
  • 特に指示がない限り、一部のモデルは余分な説明を用意することがある。こういったことを抑止する指示や出力の例を示すことで軽減することが出来る。

https://cookbook.openai.com/examples/gpt4-1_prompting_guide#common-failure-modes

tristartristar

特定のケースでは、モデルが非常に長い繰り返しを伴う出力を行うことに抵抗することを観察している。(数百の要素を1つずつ解析するなど)
このようなふるまいが必要な場合、全て出力することを強く指示したり、要件を分割、またはより簡潔なアプローチを検討する。
https://cookbook.openai.com/examples/gpt4-1_prompting_guide#caveats

tristartristar

Claude Extended Thinking固有

tristartristar

Extended Thinkingではハイレベルな視点での指示がステップバイステップな指示よりも上手く機能する。
こうすることで、人間によるプロセスの定義よりもモデルの創造性が上回るかもしれない。

雑に指定するのでもなく、以下のように考えることを促したり、うまく行かなかったときどうするか指示するといったことが書かれている。

Please think about this math problem thoroughly and in great detail. 
Consider multiple approaches and show your complete reasoning.
Try different methods if your first approach doesn't work.

それでも、Claudeは必要に応じステップバイステップな指示も必要に応じ実行することも出来る。

推奨としては「より一般化された指示から始めて思考過程を確認し、必要に応じて具体的なステップを追加していく」方法が良いとされている。

https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/extended-thinking-tips#use-general-instructions-first-then-troubleshoot-with-more-step-by-step-instructions

tristartristar

Extended Thinkingでは、プロンプト内で<thinking>タグ、<scratchpad>タグを利用して思考の正規パターンを示すことが出来る。
これらは拡張思考ブロックの中で使われるようになる。

Problem 1: What is 15% of 80?

<thinking>
To find 15% of 80:
1. Convert 15% to a decimal: 15% = 0.15
2. Multiply: 0.15 × 80 = 12
</thinking>

The answer is 12.

Now solve this one:
Problem 2: What is 35% of 240?

https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/extended-thinking-tips#multishot-prompting-with-extended-thinking

tristartristar

モデルに自分自身で結果が正しいか各印するステップを設けることで、エラーを抑止することが出来る。
Extended thinkingの過程でテストを実行させる(※)ように求めることが出来る

※モデル自身がコードを実行、評価することが出来る?その結果を信じて良いか不安な面もあるので、npm run test のようなテストコマンドの実行を求める?

https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/extended-thinking-tips#have-claude-reflect-on-and-check-its-work-for-improved-consistency-and-error-handling

tristartristar

実際にこれらLLMを使う時はGitHub Copilot AgentモードかClaude Codeなどで使う形になるので、こういったエージェントを使う際のプラクティスも把握しておきたい。
ただ、2025-04-25時点だとCopilot Agentモードに関する公式なCookbookやベストプラクティスはまとまっていない...?
ClineやCursorもあるけど、どちらかというとClaudeCodeの方が近いかもしれないと思い、
ClaudeCodeのベストプラクティスも確認してみる。

tristartristar

ClaudeCode

tristartristar
  • .claude/commands フォルダの下にカスタムのコマンドを作っておくことで繰り返しのタスクをショートカットできる

推奨するワークフロー

  • Claudeに関連するファイルのスキャンを命じるが、コードは書き始めないように指示する
  • 問題にどう取り組むかプランを立てるように指示する
    • "think"という言葉を使うとExtended thinkingを促す
    • think < think hard < think harder < ultrathink のような階層がある
  • 問題の解決をコードに書くように促す
  • コミットしてPRを作成する。このタイミングでCHANGELOGやREADMEを更新するのも良い
    https://www.anthropic.com/engineering/claude-code-best-practices#a-explore-plan-code-commit
tristartristar

具体的な指示を行うことで、特に初回のプロンプトでの成功率が上がる。
https://www.anthropic.com/engineering/claude-code-best-practices#a-be-specific-in-your-instructions

「最初はシンプルに」と相反するようだけど、たぶん微妙に違う(?)。

  • 最初からルールなどでガチガチにして挙動を縛るのはダメで、ハイレベルな視点から大まかな要望を書く
    • Claude can infer intent, but it can't read minds. Specificity leads to better alignment with expectations. とあるので、Claudeが汲み取った意図に誤解が起きにくくなるような指示が求められるのかもしれない。
  • そうはいっても選択の余地はないくらいにイメージが固まっていたら最初から書く
    • 「xxx.tsを参考にyyyを実装して。この機能ではaaaとbbbが出来なければならない。この作業のために外部ライブラリは使わないで欲しい」
tristartristar

Claude4
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/claude-4-best-practices

Claude4も「指示により忠実」に動作するモデルになっているとのこと。
(明記されていないものの、GPT-4.1と同様で、これがエージェント向きの最適化なのかも)

tristartristar

https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/claude-4-best-practices#be-explicit-with-your-instructions

単に「ダッシュボードを作ってほしい」ではなく、以下のような感じで「どのくらい力を入れるか」を明示的に指定すると効果的とされている。
(何をするかは具体的に書かなくて大丈夫...?)

可能な限り多くの関連機能やインタラクションを含めてください。基本を超えて、完全な機能を備えた実装を作成してください。

また、単に「省略記号は絶対に使わないで」ではなく、「テキストリーダーが発音できず妨げになるので省略記号は使わないで」と理由を添えるのは効果的らしい。

tristartristar

https://docs.anthropic.com/ja/docs/build-with-claude/prompt-engineering/claude-4-best-practices#応答のフォーマットを制御する

「回答の散文部分を<smoothly_flowing_prose_paragraphs>タグ内に記述してください」のようにフォーマットを指定する。

プロンプトで使うフォーマットスタイルが出力に影響を与えるので、出力にマークダウンを含めたくない場合、プロンプトからマークダウンを削除すると効果がある。

https://docs.anthropic.com/ja/docs/build-with-claude/prompt-engineering/claude-4-best-practices#思考および交互思考機能を活用する

ツールを使う前に、その結果を慎重に検討して次のステップを決めることを含めると交互思考に導くことが出来る。

ツールの結果を受け取った後、その品質を慎重に検討し、次に進む前に最適な次のステップを決定してください。この新しい情報に基づいて計画し、反復するために思考を使用し、最善の次のアクションを取ってください。
tristartristar

https://docs.anthropic.com/ja/docs/build-with-claude/prompt-engineering/claude-4-best-practices#エージェントコーディングでのファイル作成を減らす
一時ファイルを削除することをプロンプトに含めるのも効果がある。

反復のために一時的な新しいファイル、スクリプト、またはヘルパーファイルを作成した場合は、タスクの最後にこれらのファイルを削除してクリーンアップしてください。