7 ポイント 投稿者 GN⁺ 2024-01-01 | 1件のコメント | WhatsAppで共有
  • Emacs Copilotは、ローカルで実行されるLLM(Large Language Model)を使って、Emacsバッファ内でコード補完を生成する
  • LLMはファイルごとにローカルの編集履歴を記憶するサブコマンドとして実行され、C-gを使っていつでもLLMを中断できる
  • コードを削除すると、LLMのコンテキストからその履歴も削除されることがあり、言語に依存せずファイル拡張子によってプログラミング言語が判定される

WizardCoder 34bモデル

  • WizardCoder 34bは、GPT-4と同じHumanEvalスコアを獲得した優れたLLM。
  • このモデルを使うには、Mac Studio M2 Ultraのような高性能なコンピューターが必要で、Macbook ProユーザーはQ3版を、一般的なPCユーザーはWizardCoder-Python-13bモデルを検討できる。
  • Raspberry Piのように計算資源が限られた環境では、Phi-2モデルを利用できる。

始め方

  • 関数の1行目を書いたあと、C-c C-kを押してLLMに制御を渡すと、残りの関数実装を生成してくれる。
  • LLMは関数が完成すると停止するよう調整されており、説明やELI5(やさしく説明する)コメントは避ける。

参照実装

  • LLMをダウンロードしたあと、Emacsバッファに以下のコードをコピーしてM-x eval-bufferを実行すればよい。
  • コードは個人の好みに合わせて調整できる。

Emacsダウンロードリンク

  • Emacsがインストールされていない場合や、Windowsのように入手しにくいプラットフォームを使っている場合のために、インストール不要で実行できる単一ファイルビルドのEmacsリンクが提供されている。

LLMダウンロードリンク

  • Emacs Copilotと相性がよいとされるいくつかのLLMを無料でダウンロードできるリンクが提供されている。
  • モデルのサイズはハードウェアに合わせて選択できる。

キャッシュファイル

  • モデルを変更する場合は、ローカルファイルシステムに作成されたすべてのFILE.cacheファイルを削除する必要がある。

注意事項

  • macOSでApple Siliconを使う場合は、Xcodeがインストールされている必要がある。
  • zshを使っている場合は、sh -c ./llamafileで実行する必要があるかもしれない。
  • 一部のLinuxシステムでは、binfmt_misc登録に関するエラーが発生することがある。

対応OSとCPU

  • llamafileは、最小限のインストール要件で複数のオペレーティングシステムをサポートしている。
  • llamafileは特定のCPUをサポートしており、SSSE3以上の命令セットを備えたAMD64マイクロプロセッサ、またはARMv8a+を備えたARM64マイクロプロセッサが必要。

モデルに関する注意

  • 上記で提供されているllamafileの例は、特定のモデル、ライセンス、データセットに対するMozillaの支持や推奨を意味するものと解釈してはならない。

GN⁺の見解

  • 革新的な編集体験: Emacs Copilotは開発者に新しい次元のコーディング支援を提供し、効率と生産性を大きく向上させる可能性を持つ。
  • アクセシビリティとカスタマイズ性: ユーザーは自分のニーズや好みに合わせてLLMを選び、Emacs環境を調整できるため、パーソナライズされた開発環境を構築できる。
  • 技術的互換性: 多様なオペレーティングシステムとCPUをサポートすることで、幅広いユーザーがEmacs Copilotを利用でき、開発者コミュニティにおける包摂性とアクセス性の向上につながる。

