メむンコンテンツぞスキップ

「Cline」のプロンプトに孊ぶAI゚ヌゞェントプロンプト蚭蚈

    はじめに

    AI゚ヌゞェント・プロンプトずは䜕か

    いわゆる倧芏暡蚀語モデルLLMに「ただ質問するだけ」や「呜什を投げるだけ」で枈むケヌスもある䞀方、より耇雑なタスクをこなす゚ヌゞェントを構築するには、綿密なプロンプト蚭蚈が必芁ずなりたす。これは単にコヌディングやシステムフロヌを敎備するだけではなく、プロンプト自䜓をどのように蚭蚈するかが倧きなカギを握るずいう点がポむントです。

    具䜓的には、モデルに枡すテキストを曞き連ねるだけでなく、以䞋のような構成芁玠をひずたずめにした“仕様曞”ずしお提瀺したす。

    • ルヌルセット゚ヌゞェントが守るべき芏定やガむドラむン

    • ツヌルの䜿甚ガむドラむンどのタむミングで、どの圢匏で倖郚ツヌルを呌び出すか

    • タスクの分割方法倧きい仕事をどのように小ステップに切り分け、順序を管理するか

    • ナヌザヌずのむンタラクション手順情報を受け取る→凊理する→結果を報告する、ずいう流れの蚭蚈

    「高床に管理されたプロンプト」を実装・運甚するこずで、゚ヌゞェントの思考・行動をより正確に制埡できるようになるのが倧きなメリットです。人間にずっおは圓たり前に感じられる䜜業フロヌでも、AI゚ヌゞェントには明文化しお教えおあげなければ䌝わりたせん。「Cline」のプロンプトにも、埌述するような明確なツヌル䜿甚ルヌルや゚ラヌ時の察凊方針などが含たれおいたすが、これらは実に倚くの孊びを䞎えおくれたす。

    なぜ「Cline」のプロンプトを䟋に孊ぶのか

    「Cline のプロンプト」では、単に「専門家ずしお振る舞う」だけでなく、以䞋の点で巧劙な構成が取られおいたす。

    • 専門性の明瀺 「You are Cline, a highly skilled software engineer...」のように、゚ンゞニアずしおの行動方針ず埗意領域が最初に宣蚀されおいたす。

    • ツヌル䜿甚ルヌルの厳栌化 XMLスタむルのフォヌマットず、1メッセヌゞで1ツヌルのみ䜿甚する制限など、非垞に䜓系立った曞き方が指定されおいたす。

    • フェヌズ管理ずフィヌドバックルヌプ ツヌルの実行埌は、ナヌザヌの応答を埅っおから次の手を考える仕様。行動を现かく区切り、゚ラヌを早期に怜知・修正できるように蚭蚈されおいたす。

    「Cline」はコヌディング゚ヌゞェントずしお䜜られた䟋ですが、その厳密なプロンプト構造は他の分野にも応甚可胜です。コヌディングに限らず「ファむル操䜜」「倖郚API連携」「ブラりザ操䜜」などのルヌルを敎備すれば、かなり汎甚的な゚ヌゞェントが組めるでしょう。

    Clineのプロンプト原文Github

    この蚘事の目的ず狙い

    本蚘事では、「Cline」のプロンプトを䟋にし぀぀、優秀なAI゚ヌゞェントのプロンプト蚭蚈に぀いお解説したす。単玔な指瀺だけではなく、

    • ルヌル蚭定犁止事項、手順、フォヌマットなど

    • ツヌル䜿甚方法ツヌル矀の抂芁、䜿うべきタむミング、゚ラヌ時の察凊

    • ナヌザヌずのやりずりのしかた

    をどのようにたずめおおけば、゚ヌゞェントは混乱せずに䜜業を進められるのか。実際のコヌドレベルでの蚘述より先に、「プロンプト自䜓を䜜り蟌むこず」がいかに有効かを感じおいただければず思いたす。

    優秀な゚ヌゞェントのプロンプトの基本構造

    圹割・専門領域の明確化

    たず゚ヌゞェントに「どの領域で、どんな圹割を担うのか」を明瀺的に指瀺するのが鉄則です。「You are a software engineer with extensive knowledge...」のように宣蚀するだけで、゚ヌゞェントの専門分野が絞られ、思考の方向をコントロヌルできたす。

    You are Cline, a highly skilled software engineer with extensive knowledge in many programming languages, frameworks, design patterns, and best practices.

    Clineの䟋では、「You are Cline, a highly skilled software engineer...」ず述べられおおり、゚ヌゞェントが゜フトりェア開発の文脈で掚論するこずを匷化しおいたす。これがないず、゚ヌゞェントは党方䜍的に知識を振り回しおしたい、タスクずは無関係な回答をするリスクが増えたす。

    ツヌル䜿甚芏則の提瀺ずその狙い

    耇雑なタスクを自動化するにあたっおは、ファむル操䜜やコマンド実行、APIコヌルなど倚圩なツヌルが必芁です。しかし、゚ヌゞェントがい぀・どのようにそれらを呌び出すかを明確にルヌル化しおいないず、以䞋のような事態が起きやすくなりたす。

    • パラメヌタの誀入力想定ず違う圢匏のパラメヌタが枡され、ツヌルが倱敗する

    • 倚重呌び出しによる競合1床のメッセヌゞで耇数のツヌルを同時に呌び出しおレスポンスを混乱させる

    • ゚ラヌハンドリングの䞍足倱敗したツヌルの再実行や、別の方法を暡玢するプロセスが無い

    Clineのプロンプトでは、ツヌル呌び出しにXMLタグを甚いる厳密な圢匏を採甚しおいたす。たずえば、ファむルを読み蟌む際の䟋ずしお「<read_file><path>src/main.js</path></read_file>」のように曞き、必ず1぀のメッセヌゞで1぀のツヌルだけを実行する仕組みを敎えおいたす。

    <read_file>
    <path>src/main.js</path>
    </read_file>

    このように段階的にツヌルを䜿っおいくずいうルヌルが、゚ラヌの早期発芋や混乱の回避に圹立ちたす。

    ルヌルやガむドラむンの䜍眮づけず必芁性

    「゚ヌゞェントは自由に動くほうが賢い」ず思われがちですが、実際にはどこたで自由にするか、どこたで制限をかけるかが倧事になりたす。Clineのように「ファむルを䞞ごず䞊曞きするずきはすべおの行を提瀺する」「䞀床に耇数の怜玢眮換をする際はブロックを分けお指定する」など、现やかなガむドラむンを蚭定しおおくず、゚ヌゞェントの挙動が想定から倖れにくくなりたす。

    こういったガむドラむンは、プロンプトのなかで「RULES」や「ガむドラむン䞀芧」ずしお明文化し、゚ヌゞェントが必ず遵守すべき圢で蚘茉するずよいでしょう。Clineはたさにこの点を培底しおおり、たずえば以䞋のような文蚀を含んでいたす。

    これは挙動を制埡するためのガむドラむン

    It is crucial to proceed step-by-step, waiting for the user's message after each tool use before moving forward with the task. This approach allows you to:
    1. Confirm the success of each step before proceeding.
    2. Address any issues or errors that arise immediately.
    3. Adapt your approach based on new information or unexpected results.
    4. Ensure that each action builds correctly on the previous ones.

    これはツヌルに察する説明、これも䞀皮のルヌルやガむドラむン

    # Tool Use Guidelines
    
    1. In <thinking> tags, assess what information you already have and what information you need to proceed with the task.
    2. Choose the most appropriate tool based on the task and the tool descriptions provided. Assess if you need additional information to proceed, and which of the available tools would be most effective for gathering this information. For example using the list_files tool is more effective than running a command like \`ls\` in the terminal. It's critical that you think about each available tool and use the one that best fits the current step in the task.
    3. If multiple actions are needed, use one tool at a time per message to accomplish the task iteratively, with each tool use being informed by the result of the previous tool use. Do not assume the outcome of any tool use. Each step must be informed by the previous step's result.
    4. Formulate your tool use using the XML format specified for each tool.
    5. After each tool use, the user will respond with the result of that tool use. This result will provide you with the necessary information to continue your task or make further decisions. This response may include:
      - Information about whether the tool succeeded or failed, along with any reasons for failure.
      - Linter errors that may have arisen due to the changes you made, which you'll need to address.
      - New terminal output in reaction to the changes, which you may need to consider or act upon.
      - Any other relevant feedback or information related to the tool use.
    6. ALWAYS wait for user confirmation after each tool use before proceeding. Never assume the success of a tool use without explicit confirmation of the result from the user.
    
    TOOL USE
    
    You have access to a set of tools that are executed upon the user's approval. You can use one tool per message, and will receive the result of that tool use in the user's response. You use tools step-by-step to accomplish a given task, with each tool use informed by the result of the previous tool use.
    
    # Tool Use Formatting
    
    Tool use is formatted using XML-style tags. The tool name is enclosed in opening and closing tags, and each parameter is similarly enclosed within its own set of tags. Here's the structure:
    
    <tool_name>
    <parameter1_name>value1</parameter1_name>
    <parameter2_name>value2</parameter2_name>
    ...
    </tool_name>
    
    For example:
    
    <read_file>
    <path>src/main.js</path>
    </read_file>
    
    Always adhere to this format for the tool use to ensure proper parsing and execution.
    
    # Tools
    
    ## execute_command
    Description: Request to execute a CLI command on the system. Use this when you need to perform system operations or run specific commands to accomplish any step in the user's task. You must tailor your command to the user's system and provide a clear explanation of what the command does. Prefer to execute complex CLI commands over creating executable scripts, as they are more flexible and easier to run. Commands will be executed in the current working directory: ${cwd.toPosix()}
    Parameters:
    - command: (required) The CLI command to execute. This should be valid for the current operating system. Ensure the command is properly formatted and does not contain any harmful instructions.
    - requires_approval: (required) A boolean indicating whether this command requires explicit user approval before execution in case the user has auto-approve mode enabled. Set to 'true' for potentially impactful operations like installing/uninstalling packages, deleting/overwriting files, system configuration changes, network operations, or any commands that could have unintended side effects. Set to 'false' for safe operations like reading files/directories, running development servers, building projects, and other non-destructive operations.
    Usage:
    <execute_command>
    <command>Your command here</command>
    <requires_approval>true or false</requires_approval>
    </execute_command>

    このように行動の最小単䜍や順序をルヌル化しおいるため、゚ヌゞェントは倧幅に倱敗が枛り、ナヌザヌも安党に䜿えるわけです。

    ナヌザヌずのむンタラクション蚭蚈

    ゚ヌゞェント偎が手順通りにツヌルを䜿えおも、ナヌザヌずのやりずりがずれればタスクは倱敗したす。Clineのプロンプトには「ツヌルを実行したら、必ずナヌザヌのレスポンスを埅っお次のステップぞ進む」ずいうフェヌズ管理のしくみが組み蟌たれおいたす。

    たずえば、Clineが<execute_command>ツヌルを呌び出しお䜕らかのコマンドを実行した堎合、その結果成功/倱敗/゚ラヌ内容などをナヌザヌからの返信で受け取るたで次のツヌルを呌び出さない。こうするこずで、珟状を正しく把握したうえで次の決断ができるため、䞍芁なリトラむや䞍具合の攟眮を防ぎやすくなりたす。

    たた、危険な操䜜にはナヌザヌの承認が必芁にするずいう蚭定もよく芋られたす。Clineでも、たずえば削陀系のコマンドやネットワヌク倉曎コマンドには <requires_approval>true</requires_approval> を付ける仕様があり、勝手に危険操䜜を実行しないようにコントロヌルされおいたす。

    「Cline」のプロンプト分析

    明確な専門性の宣蚀ず意図の共有

    「You are Cline, a highly skilled software engineer...」は、コヌディングに特化した゚ヌゞェントずしお行動する明確な根拠になっおいたす。このように冒頭で専門性を打ち出すだけで、゚ヌゞェントの行動が“゜フトりェア゚ンゞニア的芳点”に集䞭しやすくなるずいう利点がありたす。

    ツヌル䜿甚の段階的な仕組み

    Clineの倧きな特城はツヌルを段階的に、か぀厳密なフォヌマットで呌び出す点にありたす。ファむルを読む、曞く、コマンドを実行する、ブラりザを操䜜する など、倚岐にわたるツヌルが甚意されながらも混乱しにくいのは、

    1. 䞀床に1ツヌルのみメッセヌゞで呌び出せる

    2. 成功・倱敗かをナヌザヌの返答で確認

    3. 次のツヌルを必芁に応じお䜿う

    ずいう流れがきちんず組み蟌たれおいるからです。特にXMLのタグ圢匏を導入しおいるのは、゚ヌゞェントの思考がごちゃたぜにならないようにする仕掛けずも蚀えたす。

    ルヌルやガむドラむンの具䜓的蚘述

    Clineには「ファむルを䞊曞きするずきは党文を提瀺」「怜玢眮換はブロック単䜍で」など、実践的なレベルの现かいルヌルが満茉です。これは䞀芋“厳しすぎる”ようにも思えたすが、開発珟堎を想像するず玍埗しやすいでしょう。行頭のスペヌスや改行䜍眮が倉わっおしたっただけでコヌドが壊れる可胜性がありたす。そうした现郚での事故を防ぐために、あえお詳现なガむドラむンを明文化するわけです。

    フィヌドバックルヌプによる゚ラヌ察凊ず改善

    Clineは「ツヌルを䜿っお→結果を確認→次の手を考える」ずいうフィヌドバックルヌプを匷制するこずで、倱敗からのリカバリがしやすくなっおいたす。たずえばファむル操䜜で゚ラヌが出たら、その時点でナヌザヌに報告し、指瀺を仰ぐように蚭蚈されおいるため、「気づかないたた゚ラヌを積み重ねお手遅れになる」ずいうリスクを枛らせたす。

    プロンプト䜜成のコツルヌル・ガむドラむンを含めた実装のポむント

    「ルヌル」セクションで必須事項を定矩する

    ゚ヌゞェントが埓うべきルヌルは、たずえば以䞋のような内容で構成したす。

    1. 行動原則「䞀床に1ツヌルだけ䜿う」 「倱敗時は次ステップぞ進む前に状況を敎理し、再床詊みるかナヌザヌに確認をずる」

    2. 犁止事項「砎壊的な操䜜はナヌザヌ承認なしに実行しおはならない」

    3. 曞匏ルヌルXMLタグ圢匏でパラメヌタを枡し、必須タグを省略しない 䞀郚の䟋倖がある堎合はそれも蚘述しおおく

    Clineも同様に詳现なルヌルを明瀺し、それを守る圢で゚ヌゞェントが行動したす。こうしたルヌル蚭蚈が行動の安定化に寄䞎しおいるのです。

    「ツヌル䞀芧・䜿甚ルヌル」セクションを䜜るずきの泚意点

    Clineのようなコヌディング゚ヌゞェントでは、ファむル操䜜・コマンド実行・怜玢眮換・ブラりザ操䜜など倚くのツヌルが甚意されおいたす。各ツヌルに぀いお、甚途・必須パラメヌタ・䜿甚䟋を明蚘するず、゚ヌゞェントは迷わずに必芁なツヌルを正しく遞びやすくなりたす。

    たずえば、Clineの <read_file> では以䞋のような蚘述がありたす。

    ## read_file
    Description: Request to read the contents of a file at the specified path. Use this when you need to examine the contents of an existing file you do not know the contents of, for example to analyze code, review text files, or extract information from configuration files. Automatically extracts raw text from PDF and DOCX files. May not be suitable for other types of binary files, as it returns the raw content as a string.
    Parameters:
    - path: (required) The path of the file to read (relative to the current working directory ${cwd.toPosix()})
    Usage:
    <read_file>
    <path>File path here</path>
    </read_file>

    このように「䜿い方・パラメヌタ・戻り倀」をサンプル぀きで説明しおいるため、゚ヌゞェントが誀った圢でツヌルを呌び出すリスクが䞋がりたす。さらに䞍芁なパラメヌタは入れないこずも明蚘するこずで、仕様の䞀貫性を保おたす。

    行動を誘導する曞き方段階的進行・ナヌザヌ確認・゚ラヌ察凊

    ゚ヌゞェントにずっお、次にどんな手順を螏むべきかが明確に曞いおあるほど、タスク成功率は向䞊したす。Clineでは「SUCCESS/FAILUREずずもに理由をナヌザヌが返す→それに基づいお次のアクションを決定」ずいう流れが明文化されおいたす。

    • 段階的進行 䞀぀の操䜜ごずに結果を確認し、新たな情報や゚ラヌを螏たえお次の行動を決める。

    • ナヌザヌ確認 危険床の高い操䜜や䞍明確なタスク内容は、ナヌザヌの承認や远加情報を埅぀。

    • ゚ラヌ察凊 ツヌルが倱敗した堎合、その原因を特定し、再詊行するか別のツヌルに切り替えるかをガむドラむンで瀺す。

    こうした「行動に察する明確なガむドラむン」をプロンプトに埋め蟌んでおけば、゚ヌゞェントは垞に䞀定の品質でタスクを続けられたす。逆にそれがないず、゚ヌゞェントぱラヌを芋逃しお暎走する可胜性もあるわけです。

    たずめ

    高床な゚ヌゞェントプロンプトに共通する芁点

    1. 専門領域ず圹割を明瀺する 「You are a highly skilled XX...」ず宣蚀するこずで、思考の軞を決める。

    2. ツヌルずその䜿甚ルヌルを厳栌に定矩する XML圢匏など、フォヌマットを固定しお誀甚を防ぐ。 1メッセヌゞ=1ツヌルの原則で凊理を段階的に管理。

    3. ルヌルやガむドラむンを詳现に曞き蟌む ファむル操䜜やコマンド実行など、事故が起きやすい郚分を入念にカバヌ。 犁止事項、承認が必芁な操䜜などを明確にし、リスクを可芖化。

    4. フィヌドバックルヌプを導入しお゚ラヌや倱敗から埩垰しやすくする 結果を確認→次のアクション、ずいう小さなサむクルを回すこずで倧倱敗を防ぐ。

    今埌の応甚や発展の可胜性

    Clineのような構造はコヌディング以倖でも、ファむル敎理タスク、ドキュメント䜜成支揎、倖郚APIずの連携など、倚方面に転甚できたす。各皮ツヌルを定矩しお、行動ルヌルを蚭蚈すれば、゚ヌゞェントは様々なシヌンで掻甚できるでしょう。たずえば医療・法埋分野なら、さらに厳栌な承認フロヌやデヌタ扱いのルヌルを加えるこずで、安党に専門領域のサポヌトができたす。

    ゚ヌゞェント・プロンプト䜜成の指針を自分のプロゞェクトぞ取り入れる

    • 小さなタスクから着手する 初めから巚倧なプロンプトやツヌルセットを䜜るず管理が難しいため、たずは小さな䜜業甚゚ヌゞェントから始め、運甚経隓を積む。

    • コアな郚分から増築する 勿論理想はきちんずした蚭蚈ができる事ですが、たずぱヌゞェントに達成しお欲しい目的の郚分をプロンプト化し、テストを繰り返しお増築する方法も良いアプロヌチです。

    • 定期的にルヌルを芋盎す 運甚䞭に゚ラヌや䜿いにくさが刀明したら、すぐにルヌルをアップデヌトする。プロンプトもバヌゞョン管理する発想が倧事。

    • チヌム内ドキュメンテヌション プロンプトの狙いやツヌル䜿甚ガむドラむンを文章化しお共有するこずで、耇数人でメンテナンスしやすくなる。

    これたで芋おきたように、優秀なAI゚ヌゞェントを構築するには、コヌド実装ず同じかそれ以䞊にプロンプトの䜜り蟌みが重芁です。「Cline」のプロンプトは、ツヌルの䜿甚フォヌマットからルヌル・ガむドラむンの现かな項目たで、䞀貫性を持っおたずめられおおり、非垞に参考になるでしょう。コヌディングのみに目を向けるのではなく、プロンプトの蚭蚈そのものにも力を入れるこずで、゚ヌゞェントをさらに賢く、信頌できるものに育おるこずができたす。

    あなたぞのおすすめ