見出し画像

AI駆動開発における「コンテクスト・エンジニアリング」の具体的な実践方法 - Manusより引用

こんにちは、Nagiです。

このアカウントでは、プロダクトを開発して得た知見や最新のAIに関する情報などを中心に記事を投稿しています。

この記事は、個人開発者、エンジニア、AI(LLM)が好きな人向けの内容であり、AI駆動開発(Vibe Coding)に役立つ情報だと思います。

具体的には、Manusが2025/7/18に発表したブログ「Context Engineering for AI Agents: Lessons from Building Manus」から、ユーザーとしてAIを使用する私たちが知っておくべきコンテクスト・エンジニアリングとその具体的な活用方法について専門知識がなくても理解し活用できるようになることを目的とした内容を解説していきます。

引用記事: Context Engineering for AI Agents: Lessons from Building Manus


コンテクスト・エンジニアリングとは

AIとの対話において、近年「プロンプト・エンジニアリング」という言葉をよく耳にするようになりました。これは、AIに対してどのような「指示(プロンプト)」を与えれば、より的確な答えを引き出せるか、という一回一回の指示文を工夫する技術です。

これに対して「コンテクスト・エンジニアリング」は、より広く、長期的な視点を持つアプローチです。

単発の指示文(点)だけを考えるのではなく、それまでの会話の流れや背景情報、AIに与えるべき前提条件といった対話全体(線や面)を戦略的に設計し、管理する技術のことを指します。

「プロンプト・エンジニアリング」は、AIに伝える文章を工夫することに焦点を当てていますが、「コンテクスト・エンジニアリング」は、プロンプト・エンジニアリングに加えて、AIを使う時の環境にも焦点を当てていると解釈すると理解しやすいかもしれません。

解決できる具体的な問題

AI駆動開発をしていく中で、このような経験をしたことはありませんか。

  • エラーのループ: 「エラー1」が出てきてAIに改善を依頼することで「エラー2」になったが、同様に改善を依頼すると「エラー1」が出てきてエラーがループし続ける。

  • ツールを使用しない: 使用して欲しいツールの名前をAIに伝えているのにもかかわらず、ツールを使用せずに的外れな回答ばかりを生成する。

  • 指示の無視: いくつかの作業を一度にお願いすると、指示の一部を無視したり、関係のない実装をする。

こうしたAIの実装や行動に関する悩みは、AIの能力が低いからというよりも、むしろAIが持つ特有の「仕組み」と、私たちの「情報の伝え方」との間にミスマッチが生じることで起きています。

コンテクスト・エンジニアリングは、このミスマッチを解消し、AIをより賢く、意図通りに動かすための考え方です。

これを知ることで、私たちはAIの強みと弱みを理解し、それを先回りして手助けできるようになります。その結果、先ほど提示した悩みを軽減し、指示の意図を深く理解してくれて、AI駆動開発におけるストレスの原因を減らすことができます。

AIが話を忘れる主な原因

先ほど挙げたような問題が起きる根本的な原因は、AIが持つ特有の「記憶の仕組み」にあります。

私たち人間は、過去の膨大な経験や知識を脳内の引き出しに整理し、必要な時に取り出して物事を考えます。しかし、AIの記憶の仕方は少し異なります。

AIは、「コンテキストウィンドウ」と呼ばれる、限られた大きさのワーキングメモリ(短期記憶における容量のようなもの)で全ての思考を行います。

この短期記憶に、これまでの会話の履歴、与えられたプロンプトや資料の全てが記憶されて、それを元に、次の言葉やコードを生成している、とイメージです。

