LM StudioのモデルをLangchainで読み込み、簡単な Python チャットボットを構築する

LLMTech未分類

LM StudioのモデルをLangchainで読み込み、簡単な Python チャットボットを構築する

本記事では、LM Studio を用いたローカル LLM サーバーを Python から利用し、簡単なチャットボットを構築するプロセスを紹介します。設定の注意点やトラブルシューティングについても解説しています。


背景と目的

生成系 AI の多くはクラウドベースで提供されていますが、データセキュリティやカスタマイズ性の観点から、ローカル環境で動作する LLM(大規模言語モデル)を利用するニーズが増えています。今回は GUIで簡単にローカルモデルを読み込み、実行ができるLM Studio を使い、Python スクリプトからローカル LLM と会話を行う仕組みを構築しました。


環境構築

以下の環境で作業を進めました。

  • OS: macOS
  • Python バージョン: 3.13.1
  • ローカル LLM サーバー: LM Studio
  • モデル: Llama-3.2-3b-Instruct(LM Studio にロード済み)

ステップ 1: LM Studio のセットアップ

LM Studio は、ローカルで動作する LLM をサポートするサーバーソフトウェアです。以下の手順でセットアップを行いました。

  1. LM Studio のインストール:
    • LM Studio を公式サイトからダウンロードし、インストール。
  2. アプリケーションを開き、チュートリアルにそって最初のモデルを読み込み、ローカルに対してエンドポイントとして公開
  3. モデル一覧の確認: 以下のコマンドで利用可能なモデルを確認。
    curl http://127.0.0.1:1234/v1/models
    

    結果:

    {
      "data": [
        {"id": "llama-3.2-3b-instruct", "object": "model"},
        {"id": "llama-3.3-70b-instruct", "object": "model"},
        {"id": "text-embedding-nomic-embed-text-v1.5", "object": "model"}
      ],
      "object": "list"
    }
    

ステップ 2: Python からサーバーにリクエスト

基本的なリクエスト

以下の curl コマンドを使用して、サーバーがリクエストに応答することを確認。

curl http://127.0.0.1:1234/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "llama-3.2-3b-instruct",
    "messages": [{"role": "user", "content": "こんにちは!"}],
    "temperature": 0.7,
    "max_tokens": 100
}'

サーバーの応答例:

{
  "id": "chatcmpl-z7j611kipqh4zlq20w9x22",
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "こんにちは!どういたzなですか?何でもお話しましょう。"
      }
    }
  ]
}

Python での実装

Python からサーバーにリクエストを送信するスクリプトを作成しました。

LMSTUDIOのホスト名などは環境変数として埋め込んでいます。エンドポイントURLなどはアプリケーション側に書いてあるのでその通り設定してください。

例:

LMSTUDIO_HOST=”http://[your_host]:[your_port]/v1″
import requests
import os

BASE_URL = os.getenv("LMSTUDIO_HOST")
MODEL = "llama-3.2-3b-instruct"

def chat_with_llm(user_input):
    url = f"{BASE_URL}/chat/completions"
    payload = {
        "model": MODEL,
        "messages": [{"role": "user", "content": user_input}],
        "temperature": 0.7,
        "max_tokens": 100
    }
    headers = {"Content-Type": "application/json"}

    try:
        response = requests.post(url, json=payload, headers=headers)
        response.raise_for_status()
        data = response.json()
        return data["choices"][0]["message"]["content"]
    except requests.exceptions.RequestException as e:
        print(f"エラー: {e}")
        return None

if __name__ == "__main__":
    print("Assistant: こんにちは!何でも聞いてください。(終了するには 'quit' と入力してください)")
    while True:
        user_input = input("You: ")
        if user_input.lower() == "quit":
            print("Assistant: 会話を終了します。さようなら!")
            break
        assistant_response = chat_with_llm(user_input)
        if assistant_response:
            print(f"Assistant: {assistant_response}")

ステップ 3: トラブルシューティング

問題: モデルが見つからない (404 エラー)

  • Python スクリプトで、model_not_found エラーが発生。
  • 原因: モデル名の誤設定、またはモデルがサーバーでロードされていない。

解決方法:

  1. モデル名を再確認:
    • サーバーに問い合わせ、正しいモデル名を確認。
  2. サーバーの設定確認:
    • ポート番号やホストアドレスが正しいか確認。

ステップ 4: 応答の質を向上

モデル応答が日本語に完全対応していないため、以下の変更を加えました。

  1. システムメッセージの追加:
    • モデルに「日本語で応答する」よう指示。
    {"role": "system", "content": "あなたは日本語で話す親切なアシスタントです。"}
    
  2. 温度 (temperature) の調整:
    • 応答の一貫性を高めるため、temperature0.3 に設定。

最終動作例

ユーザー入力と応答:

Assistant: こんにちは!何でも聞いてください。(終了するには 'quit' と入力してください)
You: こんにちは
Assistant: こんにちは!どういったお手伝いをいたしましょうか?
You: 天気について教えて
Assistant: 申し訳ありませんが、天気の情報は提供できません。他に何かお手伝いできることはありますか?
You: quit
Assistant: 会話を終了します。さようなら!

まとめ

本記事では、LM Studio を利用したローカル LLM チャットボット構築の手順を紹介しました。特に以下のポイントが重要です。

  1. LM Studio サーバーの設定:
    • モデルのロードとエンドポイントの確認が最重要。
  2. Python からのリクエスト:
    • requests ライブラリを活用し、サーバーと通信。
  3. 応答の改善:
    • モデル指示 (system メッセージ) とパラメータ調整で応答の質を向上。

これにより、ローカル環境で安全かつ柔軟なチャットボットを構築することができました。

飲んだ? カウンター
  • 飲んだ! (0)

コメント

タイトルとURLをコピーしました