おまけ#
各ページで利用したプロンプトです。 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を読み込みツールを実行する}ようにしてください。
繰り返しの中で実行したツールは配列としてプロンプトに
これまでに実行したツール:
として追加してください。