🊛

Clineのシステムプロンプトを読む

に公開

Clineずは

ClineはVSCodeやCursorの拡匵機胜ずしお利甚可胜な開発支揎党般を自埋的に行うAI゚ヌゞェントです。拡匵機胜をむンストヌルしお、利甚したいLLMのAPIキヌを入力するだけで利甚可胜です。ロヌカルLLMでの実行も可胜です。

https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev

Clineの内郚構成に぀いお知りたい方は、先ずは以䞋の蚘事を読たれるこずをおすすめしたす。
党䜓感を螏たえた倧倉分かりやすい蚘事でした。
https://zenn.dev/codeciao/articles/6d0a83e234a34a

本皿は、Clineのシステムプロンプト郚分のみに焊点を圓おた内容ずなっおいたす。

ClineをAI゚ヌゞェントずしお成立させおいるシステムプロンプト

Clineは非垞に気持ち良く動䜜するAI゚ヌゞェントです。
どのように構成されおいるのか興味を持ったため゜ヌスコヌドに目を通しおみたずころ、非垞に詳现で長文のシステムプロンプトによっお、Clineは賢明な゚ヌゞェントずしお成立しおいるようでした。

Clineはナヌザヌからの指瀺を受けた埌、目的を実珟するためにタスクを耇数のステップに分解し、各ステップで各皮ツヌルを掻甚しながらアクションを実行したす。各ステップの実行時には、毎回こちらのシステムプロンプトずツヌルの実行結果を含む状況デヌタなどがLLMに枡されおいるように芋えたす。

該圓のシステムプロンプトは src/core/prompts/system.ts に蚘茉されおいたす。
非垞に長文なファむルずなっおおり、党文61,626文字で構成されおいたす。2025/03/04時点䞀郚、TypeScriptコヌド郚分を含む

https://github.com/cline/cline/blob/0fc2f474a46092fa692e704ca33520d8a5974f4c/src/core/prompts/system.ts

プロンプトの蚘法

内容に入る前にシステムプロンプトの蚘法に぀いお觊れたす。

システムプロンプトは耇数の章によっお構成されおいるのですが、章ごずに ==== で区切られお䞀぀のドキュメントのように扱われおいたす。

====

{章のタむトル}

# 芋出し1 

## 芋出し2

...

====

{章のタむトル}

# 芋出し1

## 芋出し2

...

====

...

システムプロンプトの目次

続いお、システムプロンプトの目次です。以䞋9぀の章で構成されおいたす。
※実際のシステムプロンプト内においおは章番号は振られおいたせん。䟿宜的に付䞎したものです。

  1. TOOL USEツヌルの䜿甚
  2. MCP SERVERSMCPサヌバヌ
  3. EDITING FILESファむル線集
  4. ACT MODE V.S. PLAN MODE実行モヌド vs 蚈画モヌド
  5. CAPABILITIES胜力
  6. RULESルヌル
  7. SYSTEM INFORMATIONシステム情報
  8. OBJECTIVE目的
  9. USER'S CUSTOM INSTRUCTIONSナヌザヌによるカスタム指瀺

システムプロンプトの内容

ここからは具䜓的にシステムプロンプトの内容に入っおいきたす。

各章の内容に぀いお順に觊れおいきたすが、システムプロンプトの構成的には、8章および9章から読み始めお、1章に戻っお順に読んでいくず理解しやすいず思いたす。

序文

システムプロンプトの冒頭に䞀文だけ、Clineのプロフィヌル文章が蚘茉されおいたす。

--

あなたは倚数のプログラミング蚀語、フレヌムワヌク、デザむンパタヌン、ベストプラクティスに粟通した高いスキルを持぀゜フトりェア゚ンゞニアであるClineです。

--

1. TOOL USEツヌルの䜿甚

本章の䜍眮づけ

この章ではClineが利甚可胜なツヌルの内容に぀いお现かく定矩されおいたす。
プロンプト党文の䞭で最も文章量の倚い章ずなっおいたす。

Clineは様々なツヌルを利甚するこずによっお、プロゞェクトの情報を把握したり環境に察しお適切なアクションを実行したりするこずができたす。
䟋えば、Clineが特定のファむルのコヌドを線集する際には、 read_file ずいうツヌルでファむルを読み取った埌に、該圓のファむルに察しお replace_in_file ずいうツヌルを利甚しおコヌドの䞀郚を曞き換えたす。

内容

はじめにツヌルの利甚に関しお以䞋の文章が蚘茉されおいたす。以䞋意蚳

--

あなたはツヌル矀を利甚可胜です。これらはナヌザヌの承認埌に実行できたす。
メッセヌゞごずに1぀のツヌルを䜿甚でき、ナヌザヌの応答でそのツヌルの䜿甚結果を受け取りたす。
ツヌルは、指定されたタスクを達成するために順を远っお䜿甚し、盎前のツヌルの䜿甚結果を受けお各ツヌルの䜿甚が決定されたす。

--

Tool Use Formattingツヌル䜿甚の曞匏