1件のコメント

 
GN⁺ 2024-01-01
Hacker Newsの意見
  • LLM/IDE統合の有用性への疑問

    LLM/IDE統合が一般的なコーディング作業で大きな生産性向上をもたらすのか確信が持てない。プログラマーの平均的な生産性は1日あたり100 LOC程度だが、プロトタイプを作るときは1日あたり1000 LOC以上を簡単に書ける。プロダクション品質のコードとハック/プロトタイピングの生産性の差は品質面によるものであり、たいていの有能なプログラマーは、自分でコーディングしたほうがLLMや他のソースからコピーしたものより高品質なコードを作れる。コードを分析し、脆弱性がないか、将来の保守のための設計が適切かを確認するのにかかる時間が、コードを自分で書かないことで得られる時間的利益を相殺してしまうように思える。LLMは学習に使ったり、品質が重要でない使い捨てのコードを書くときには有用かもしれないが、プロダクションコードについては、LLMの出力が開発者レベルに達し、細かくレビュー/修正する必要がなくなる地点までは、まだかなり距離があると思う。

  • セルフホスト型LLMツールの開発への感謝

    セルフホスト型LLMツールの開発を進めてくれたJustineに感謝を表したい。Llamafilesは標準になるべきだ。同じLAN上でホストされたリモートLLMに接続する方法があるのか知りたい。Appleデバイスは使っていないが、ネットワーク上に高性能なマシンがあるのでそれを使いたい。LlamafileがAPIを提供できるのか、これはLSPの領域に入る話であり、Llamafilesを活用するのがよさそうだ。

  • EmacsでのLLM統合体験の共有

    コーディングと技術文書作成のほとんどでEmacsを使っている。phind-v2-codellama、openhermes、ollama、gptel、そしてGitHubのCopilotを動かしている。任意の領域をLLMに送って指示できる機能が気に入っている。UXはまだ初期段階だが、ベースモデルがすべてのコンテキスト(たとえばorgmodeファイルや開いているファイルバッファ)を受け取り、LSPのようなツールを使えるようになったらと想像してみてほしい。

  • MacBook Pro M1 MaxでのLLM実行体験

    MacBook Pro M1 Max、64GB RAMを使っており、34B Q55モデル(大きなモデル)をダウンロードして問題なく動作することを確認した。速度は遅いが実用可能だ。Asahi Fedora Linuxパーティションで実行しており、GPUをどう活用しているのかは分からない。ZSH 5.9で環境を構成しており、SUDO経由でLLMを直接呼び出すとWebサーバーとしてすばやくロードされ、localhost:8080経由でWebブラウザから対話できる。しかしEmacsでLLMを実行しようとすると、"Doing vfork: Exec format error." というエラーが発生する。Readmeのデモに従ってisPrime関数の冒頭を入力し、その後 C-c C-k をタイプするとこのエラーが出る。何が間違っているのか心当たりがないか尋ねている。

  • 動画デモのis_prime関数への批判

    動画デモで示されたis_prime関数は非常によくない。入力が2で割り切れなくても、4、6、8などで剰余チェックを続けており、これは完全に無意味だ。コードを1行追加するだけで(奇数チェック)、ループを奇数だけにして速度を2倍にできる。こうしたLLMを使う人たちには、prodへプッシュする前にコードをレビューしてほしい。

  • NixOSで実行できないllamafileビルドについての質問

    cosmopolitan/実際にポータブルな実行ファイルを使わずに独自のllamafileをビルドできるのか質問している。NixOSでは実行できない。

  • より汎用的なLLM統合への要望

    現在提供されているものには満足しているが、これができることとLLMができるあらゆることをこなせる、より汎用的なLLM統合を望んでいる。たとえば、あるキー入力では「このコードを補完せよ」になるかもしれないし、別のキー入力では現在のバッファをそのままLLMに送ったり、領域をLLMに送ったり、領域をLLMに送って結果で置き換えたりできるようにしたい。入力をLLMにさまざまな方法で渡すいくつかの直交的な機能(領域、バッファ、ファイル、インラインプロンプト)と、結果をさまざまな方法で出力する機能(ポイント位置に追加、領域を上書き、新しいバッファに入れるなど)があり、その上にコード補完や散文などの各種自動システムプロンプトを構築できるはずだ。

  • VimユーザーによるLLM統合カスタムコマンドの共有

    現在選択中のコードを取り出し、ブラウザウィンドウを開いてさまざまなAIエンジンに改善を依頼できるカスタムコマンドを使っている。vimrcで使っているコマンドを共有している。

  • Llamafileのアップグレードパスについての質問

    Llamafileのアップグレードパスについて質問している。llama.cpp(頻繁に更新される小さなファイル)とモデル重み(頻繁には更新されない大きなファイル)を1つにまとめたものだと理解している。llama.cppに修正が必要になるたびに、変更されていないモデルの数GBを再ダウンロードしなければならないのか気になっている。

  • LLM統合への関心と試してみたい意向の表明

    とても興味深く、ぜひ試してみたい。ただしGitHub Copilotの動作方式とはかなり異なるため、この名前はあまり適切ではないかもしれない。Emacsのアーキテクチャなどを考えると、LLMとの統合がもっと進んでいないのは意外だが、ほとんどのプロジェクトはここ数か月更新されていない。それでも、Emacsを使う人の多くはLLM活用に反対しているのかもしれない。