この仕組み上、対話が長くなったり、多くの情報を与えすぎたりして「短期記憶」がいっぱいになると、人間と同じように覚えることのできない内容や忘れてしまう記憶が生じます。

  1. 性能の低下: 
    これが最も大きな問題です。人間が、単語帳を最後まで読み終えたときに最初に覚えた単語を忘れてしまうように、AIも会話の最初の方や真ん中あたりに書かれた指示を忘れやすい傾向があり、これが「指示の無視」や「文脈の読み間違い」に直結します。

  2. 応答速度の低下: 
    短期記憶の全てに毎回目を通してから仕事に取り掛かるため、記憶した内容が多ければ多いほど、AIの応答速度は遅くなっていきます。

  3. コストの増加: 
    API経由でAIを利用している場合、AIを使用した量に応じて料金が発生します。つまり、むやみに情報を与え続けることは、開発コストの増加にも繋がります。また、Claude CodeのMaxプランのようなサービスでも同様にレートリミットが来やすくなります。

このように、情報をただ闇雲に与え続けるだけでは、かえってAIを混乱させ、性能を下げてしまうということです。

AIに「思い出させる」技術

アプローチの種類は大きく分けて二つ存在しています。

一つ目のアプローチは、AIが重要な情報を忘れないように、私たちが積極的に「思い出させる」手助けをしてあげることです。コンテキストが限られているからこそ、重要な情報を再度インプットし、AIの出力に一貫性を持たせます。

具体的な技術

  • 1. ToDoリスト(- [ ] → - [x]):
    複雑な実装や複数のタスクを一度に依頼すると、AIは何から手をつければいいか混乱し、「指示の無視」を引き起こしがちです。
    これを防ぐには、私たちがマネージャーのように、指示を箇条書きの「ToDoリスト」として渡すことが極めて有効です。 AIはこれを明確な道しるべとして認識し、一つずつタスクをこなしていくため、抜け漏れが劇的に減少します。
    たまに、全ての作業を終えてから「ToDoリスト」にチェックをつける場合があるので、私は「一つの行動を終えたらチェックをつける」というような内容を指示に記述しています。

  • 2. 「失敗の記録」をフィードバックする: 
    エラーがループしてしまう最大の原因は、AIが「なぜそのエラーが起きたのか」を理解せず、場当たり的な修正を繰り返してしまうからです。
    エラーの内容やその時に使用した解決策等をまとめた記録を、AIに読み込ませて擬似的な学習経験を与えることで、同じ過ちを繰り返す頻度を低下させることができます。
    AI駆動開発の場合は、このような記録を一つのファイルにまとめて記述し、参照させると管理しやすくなります。

  • 3. 重要な情報を、「再インプット」する: 
    長い開発作業の途中において、人間と同様にAIも当初の目的や制約条件を忘れる事例が多く見られます。
    会話が長くなってきたと感じたら、「目的は〇〇、手段は△△」のように、重要な情報を改めてインプットしてみてください。
    これにより、重要な内容をAIに思い出させて、一貫性のある出力を維持させることができます。
    また、最近のサービスでは標準機能として「コンテクストの圧縮」が提供されていることもあるので、その機能を使用するというのも一つの手です。これを使用すると長い会話履歴という前提条件が解消されるので性能が低下しにくくなります。

これらの技術は、一見するとAIに与える情報量を増やしてコンテクストを圧迫しているように見えます。しかし、回り道や手戻りを防ぐことで、結果的に全体の対話量を減らし、性能の低下を抑制することができます。

余計な情報を"減らす"アプローチ

もう一つのアプローチは、先ほどとは逆のものです。AIが最高のパフォーマンスを発揮できるよう、思考のノイズとなる余計な情報を戦略的に「削減」し、タスクに集中させる手助けをします。

参照元の記事では、AIエージェントに多くのツール(機能)を一度に見せすぎると、それらの説明文でコンテキストが埋まってしまい、AIが混乱して性能が落ちる問題が指摘されています。

これは、あまりに選択肢が多すぎると人間が何をすべきか迷ってしまう現象とよく似ています。

この問題を解決するため、元記事の開発チームは「ツールマスキング」という手法を取っています。

これは、常に全てのツールをAIに見せるのではなく、状況に応じて必要なツールだけを提示し、不要なものは隠すという非常に賢いアプローチです。

私たちはAIの内部を直接操作できないことがほとんどですが、「AIを迷わせないように、選択肢を絞ってあげる」という考え方は、日々のプロンプトに応用できます。

