Aider コーディングアシスタントで遊んだ後、私は過去数週間で Mentat を使用してきた。
Aider と比較
動作の仕方は似ています。テキストUIでターミナル上で動作し、ライトモードとダークモードのカラースキームを設定することもできます。コーディングセッションでは、関連するファイルをコンテキストとして追加します。チャットボックスで、望みを述べ、コードの変更計画が作成されます。承諾すると、変更が適用されます。
Aider と異なる点は、Aider が変更のたびに git コミットを作成する(これはオプトアウト可能)のに対し、Mentat はバージョン管理をユーザーに任せています。
あなたが望みをどのくらい明確に述べるかが、仕事の質を決定します。你がLLMの選択も影響します。どのアシスタントを使用しても、まだ新人みたいに話さなければならません。
コンテキストの制限
Mentat は Aider と比べると、サポートしている LLM のリストが少ない(これが将来変わるかもしれません)。これが問題にならないように、私は Together.ai にあるコーディング LLM と Mentat を接続しました。
しかし、それが問題にならず、すぐにコンテキストウィンドウの制限にぶつかりました。私のファイルが長いものも含まれるが、多くのファイルを含めていません。すでに何か賢いことをさせようとしていたわけではなく、ただこれが機能するかどうかを確認しようとしていたのです。
この問題を解決する方法は、単に大きなコンテキストウィンドウを持つ LLM を使用することではありません。常に上限があり、必ずそれにぶつかることになります。
RAG を自作
これが RAG の答えだと聞いたため、私は Mentat と LLM の間にミドルウェアを構築しました。
これは OpenAI と互換性のある REST API(http://localhost:<port>/chat/completions)で、ローカルで動作し、1つの Python ファイルにまとめられています。私はこれを Broken Sword と呼びます。
Mentat からは Broken Sword が実際の LLM サービスに見えます。Broken Sword 内で Mentat のリクエストをキャプチャーし、入力を整え、任意の LLM に送り、OpenAI と互換性のあるレスポンスを返します。この過程で Mentat が与える包括的な指令を見ることができます。
これで Mentat は、人類が利用可能な任意の LLM を使用できるようになりました。私は Google Gemini 1.5 を使用して Broken Sword を動かすことにしました。主にこれが質とコストのバランスが適切だからです。
しかしこれでコンテキストウィンドウの制限が解決されるわけではありません。この点は、単にパイプを増やすことです。
Mentat から送られる大きなコンテキストをそのまま送らず、代わりにベクトルデータベースに保存し、埋め込みとして送ります。長いテキストが多次元の数字行列に変換されるようです。LLM がこれを使用するのは、元のテキストよりもずっと小さいです。
私は LangChain を使用してこれが機能するようにしました(これは LangChain が抽象化された一連の過程を提供しているため)。これが動作するまでの時間がかかりましたが、LangChain を使用してこれが動作するまでの時間がかかりました。私はこれが魔法のように感じましたが、後でこれがどのようになるかを学びたいです。
これが動作するまでの時間がかかりましたが、Mentat が期待どおり動作し始めました。私はこれにユニットテストを書かせた後、既存のものと一致するスタイルで書かれました。私はこれに GitHub Actions ワークフローを書かせた後、結果が合理的でした。
これが動作するまでの時間がかかりましたが、Mentat が動作するまでの時間がかかりました。 Broken Sword を使用してこれが動作するまでの時間がかかりましたが、Mentat が動作するまでの時間がかかりました。
Mentat が動作するまでの時間がかかりましたが、Mentat の RAG あるいはベクトルデータベースの使用方法がわかりません。Mentat のコードベースを確認してみたが、Chroma DB が使用されている(これは、私が使用しているベクトルデータベースです)。だから、Mentat が RAG を使用しているが、問題に当たる方法でないようです。
しかしこれは不格好です
Mentat をより多く使用するにつれて、不格好さが明らかになります。時々これがクラッシュします。LLM が期待どおりの結果を返さなかった場合や、理由がわからない場合です。優雅な失敗はこれの長所ではありません。
Mentat がクラッシュしてしまうことがあります。リランチして関連するファイルを再度追加し、同じリクエストを繰り返します(これがチャット履歴で容易に実現できるため)。そしてすべてがうまくいきます。
手動コーディングの混合
この冒険で答えたい1つの質問は、コーディングアシスタントをこのように使用し、直接ファイルを編集して1つの問題を解決するための適切な混合比です。もしそうなら、コーディングアシスタントがこれをすべて解決してくれるか、コードエディターが次の画面で準備されているかです。
私の場合、画面の半分が Mentat に割り当てられており、もう半分が emacs に割り当てられています。Mentat がほとんどのものを解決してくれると期待しているが、完璧でないと考え、emacs で同じファイルに小さな調整を加えます。
Mentat スタイルのコーディングアシスタントが将来を持ち合わせるかどうかを考えると、問題はこれが将来の答えかどうかです。
dev.to
Deep dive into Mentat coding assistant
Create attached notes ...