AIとペアプログラミングする VSCode Extension を書きました
atusy/aibou.nvim という AI とペアプロする Neovim プラグインがあります。(作者さんからの紹介記事)
Visual Studio Code の Language Model API で、GitHub Copilot Chatで使えるLLMを利用して似たようなことができるのではと思いました。 そこで作ってみたのが pAIr programmer です。
動作風景
どんなことができるのか
GitHub Copilot Chat などの Chat 形式の VSCode 拡張機能はこちらからの問いかけに応じて色々なことをしてくれますが、一方でこちらから問いかけをしないことには何もしてくれません。 pAIr programmer は、編集中のファイルの diff を自動的に LLM に渡すことで、こちらからの問いかけなしに LLM とペアプログラミングするような体験を得ることができます。 aibou.nvim とは違って送信タイミングの最適化がまだうまくできていないのですが、ある程度は似たような体験ができると思います。
どんな技術を使ったのか
Visual Studio Code の拡張機能は TypeScript で書くことができるので、TypeScript で書きました。 また、LLM との通信には Visual Studio Code の Language Model API を利用しています。 デフォルトでは gpt-4o を利用するようになっていますが、設定を変更することでほかのモデルも利用できるようになっています。 また、LLMに渡すカスタムインストラクションも指定できるようになっているので、例えばユーザーが使っている言語を指定することで母語でのペアプログラミングをすることもできます。
どんな人に使ってほしいのか
pAIr programmer は、有料の GitHub Copilot の権限を持っている人で、ペアプログラミングをやってみたい人におすすめです。 VSCode LM API を多用する関係で、GitHub Copilot Free を使っている人にはおすすめできません。
今後追加でできるといいなと思っている機能
送信タイミングの最適化
aibou.nvim では、ユーザーの編集速度に応じて送信タイミングを最適化する機能があるようです。 pAIr programmer でも、同様の機能を追加したいと思っています。現状は3秒間編集がなかった時もしくはファイル保存時に送信するようになっているのですが、これだとユーザーの編集速度に応じて送信タイミングを最適化することができません。
送信する diff の最適化
現状だと jsdiff を利用して差分を取得していますが、より効率的な方法を模索しています。 具体的には、差分の周辺のコードを同時に送信することを考えています。例えば現状だと空行を追加したり削除した際に周辺コードが送信されておらず、LLMからは空行のみの差分が見えているので、あまりいい結果が得られません。
チャットパネルの自動スクロール
現状、チャット履歴を表示しているパネルは自動でスクロールしません。 画面からはみ出した部分は見えなくなってしまうので、自動でスクロールするようにした方が体験がいいと思っています。
Discussion