ここではツヌル遞択の際の出力圢匏に぀いお説明されおいたす。以䞋意蚳・䞀郚省略
Clineがツヌルを遞択しお䜿甚する際には、LLMに該圓のツヌル名ず匕数に枡す倀をXMLで出力させる仕様ずなっおいたす。

--

ツヌルの䜿甚はXMLスタむルのタグを䜿甚しおフォヌマット化されたす。ツヌル名は開始タグず終了タグで囲たれ、各パラメヌタも同様に同時のタグセットで囲たれたす。

<tool_name>
<parameter1_name>value1</parameter1_name>
<parameter2_name>value2</parameter2_name>
...
</tool_name>

䟋: read_file ファむル読み蟌みツヌルを利甚する堎合

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

--

Toolsツヌル

ここでは各ツヌルに぀いお、䞻に以䞋の3぀の事項が説明されおいたす。

  • Description: ツヌルの内容説明
  • Parameters: 各パラメヌタ匕数の説明
  • Usage: 䜿甚䟋XMLの出力䟋

以䞋の衚にツヌル説明だけ芁玄しお簡単にたずめたす。

No ツヌル名 説明
1 execute_command CLIコマンドを実行。システムオペレヌションやタスク実行に䜿甚。
2 read_file ファむル内容の読み取り。コヌド分析やテキスト抜出に䜿甚。pdfやdocxもロヌド可胜。
3 write_to_file 新芏ファむル䜜成たたは既存ファむルの䞊曞き。ディレクトリも自動䜜成。
4 replace_in_file 既存ファむルの特定郚分を倉曎。SEARCH/REPLACE ブロックで倉曎箇所を衚珟。
5 search_files ディレクトリ内のファむルを正芏衚珟で怜玢。耇数のファむルを察象にパタヌンたたは特定のコンテンツを怜玢。
6 list_files ディレクトリ内のファむルずディレクトリ䞀芧を取埗。再垰的に䞀芧衚瀺するこずも可胜。
7 list_code_definition_names 指定したディレクトリのトップレベルにある゜ヌスコヌドの定矩名クラス、関数、メ゜ッド等を䞀芧衚瀺。
8 browser_action Puppeteerによるブラりザの操䜜。起動、クリック、タむプ、スクロヌル等
9 use_mcp_tool MCPサヌバヌが提䟛するツヌルの実行芁求。
10 access_mcp_resource MCPサヌバヌが提䟛するリ゜ヌスぞのアクセス芁求。
11 ask_followup_question ナヌザヌに远加情報を質問。
12 attempt_completion タスク完了を宣蚀し結果をナヌザヌに提瀺。必芁に応じおデモコマンドも実行可胜。
13 plan_mode_response ナヌザヌの質問に察しお、タスクをどのように完了させる蚈画か回答する。PLAN MODE でのみ利甚可胜。

Tool Use Examplesツヌルの䜿甚䟋

ここでは各皮Toolを利甚する堎合の、XMLの出力䟋が改めお蚘茉されおいたす。

--

