3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ローカル SLM AI code assistant 編】機密情報が漏れるのが怖い?じゃあローカルでL(S)LMを動かせばいいじゃない

Last updated at Posted at 2025-02-02

目的

皆さん、コーディング時には生成AIを使っていますよね?
1つ、生成AIの活用方法に「AI code assistant」というものがあります。
AI code assistantとはその名の通り、コードを書く際に手伝ってくれる便利ツールです。
主にVS Codeなどのエディタ上で動作し、AIとペアプログラミングするイメージをしていただければ早いかと。

代表的なものでいうと以下があげられますね

その時に課題となってくるのが機密情報の取り扱いになるかと思います。
先に上げたブラウザ上やAPI経由で扱う生成AIは、どうしてもやり取りの内容がネット上を経由してしまいます。
加えて、モノによってはやり取りの内容をモデルの学習に使われてしまうのではといった不安もあるかと思います。

機密性での不安から業務活用へ踏み出せない。。。

ここで本日の目的

じゃあ「AI code assistant」をローカル環境で完結させたらいいじゃない

環境

本日扱うのはこちら
LM Studio
VS Code
Continue (VS Code 拡張機能)

手順

LM Studio のインストール

まずローカルで言語モデルを動かすためのツールであるLM Studioをインストールします。

モデルのダウンロード

アプリ起動後、サイドバーから検索マークを選択してください。
image.png

検索窓に[TinySwallow」と入力してください。
いくつか候補が出てきますが、今回はSakanaAIのモデル「TinySwallow-1.5B-Instruct-GGUF」をダウンロードします。
image.png

TinySwallowとは
sakana.aiが開発した日本語対応済みの小規模言語モデル(SLM)です。
ローカルPCでも十分に動くサイズ感のモデル!
詳細はこちら↓
https://sakana.ai/taid-jp/

モデルをローカルサーバーで動かす

インストール完了後、サイドメニューの開発ツールを開いて下さい。
画面上部の「Select a model to load」より先ほどダウンロードした「TinySwallow-1.5B-Instruct-GGUF」を選択します。
image.png

image.png

モデルが「READY」状態になったことを確認し、画面上部の「Status:Running」をオンにしてください。
image.png

これでローカルサーバーが「http://127.0.0.1:1234」として実行されました。
以下のようなCurlコマンドでモデルとやり取りができるようになります。

curl http://localhost:1234/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tinyswallow-1.5b-instruct",
    "messages": [
      { "role": "system", "content": "Always answer in rhymes. Today is Thursday" },
      { "role": "user", "content": "What day is it today?" }
    ],
    "temperature": 0.7,
    "max_tokens": -1,
    "stream": false
}'

VS CodeからAI code assistantとして活用

今回VSCodeの拡張機能のContinueを使います。

Continueは、主要なオープンソースAIコードアシスタントです。任意のモデルと任意のコンテキストを接続して、VS Code と JetBrains 内でカスタムのオートコンプリートとチャットエクスペリエンスを構築できます

まずはこちらの拡張機能をVSCodeにインストールしてください。

インストール後、Continueの画面を開くとチャットスペースが追加されているかと思います。
指定モデルをプルダウンから「Add Chat model」から変更します。
image.png

Providerには「LM Studio」を、Modelには「Autodetect」(後で編集します。)を選択してConnectを押下してください。
image.png

その後、画面上部の歯車マークからContinueのconfig.jsonを開きます。
image.png

先ほど追加したLM Studioに関する記述が追加されています。
これを今回使うモデルに変更します。

config.json
// 変更前
    {
      "apiBase": "http://localhost:1234/v1/",
      "model": "AUTODETECT",
      "title": "Autodetect",
      "provider": "lmstudio"
    }

// 変更後
    {
      "apiBase": "http://localhost:1234/v1/",
      "model": "tinyswallow-1.5b-instruct",
      "title": "tinyswallow-1.5b-instruct",
      "provider": "lmstudio"
    }

以上で「AI code assistantをローカル環境で完結」させる手順になります。

動かしてみる

エディター上で動かすAI code assistantの強みは、ワークスペース上のコードをもとにチャットを行えることだと思います。
今回の環境も「@ファイル」のように、特定のファイルに対して指示を出してみました。
(内容は適当なので特に解説はしません。)
{0DDCAD22-523E-4B2E-87AF-F484545CC64E}.png

ちなみにLM Studio上で実行ログが出力されます。
image.png

まとめ

近年、スマートフォンなどのエッジデバイスで運用できるレベルの小規模言語モデル(SLM)が開発されてきています。
その分、大規模言語モデル(LLM)と比べると性能はまだまだ劣ってしまいますが、現時点でも特定の領域・タスクに特化した活用方法であれば軽量かつ低コストという大きな恩恵が得られるかと思います。

モデルごとに得意・不得意の領域があるので、自分に合ったモデルを見つけつつ是非ローカルでも動かしてみてください。

これで機密性の不安から生成AIは使わないという言い訳はできなくなりましたね。

仲間を募集しています!

ARIではエンジニア・ITコンサルタント・PM職全方位で仲間を募集しております。
カジュアル面談、随時受付中です!
ご興味ある方はこちらをご覧ください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?