Skip to content

おまけ#

各ページで利用したプロンプトです。 LLMの特徴上、再現性が100%ではないことにご留意ください。 また、いくつか手動で手直しは必要でした。あらかじめご了承ください。

/agent_llm#

extension.tsのhtmlのHello Worldの下に、横幅いっぱいの4行のtextareaをつけて、textareaでEnterを押したらtextareaの下にtextareaに入力した文字が出力され、textareaの中は空欄にしてください。ただし、IMEの決定時のEnterは無視してください。
コードの変更は最小限にしてください。
Enterキーを押すしたときはdivエレメントを新しく作成して、output.appendChildするようにしてください。
現在extension.tsではtextareaでenterを押すとoutput.appendChild(newDiv);していますが
ここで直接エレメントを追加するのではなくwebviewからvscodeに
vscode.postMessage({type:"promptEnterd" でvscodeに入力されたテキストとともにイベント送信し
vscodeではwebviewView.webview.onDidReceiveMessage(async (data) => {でイベントをテキストとともに受け取りwebviewView.webview.postMessageでwebviewにテキストと共にイベントを送信しwebviewでは
window.addEventListener("message"でエレメントを追加するようにしてください
webviewView.webview.onDidReceiveMessage(async (data) => {
            if (data.type === 'promptEntered') {
のときに処理を追加して
追加する処理はvscode.lmにdata.textを渡して戻り値から文字列を取り出して
webviewView.webview.postMessage({
                    type: 'addElement',
                    text: returnTextFromVscodeLm
                });
する処理です

/agent_write_tool#

\`\`\`
                const messages = [vscode.LanguageModelChatMessage.User(data.text)];
                const response = await model.sendRequest(messages);
\`\`\`

において、responseにはJSONを返すようにmessagesにプロンプトを入れてください
返すJSONのフォーマットは
{"tool":"利用するツール"
args:["ツールに渡すパラメータ1","ツールに渡すパラメータ2"]
}
とするようにプロンプトに指定してください。
toolにはwritefileかmessageを返すようにプロンプトに指定してくださいwritefileの場合はargsは["ファイルパス","ファイル内容"]messageの場合には["ユーザに見せたいメッセージ"]とするようにプロンプトに指定してください。
data.textにユーザの依頼が入っているので、それを実現するようにプロンプトに指定して下さい。


returnTextFromVscodeLm JSON.parseしてtoolがmessageの場合には
                webviewView.webview.postMessage({
                    type: 'addElement',
                    text: returnJSON.args[0]
                });
parseしてtoolがwritefileの場合にはvscodeの機能を使って、現在のディレクトリのargs[0]のパスにargs[1]の内容のファイルを作成するようにしてください。

/agent_read_tool#

利用可能なツールに
readfile: ファイルを読み込む場合。argsは["ファイルパス"]
を追加してください。
ファイルを読み込んだら、パスとファイル内容を保持できる型を用意し、複数のパスとファイル内容を保持できるMagiViewProviderのフィールド変数を定義して保持してください。フィールド変数に保持しているパスとファイル内容は「これまでに読み込んだファイル」としてprompt内にいれるようにしてください。

/agent_iterable#

利用可能なツールに
finish: 依頼が完了した場合。
を追加して、finishツールが返答されるまでは繰り返し{モデルの選択からからJSONを読み込みツールを実行する}ようにしてください。
繰り返しの中で実行したツールは配列としてプロンプトに
これまでに実行したツール:
として追加してください。