初LLMです。
背景
VSCodeでローカルLLMを使った補完を使いたかった。ざっくり探すと以下のようなものがあった。
- Continue
- 様々なLLMを利用してGitHub CopilotのようなVSCode拡張
- わりと有名だが、デフォルトでテレメトリを送るのでトラッキングが気になるなら切る必要がある。
- Llama Coder
ただ、VSCode機能拡張はこのご時世もあり、あまり入れたくないな、という感じなのと、そもそもGitHub Copilotがあるのだから、それをそのまま使えないのだろうか?と思った。
調べると通信先としてプロキシを通させるオプションがあり、それを利用したものを探したところ以下が見つかった。
- Ollama Copilot
- Go製HTTP Proxyサーバ
- メンテナンスされなさそう
- FauxPilot
FauxPilotはOllamaに対応してなさそうということで、Ollama Copilotを試してみた。あとコード量も時間を書ければ全然読めるレベルだったので変なもん入ってもすぐにわかりそう、という安心感があった。
しかし、こちらもバイナリの配布はなかったのと、ollamaの用意とかも面倒だった。
コンテナ化
ということでコンテナにしてみた。
Dockerイメージもあげてあります。
https://hub.docker.com/r/ryozitn/ollama-copilot
Linuxな環境(特にWSL)でdocker or podmanがある環境なら compose upすれば使えるはず。WSLで動かせばWindows(ホスト)のVSCodeからでも通信できる。devcontainerからは試してない…(`--add-host="host.docker.internal:host-gateway"みたいなオプションを与えれば行けるかもしれない?)
つたないREADME_ja.mdでも読んでください。
最近はPodmanに凝っているのでPodmanでも動作するように頑張った(PodmanはRUN --mount=type=bind
回りにバグがあるっぽいので2回目以降のビルドはうまくいかないかも)
(人のもんを勝手にDockerコンテナ化して配るってどうなんですかね)
動かしてみた
コード補完が動いた。Chatは無効化されていたりコミットメッセージの補完は動かなかった。やはり簡単にはいかないのか。
codellama:codeは無から補間されるコードはイマイチっぽかった。httpサーバでrecv(BUFSIZE)なんてしたら永久に待ってしまう可能性があるので。これは与えたタスクが悪いというのはあるかもしれない…
あとは謎の補完が出たりすることがあるのが気になる。
他気になってるところ。
- TLSの通信が失敗するログがしばしば出るのが気になる。Microsoft宛てっぽい。自分の環境だけかもしれない?
- GPUを使わないととんでもないCPU使用率になってタイムアウトした
- 初動はモデルのロードがあるからか少し時間がかかる
でもローカルLLMが発展してくれればollamaを通して恩恵が得られるはず。凄い人たち頑張ってくれー
ちなみにGitHub Copilot自体は全く使ったことがない。(コード補完以外にどういった機能があるかわかってない)