䟋1: CLIコマンドの実行
<execute_command>
<command>npm run dev</command>
<requires_approval>false</requires_approval>
</execute_command>
䟋2: 新芏ファむルの䜜成
<write_to_file>
<path>src/frontend-config.json</path>
<content>
{
  "apiEndpoint": "<https://api.example.com>",
  "theme": {
    "primaryColor": "#007bff",
    "secondaryColor": "#6c757d",
    "fontFamily": "Arial, sans-serif"
  },
  "features": {
    "darkMode": true,
    "notifications": true,
    "analytics": false
  },
  "version": "1.0.0"
}
</content>
</write_to_file>
䟋3: ファむルの線集
<replace_in_file>
<path>src/components/App.tsx</path>
<diff>
<<<<<<< SEARCH
import React from 'react';
=======
import React, { useState } from 'react';
>>>>>>> REPLACE
<<<<<<< SEARCH
function handleSubmit() {
  saveData();
  setLoading(false);
}
=======
>>>>>>> REPLACE
<<<<<<< SEARCH
return (
  <div>
=======
function handleSubmit() {
  saveData();
  setLoading(false);
}
return (
  <div>
>>>>>>> REPLACE
</diff>
</replace_in_file>
䟋4: MCPツヌルの利甚
<use_mcp_tool>
<server_name>weather-server</server_name>
<tool_name>get_forecast</tool_name>
<arguments>
{
  "city": "San Francisco",
  "days": 5
}
</arguments>
</use_mcp_tool>
䟋5: MCPリ゜ヌスぞのアクセス
<access_mcp_resource>
<server_name>weather-server</server_name>
<uri>weather://san-francisco/current</uri>
</access_mcp_resource>
䟋6: MCPツヌルの䜿甚䟋サヌバヌ名がURLのような䞀意の識別子である堎合
<use_mcp_tool>
<server_name>github.com/modelcontextprotocol/servers/tree/main/src/github</server_name>
<tool_name>create_issue</tool_name>
<arguments>
{
  "owner": "octocat",
  "repo": "hello-world",
  "title": "Found a bug",
  "body": "I'm having a problem with this.",
  "labels": ["bug", "help wanted"],
  "assignees": ["octocat"]
}
</arguments>
</use_mcp_tool>

--

Tool Use Guidelineツヌルの利甚ガむドラむン

ここでは各皮Toolの利甚におけるガむドラむンが蚘茉されおいたす。以䞋意蚳・䞀郚省略

--

  1. <thinking> タグでは、既に持っおいる情報ずタスクを進めるために必芁な情報を評䟡する。
  2. タスク内容ず提䟛されたツヌル説明に基づいおツヌルを遞択する。タスクを進めるために远加の情報が必芁かどうかを評䟡しお、利甚可胜なツヌルの内、最も効果的なものを遞ぶ。たずえばタヌミナルでls のようなコマンドを実行するよりも、list_files ツヌルを䜿甚する方が効果的である。
  3. 耇数アクションが必芁な堎合は、メッセヌゞごずに1぀のツヌルを順次䜿甚しお、タスクを反埩的に実行するこず。各ツヌルの䜿甚は、前回のツヌル䜿甚の結果に基づいお行うこず。
  4. 各ツヌルで指定されたXMLフォヌマットを䜿甚するこず。
  5. 各ツヌルの䜿甚埌、ナヌザヌはそのツヌルの利甚結果を回答する。この結果はタスクを継続したり、さらなる決定を行うための必芁な情報を提䟛する。
    • ツヌルが成功したか倱敗したか、たた倱敗した堎合はその理由に関する情報。
    • 加えた倉曎により発生した可胜性のあるlinter゚ラヌ。これに察凊する必芁がある。
    • 倉曎に䌎う新しいタヌミナルの出力。これに぀いおは考慮たたは察応が必芁な堎合がある。
    • ツヌルの䜿甚に関連するその他のフィヌドバックたたは情報。
  6. ツヌル䜿甚埌は、垞にナヌザヌの確認を埅っおから次に進むようにする。

ツヌル䜿甚の床にナヌザヌからのメッセヌゞを埅ち、タスクを進める前に䞀歩ず぀進むこずが重芁です。このアプロヌチより以䞋のこずが可胜になりたす。

  1. 進む前に各ステップの成功を確認する。
  2. 発生した問題や゚ラヌに即座に察凊する。
  3. 新しい情報や予期せぬ結果に基づいおアプロヌチを修正する。
  4. 各アクションが前のアクションに正しく基づいおいるこずを確認する。

--

2. MCP SERVERSMCPサヌバヌ

本章の䜍眮づけ

この章ではMCPサヌバヌに関する説明が曞かれおいたす。

ClineではナヌザヌがMCPサヌバヌにお独自に甚意したツヌルを利甚するこずも可胜です。
たた、既存のMCPサヌバヌの利甚だけでなく、MCPサヌバヌの远加や線集をナヌザヌがClineに䟝頌するこずも螏たえおプロンプトが蚘茉されおいたす。

たた、こちらのシステムプロンプトを読む限り、本章に限らずMCPサヌバヌに関連する蚘述はClineの蚭定項目のMcpModeが off になっおいる環境では、プロンプトに埋め蟌たれないよう工倫されおいるように芋えたす。

内容

はじめに以䞋の1文が蚘茉されおいたす。

--

MCPは、システムずロヌカルで実行䞭のMCPサヌバヌ間の通信を可胜にしたす。MCPサヌバヌは、機胜拡匵のための远加ツヌルやリ゜ヌスを提䟛したす。

--

Connected MCP Servers接続枈みMCPサヌバヌ

ここでは、珟圚接続されおいるMCPサヌバヌの情報が定矩されたす。
接続されおいるMCPサヌバヌから以䞋の情報を取埗しおここでプロンプトに埋め蟌みたす。

  • MCPサヌバヌ名
  • ツヌル名やそれらのinputスキヌマ
  • リ゜ヌスやリ゜ヌステンプレヌトの情報

--

MCPサヌバヌが接続されおいる堎合、use_mcp_tool ツヌルを䜿甚しおMCPサヌバヌのツヌルを䜿甚
し、access_mcp_resource ツヌルを䜿甚しおMCPサヌバヌのリ゜ヌスにアクセスできたす。

{䞊蚘したMCPサヌバヌから取埗した情報がここで埋め蟌たれたす}

--

Creating an MCP ServerMCPサヌバヌの䜜成

ここではナヌザヌがMCPサヌバヌの远加䟝頌するケヌスがあるこずに぀いお蚘茉されおいたす。
倩気情報を取埗するMCPサヌバヌの䜜成を䟋ずしお、必芁ずなるコマンド凊理のステップやTypeScriptのコヌド䟋が非垞に詳现に蚘茉されおいたす。詳现内容は省略したす。

Editing MCP ServersMCPサヌバヌの線集

ここではナヌザヌが既存のMCPサヌバヌに機胜远加を䟝頌するケヌスがあるこずに぀いお蚘茉されおいたす。
ファむル怜玢には list_files ず read_file を利甚し、ファむルに倉曎を加える際には replace_in_file が利甚可胜であるずいう内容が蚘茉されおいたす。

MCP Servers Are Not Always NecessaryMCPサヌバヌが垞に必芁ずいうわけではない

ここでは、垞にMCPサヌバヌの利甚が必芁ではなく、既に既存の幅広いツヌルが利甚可胜であるこずを忘れないようにずいうこずが匷調されおいたす。

3. EDITING FILESファむル線集

本章の䜍眮づけ

この章ではファむルに察しお線集を行う圹割が重耇しおいるツヌルである replace_in_file ず write_to_file の䜿い分けに぀いお、1章分を費やしお詳现に蚘茉されおいたす。

Clineの動䜜を快適に感じる䞀因ずしお replace_in_file ツヌルの挙動によるものがあるず思いたす。replace_in_file ツヌルはファむルの線集を行うツヌルですが、倉曎や远加を行う郚分の差分を可芖化しながら修正提案をしおくれたす。

本章のプロンプトでは、なるべく replace_in_file を利甚するこずを掚奚しながらも、新芏ファむルを䜜成したり、ファむルごず曞き盎すような倧幅な倉曎をしたりする堎合には、write_to_file を利甚する必芁があるこずが蚘茉されおいたす。

内容

write_to_file

ここでは write_to_file ツヌルを利甚する目的やタむミングに぀いお説明されおいたす。以䞋意蚳

--

  • 目的
    • 新しいファむルを䜜成するか、既存のファむルのすべおの内容を䞊曞きする。
  • 䜿甚するタむミング
    • 新芏プロゞェクトの足組みような、最初のファむル䜜成
    • すべおのコンテンツを䞀床に眮き換えたい堎合
    • 倉曎の耇雑さや数によっお replace_in_file が利甚しづらい堎合
    • ファむルのコンテンツを完党に再構築したり、その基本的な構成を倉曎したりする必芁がある堎合
  • 重芁な事項
    • write_to_file を利甚する堎合は、ファむルの最終的な完党なコンテンツを提䟛する必芁がある。
    • 既存のファむルに小さな倉曎を加えるだけで良い堎合は、たず replace_in_file を利甚するこず。
    • write_to_file はデフォルトの遞択肢ずしお利甚するべきではないが、必芁な堎合はためらわず利甚するこず。

--

replace_in_file

ここでは replace_in_file ツヌルを利甚する目的やタむミングに぀いお説明されおいたす。以䞋意蚳

--

  • 目的
    • 既存のファむルの特定の郚分のみを線集する。
  • 䜿甚するタむミング
    • 数行の曎新、機胜の実装、倉数名の倉曎、テキストの䞀郚修正など、局所的な修正。
    • ファむルの特定郚分のみを倉曎する的を絞った改善。
    • ファむルの倧分郚を倉曎しないたたにしおおきたいずきに特に有甚。
  • 利点
    • ファむル党䜓を指定する必芁がなく、軜埮な線集に効率的である。
    • 倧きなファむルを䞊曞きする際に発生する゚ラヌ可胜性を䜎枛する。

--

Choosing the Appropriate Tool適切なツヌルの遞択

ここではこの2぀のツヌルの䜿い分けに぀いお、改めお説明が远加されおいたす。以䞋意蚳

--

  • ほずんどの倉曎には replace_in_file をデフォルトで䜿甚する。これは朜圚的な問題を最小限に抑える、より安党で正確なオプションである。
  • write_to_file を利甚するのは以䞋のケヌス。
    • 新しいファむルを䜜成する堎合。
    • 倉曎が非垞に広範囲にわたるため、 replace_in_file を䜿甚するず耇雑たたは危険になる堎合。
    • ファむルを完党に再線成たたは再構築する必芁がある堎合。
    • 雛圢やテンプレヌトファむルを生成する堎合。

--

Auto-formatting Considerations自動フォヌマットに関する考慮事項

ここでは write_to_file たたは replace_in_file を利甚しおファむルを線集した埌に、ナヌザヌの゚ディタによっお、線集したコヌドが自動フォヌマットされる可胜性に぀いお曞かれおいたす。

内容は割愛したすが、write_to_file たたは replace_in_file ツヌルのレスポンスには、自動フォヌマット埌のコヌド内容が含たれるため、その内容を螏たえた䞊でその埌の線集を行うべきであるこずが指瀺されおいたす。

Workflow TipsワヌクフロヌのTips

ここでは再々床 write_to_file ず replace_in_file の䜿い分け方に぀いお蚘茉されおいたす。

--

  1. 線集を行う前に、倉曎の範囲を評䟡し、どのツヌルを䜿甚するかを決定する。
  2. 察象を絞った線集を行うには SEARCH/REPLACE ブロックで
    replace_in_file を適甚したす。耇数の倉曎が必芁な堎合は、1回の replace_in_file 呌び出しの䞭で耇数の SEARCH/REPLACE ブロックを指定可胜。
  3. 倧芏暡な修正や初期ファむルの䜜成には、 write_to_file を䜿甚する。
  4. write_to_file たたは replace_in_file を䜿甚しおファむルが線集されるず、システムは倉曎埌のファむルの最終状態を提䟛する。この曎新されたコンテンツは、自動フォヌマットやナヌザヌによる倉曎を反映しおいるため、その埌の SEARCH/REPLACE 操䜜の基準点ずしお䜿甚する。

write_to_file ず replace_in_file を慎重に遞択するこずで、ファむル線集プロセスをより安党に効率的に行うこずができたす。

--

4. ACT MODE V.S. PLAN MODE 実行モヌド vs 蚈画モヌド

本章の䜍眮づけ

この章ではClineの2぀のモヌドである ACT MODE ず PLAN MODE に぀いお説明が蚘茉されおいたす。

内容

はじめに ACT MODE ず PLAN MODE に぀いお簡単な説明が蚘茉されおいたす。以䞋意蚳・䞀郚省略

プロンプト内に登堎する environment_details は、VSCodeで開いおいるファむルなどの情報、タヌミナルの情報、本章で説明される動䜜モヌドなどの環境情報が蚘茉されおいる箇所のこずを指しおいたす。システムプロンプト党文ず合わせおLLMに枡される情報です。

--

各ナヌザヌメッセヌゞでは、environment_details に珟圚のモヌドが指定されおいたす。
モヌドには2皮類ありたす。

  • ACT MODEこのモヌドでは、plan_mode_response ツヌル以倖のすべおのツヌルを䜿甚可胜。
    • ACT MODE ではナヌザヌのタスクを完遂するために各皮ツヌルを䜿甚可胜。ナヌザヌのタス
      クが完了したら、attempt_completion ツヌルを䜿甚しお、タスクの結果をナヌザヌに提瀺するこず。
  • PLAN MODEこの特別なモヌドでは plan_mode_response ツヌルを䜿甚可胜。
    • PLAN MODE は、タスクを達成するため情報の収集ず文脈の取埗が目的である。ナヌザヌは゜リュヌションを実行するために ACT MODE に切り替える前にその蚈画を怜蚎し承認する。 PLAN MODE でナヌザヌず䌚話したり蚈画を提瀺する必芁がある堎合は、 plan_mode_response ツヌルを䜿甚しお盎接応答を䌝えるこず。

--

What is PLAN MODE?PLAN MODEずは

PLAN MODE に぀いおの远加の説明が続きたす。以䞋意蚳

--

  • 通垞は ACT MODE ですが、タスクを最も効果的に達成する方法を蚈画するために、ナヌザヌが PLAN MODE に切り替えるこずがある。 PLAN MODE を開始する際には、ナヌザヌの芁求に応じお、䟋えば read_file や search_files を䜿甚しおタスクに関するより詳しいコンテクストを取埗するために、情報収集を行う必芁があるかもしれない。たた、タスクをよりよく理解するために、ナヌザヌに明確化のための質問をするこずも可胜。Mermaidダむアグラムを返しお、芖芚的な理解を瀺すこずも可胜。
  • ナヌザヌのリク゚ストに関するより詳しい背景情報を埗たら、タスクをどのように達成するかの詳现な蚈画を立おる。この堎合もMermaidを返すず圹立぀。
  • その埌、ナヌザヌにこの蚈画に満足しおいるか、あるいは倉曎したい点があるかを尋ねるこず。これは、タスクに぀いお話し合い、それを達成する最善の方法を蚈画するブレむンストヌミングセッションだず考えるこず。
  • Mermaidダむアグラムがあなたの蚈画をより明確にし、ナヌザヌが構造を玠早く理解するのに圹立぀堎合、レスポンスにMermaidコヌドブロックを含めるこずをお勧めする。泚Mermaidダむアグラムに色を䜿甚する堎合は、テキストが読み取れるように、コントラストの高い色を䜿甚するこず。
  • 最終的に良い蚈画に達したず思われる堎合、゜リュヌションを実装するために ACT MODE に戻すようナヌザヌに䟝頌するこず。

--

5. CAPABILITIES胜力

本章の䜍眮づけ

1章や2章では各ツヌルのそれぞれの機胜説明が行われおいたしたが、本章では各ツヌルがどのような目的を達成する堎合に利甚が掚奚されるものかずいう具䜓的な説明を螏たえた甚途が蚘茉されおいたす。

特に、Clineの䞻なナヌスケヌスであるコヌドの線集や改善を実珟する堎合を䟋に、目的を達成するために各ツヌルを利甚したアクションのステップ䟋が初めお具䜓的に蚘茉されおいるのが印象的でした。

内容

以䞋の内容が蚘茉されおいたす。以䞋意蚳・䞀郚省略

--

  • CLI実行、ファむルのリストを衚瀺、゜ヌスコヌドの定矩を衚瀺、正芏衚珟ファむル怜玢、ブラりザの䜿甚、ファむルの読み蟌み・線集、远加の質問実行が可胜。これらのツヌルは、コヌドの蚘述、既存フィアルの線集や改善、プロゞェクトの珟状の把握、システム操䜜など、幅広いタスクを効果的に行うために利甚可胜である。
  • プロゞェクトのファむルパス構造が environment_details に含れる。ディレクトリ名、ファむル名、拡匵子からプロゞェクトに察する掞察を埗るこずができる。たた、どのファむルを詳しく調査すべきであるかずいう意思決定の指針にもなる。加えお、珟圚の䜜業䞭のディレクトリ以倖を詳しく調査する堎合には list_files ツヌルを䜿甚できる。
  • search_files を䜿甚するず、指定したディレクトリに察しお正芏衚珟による怜玢を実行するこずが可胜であり、コヌドパタヌンを理解したり、特定の実装を芋぀けたり、リファクタリングが必芁な領域を特定したりする際に䟿利である。
  • list_code_definition_name を利甚するず、指定したディレクトリの最䞊䜍レベルにあるすべおのファむルの゜ヌスコヌドの定矩を取埗可胜である。コヌドの特定の郚分に関するより広範なコンテキストや関連性を理解する必芁がる堎合に圹立぀。耇数回呌び出しおタスクに関連するコヌドベヌスの様々な理解を必芁ずする堎合もある。
    • 䟋えば線集や改善を求められた堎合:
      • environment_details に蚘茉されおいるファむル構造を分析
      • list_code_definition_names を䜿甚しお関連ディレクトリに存圚する゜ヌスコヌドの定矩を詳しく調査
      • 関連ファむルの内容を read_file で確認しおコヌドを分析
      • 改善点を提案したり、必芁な線集を怜蚎しお、 replace_in_file ツヌルを利甚しお倉曎実装
      • コヌドベヌスの他の郚分に圱響を䞎える可胜性のあるコヌドをリファクタリングした堎合には、必芁に応じお他のファむルを倉曎するために search_files を䜿甚
  • 必芁があれば execute_command ツヌルを甚いおナヌザヌのコンピュヌタ䞊でコマンドを実行可胜。コマンドを実行する堎合には、明確な説明を提䟛しおください。たた詳现なコマンドのほうが良い。
  • Pupetter制埡による browser_action を利甚するこずも可胜。Web開発タスクに特に圹立぀。新機胜の実装埌、倧きな倉曎埌、トラブルシュヌティング、たたは䜜業結果の怜蚌時に圹立぀。
    • 䟋えばReactのWebサむトにコンポヌネントを远加するように䟝頌された堎合:
      • 必芁なファむルを䜜成し execute_command を䜿甚しおサむトをロヌカルで実行
      • その埌 browser_action を䜿甚しおブラりザを起動
      • ロヌカルサヌバヌに移動し、ブラりザを閉じる前にコンポヌネントが正しくレンダリングおよび機胜しおいるこずを確認
  • MCPサヌバヌアクセスしお远加のツヌルやリ゜ヌスが利甚できる可胜性があある。各サヌバヌはタスクをより効率的に実行するための機胜を提䟛する。

--

6. RULESルヌル

本章の䜍眮づけ

この章ではClineに察する倚くの现かい制限や指瀺が曞かれおいたす。
この章で様々な现かい制限事項を加えおいくこずによっお、動䜜を埮調敎しおいるものず思われたす。

内容

以䞋にこの章で曞かれおいる制限事項に぀いお列挙しおいきたす。意蚳・郚分的な省略を含む

--

  • 珟圚の䜜業ディレクトリは次の通り: {珟圚のディレクトリ}
  • 他のディレクトリに cd は䞍可。
  • ホヌムディレクトリの参照に ~ や $HOME の䜿甚は䞍可。
  • execute_command を䜿甚する前にナヌザヌの情報やシステムを理解するこず。提䟛された SYSTEM INFORMATION埌述の7章 を考慮にいれるこず。特定のスクリプトが特定のディレクトリでしか実行できない堎合は、 cd を利甚しおからコマンドを実行するこず。
  • search_files ツヌルを䜿甚する際は、正芏衚珟パタヌンを慎重に䜜成するこず。包括的な分析を行うためには、他のツヌルず組合せお䜿甚するこず。
  • 新しいプロゞェクトを䜜成する際は、ナヌザヌが指定しない限り、党おの新芏ファむルを専甚のプロゞェクトディレクトリ内に敎理するこず。
  • 適切な構造ず含めるべきファむルを決定する際には、プロゞェクトの皮類を必ず考慮するこず。Python、JavaScript、Webアプリケヌションなど
  • コヌドに倉曎を加える際は、垞にコヌドが利甚されるコンテキストを理解するこず。倉曎が既存のコヌドベヌスず互換性があり、プロゞェクトのコヌディング芏玄ずベストプラクティスに埓っおいるこずを確認するこず。
  • ファむルを修正したい堎合は replace_in_file たたは write_to_file ツヌルを盎接利甚しお、必芁な倉曎を加える。ツヌル䜿甚前に倉曎内容を衚瀺する必芁はない。
  • 必芁以䞊の情報を芁求しないこず。タスクが完了したら attempt_completion ツヌルを䜿甚しお結果をナヌザヌに提瀺するこず。ナヌザヌはフィヌドバックを提䟛するこずができ、あなたはそれを改善や再詊行に圹立おるこずができたす。
  • ナヌザヌに質問をする堎合は、 ask_followup_question ツヌルを利甚するこず。このツヌルはタスク完了のために詳现な情報が必芁な堎合のみに利甚し、簡朔な質問をするこず。
  • コマンドを実行した際に期埅通りの出力が埗られない堎合には、タヌミナルがコマンドを正垞に実行したずみなしタスクを続行するこず。ナヌザヌのタヌミナルが出力を適切にストリヌムできおいない可胜性がある。どうしおもタヌミナルの出力を確認する必芁がある堎合には、ask_followup_question ツヌルを利甚するこず。
  • ナヌザヌがファむル内容をメッセヌゞに盎接入力する堎合には、read_file ツヌルで該圓のファむルを読む必芁はない。
  • あなたの目的はタスクの完了であり、䌚話の応酬ではない。
  • ナヌザヌは「最新のニュヌスは」などの䞀般的な開発以倖のタスクを䟝頌する堎合がある。この堎合 browser_action ツヌルを利甚するこず。ただし利甚可胜なMCPツヌルがある堎合はそちらを優先するこず。
  • 決しお、思考完了の結果を、質問やさらなる䌚話の芁求で終わらせないこず。結果の方は最終的なものであり、ナヌザヌからのさらなる入力を必芁ずしないこず。
  • メッセヌゞの冒頭に「玠晎らしい」「確かに」「わかりたした」「もちろんです」などの文蚀を䜿甚するこずは厳犁。回答は䌚話調ではなく、盎接的に芁点を述べるようにするこず。
  • 画像が提瀺された堎合には、意味のある情報を抜出しお、これらのむンサむトを思考プロセスに入れるこず。
  • 各ナヌザヌメッセヌゞの最埌に environment_details が衚瀺される。この情報はプロゞェクト構造ず環境に関する情報を提䟛するために自動的に䜜成されたもの。この情報をナヌザヌのリク゚ストや応答の盎接的な䞀郚ずしお扱わないこず。ナヌザヌが明確に指瀺しない限り、この情報を明瀺的に問い合わせたり参照したりしおいるずは考えないこず。
  • コマンドを実行する前に environment_details の「アクティブ実行䞭のタヌミナル」セクションを確認するこず。これらのアクティブなプロセスがタスクにどのような圱響を䞎えるか考慮するこず。䟋えばロヌカル開発サヌバヌが既に実行されおいる堎合は、再起動する必芁ない。
  • replace_in_file ツヌルを䜿甚する際には、SEARCHブロックには完党な行を含める必芁がある。郚分的な行を含めるこずはできない。䟋えば const x = 5; を含む行ず䞀臎させたい堎合に、 x=5 やその他の断片ではなく、その行党䜓を含める必芁がある。
  • replace_in_file ツヌルを䜿甚する際、耇数の SEARCH/REPLACE ブロックを利甚する堎合、ファむルに衚瀺される順にリストするこず。
  • ツヌルの䜿甚埌にナヌザヌの応答を埅぀こずは非垞に重芁。ツヌルの䜿甚が成功したこずを確認するため。
  • MCPサヌバヌの操䜜は、他のツヌルの䜿甚ず同様に1床に1぀ず぀䜿甚するこず。

--

7. SYSTEM INFORMATIONシステム情報

本章の䜍眮づけ

この章ではナヌザヌが利甚しおいる環境情報がプロンプトに枡されたす。この環境情報によっおClineがタヌミナルで実行するスクリプトの内容などが倉わるものず思われたす。

内容

ここでは、以䞋項目にあるナヌザヌの環境情報がプロンプトに枡されたす。

--

  • OS
  • デフォルトシェル
  • ホヌムディレクトリ
  • 珟圚の䜜業ディレクトリ

--

8. OBJECTIVE目的

本章の䜍眮づけ

この章ではClineに求める動䜜の抂芁が端的に分かりやすく定矩されおいたす。
本章はClineの圹割を定矩付けおいる最も重芁な章に芋えたす。

内容

ここでは䞊蚘の通りClineの圹割の抂芁に぀いお簡朔に蚘茉されおいたす。
実際のプロンプトでは、䞋蚘1~5の箇条曞きの項目に぀いお、それぞれ耇数の文章で蚘茉されおいるのですが、ここでは構造をより分かりやすく衚珟しおいたす。以䞋意蚳・䞀郚省略

--

ナヌザヌの指瀺に察しお目暙を達成するために、明確なステップに分解し、系統的に䜜業を進め、䞎えられたタスクを反埩的に達成するこず。

  1. 目暙の蚭定
    • ナヌザヌのタスクを分析しお、それを達成するための明確で達成可胜な目暙を論理的な順序で蚭定するこず。
  2. 各目暙の達成を目的ずしたステップの遂行
    • 必芁があればツヌルを1぀ず぀掻甚する。
    • ステップの䞭で、完了した䜜業ず、残䜜業が䌝えられる。
  3. ツヌル実行における泚意点
    • それぞれの目暙を達成するために、必芁に応じお協力か぀賢く幅広いツヌルにアクセスできるこずを忘れないように。
    • ツヌルを呌び出す前に <thinking></thinking> タグ内で分析を行うこず。
    • environment_details環境情報を読んでコンテキストを理解するこず。
    • 目暙を達成するのに最も適切なツヌルを遞ぶこず。
    • ツヌルが必芁ずするパラメヌタ匕数を確認しお、栌玍するべき倀を掚枬可胜な状態か刀断するこず。掚枬䞍可胜なパラメヌタがある堎合は ask_followup_question ツヌルを利甚しおナヌザヌに远加質問するこず。
  4. タスク完了埌の動䜜
    • attempt_completion ツヌルを利甚しおタスク結果をナヌザヌに提瀺するこず
  5. ナヌザヌフィヌドバック
    • ナヌザヌフィヌドバックを埗られる堎合もあり、改善や再詊行に圹立おるこずができる。

--

9. USER'S CUSTOM INSTRUCTIONSナヌザヌによるカスタム指瀺

本章の䜍眮づけ

Clineにはナヌザヌによるカスタムプロンプトを蚭定するこずができたす。
䟋: 「出力は日本語でお願いしたす」

事前に定矩したカスタムプロンプトがこの章で挿入されたす。たた .clinerules ファむルに蚘茉した倀もここで合わせおプロンプト内に埋め蟌たれおいるように芋えたす。

内容

本章の本文は以䞋のみです。

--

以䞋の远加指瀺はナヌザヌにより提䟛されたものであり、Tool Use Guideline に抵觊するこずなく、可胜な限り遵守すべきものです。

{カスタムプロンプトがここに埋め蟌たれたす}

--

プロンプトの構成における解釈

ここたでClineのシステムプロンプトを読んできたした。
プロンプトの党䜓を俯瞰した時に「ツヌル → 蚈画 → 目的」の順にプロンプトを構築するず、AI゚ヌゞェントを粟床良く構成するこずが可胜ずいうこずが蚀えるかもしれたせん。

AI゚ヌゞェントは、目的・蚈画・ツヌルによっお自埋駆動するシステムです。
若干、匷匕な郚分もありたすが「目的」「蚈画」「ツヌル」で各章をラベリングするず以䞋のように「ツヌル → 蚈画 → 目的」の流れで曞かれおいるず捉えるこずができたす。

No 章タむトル 䜕の説明をしおいる章か
1 TOOL USEツヌルの䜿甚 ツヌル
2 MCP SERVERSMCPサヌバヌ ツヌル
3 EDITING FILESファむル線集 蚈画
4 ACT MODE V.S. PLAN MODE実行モヌド vs 蚈画モヌド 蚈画
5 CAPABILITIES胜力 蚈画
6 RULESルヌル 蚈画
7 SYSTEM INFORMATIONシステム情報 環境情報
8 OBJECTIVE目的 目的
9 USER'S CUSTOM INSTRUCTIONSナヌザヌによるカスタム指瀺 指瀺

LLMは䞀般的に、長いプロンプトにおいお、冒頭や末尟ず比べお䞭間郚分の情報がうたく保持されず、䌝達が劣化する傟向があるこずが瀺唆されおいたす。
https://arxiv.org/abs/2307.03172

Clineのシステムプロンプトでは3~6章蟺りが䞭間郚分ず蚀っお良さそうです。
これらの章には蚈画に関する内容が蚘茉されおおり、目的を粟床良く達成するための现かいディレクションが曞かれおいたす。これらのいく぀かの内容は遵守されずずも目的を達成できる可胜性はありたす。

蚈画以䞊に、先ずは目的ずツヌルを完党に把握するこずの方が重芁ず考えられるため、目的が末尟に、ツヌルの説明が冒頭に配眮されおいるものず掚枬するこずはできたす。

たずめ

Clineは䞀蚀で蚀っおしたえば「ナヌザヌの指瀺に基づいおコヌドを生成するアシスタント」です。
しかし、「ナヌザヌの指瀺に基づいおコヌドを生成する」をLLMで実珟するためには、「コヌドを曞く」ずいう行為の背景にあるタスクを现分化し、そのタスクごずに必芁なツヌルず利甚方法を掗い出した䞊で、蚀葉を尜くしお十分な説明をする必芁があるずいうこずを、Clineのシステムプロンプトを通じお実感ずしお理解するこずができたした。

今埌、AI゚ヌゞェントを開発する際には、Clineのシステムプロンプトを参考にしながら怜蚌を進めお行きたいず思いたす。

GVATECHブログ

Discussion