具体的な技術

  • 1. タスクを分割する: 
    AIは、「コードを書く」「ウェブで調べる」「ファイルを操作する」といった異なる種類のタスクを同時にやろうとすると、どのツールを使えばいいか混乱する事例が多く見られます。
    そこで、「まずエラーの原因をウェブで調べて」「その原因を元にこのファイルを修正して」のように、指示をツール(機能)のカテゴリごとに分割して一つずつ依頼します。
    これにより、ユーザーがAIの代わりに「ツールマスキング」を行い、AIは目の前のタスクに集中できます。
    この方法は原理的には、先ほど紹介した「ToDoリスト」とほとんど同じアプローチです。どちらか片方に絞るというのが現実的かもしれません。

  • 2. 使ってほしい機能を明確に指定する: 
    「このバグを修正して」と漠然と頼むのではなく、「〇〇(実際のツール名)を使って、このエラーメッセージの解決策を探し、最も可能性の高いものを3つ教えてください」のように、どの道具を使ってほしいのかを明確に指定する方法です。
    これにより、AIは「どのツールを使うべきか」と迷うコストを完全に省くことができ、「ツールを使用しない」といった問題を回避しやすくなります。

  • 3. 役割(ペルソナ)を与える: 
    「あなたはファイル操作が得意なPythonプログラマーです」のような具体的な役割を与えると、AIはその役割に関係のないツール(例えば、ウェブ検索)への注意を減らし、コードを書いたりファイルを扱ったりする思考に集中します。
    これもまた、AIの思考の選択肢を効果的に絞り込み、特定のタスクの精度を高める有効な手法です。
    システムプロンプトやカスタムプロンプトを設定できる環境の場合は、そこに記述すると最適な場合が多いです。

さらに高度な技術

  • 4. 状況に応じて必要なツールだけを提示し、不要なものは隠す: 
    これが最も直接的で強力なアプローチです。
    ここではツールの事例として、Model Context Protocol(MCP)を想定しています。
    もしかしたら他の方法も存在しているかもしれませんが、具体的な手段として以下のような方法が考えられます。

    1. 推奨: サービスに登録しているMCPサーバーのdisabledをfalseからtrueに変更する

    2. 非推奨: ツールを消去する(ツールを完全に消去してしまうと、後でその情報が必要になった場合に対応できなくなるため、マスキングに留めておいた方が良いと引用元の記事で記述されています。)

事例(JSONファイル)

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": [
        "-y",
        "@upstash/context7-mcp"
      ],
      "disabled": false
    }
  }
}

総括

AI駆動開発において、発生することの多い不満の原因には、AIが持つ「コンテキストウィンドウ」という、人間でいうところの短期記憶の限界がありました。

そして、その制約と上手く付き合うための、二つのアプローチを見てきました。

  1. あえて情報を"与える"
    タスクを分割したり、使うべきツールを指定したりすることで、AIを混乱させるノイズを取り除き、ツールによるコンテクストの圧迫を防ぐことができます。

  2. 余計な情報を"減らす"
    タスクを分割したり、使うべきツールを指定したりすることで、AIを混乱させるノイズを取り除き、ツールによるコンテクストの圧迫を防ぐことができます。

もし今後、AIがエラーのループに陥ったり、指示を無視してしまったりした時は、ぜひこの記事で紹介した2つの視点に基づく具体的な技術を参考にしてみてください。

また、さらに詳細な内容が知りたい場合は、この記事の引用元である「Context Engineering for AI Agents: Lessons from Building Manus」も読んでみてください。

引用記事: Context Engineering for AI Agents: Lessons from Building Manus

用語の意味と知識

  • Manus: 中国のスタートアップ企業「Monica社」が開発した汎用型AIエージェントを提供するサービスのことです。

  • Context Engineering for AI Agents: Lessons from Building:  Manusプロジェクトがコンテクスト・エンジニアリングに注力したこと、専門的な解説、コンテクスト・エンジニアリングをLLMに応用する方法、注意点を独自のAIエージェントを構築している人向けに記述してあるブログ記事です。


いいなと思ったら応援しよう!