ローカルLLM(自分専用生成AI)はいかが?(15:API接続で独自AIアプリ)

読者の皆様こんにちは。


当ブログではここまでOllamaやLM Studioを中心として、その他の既存のツールと組み合わせることでローカルLLMを使う方法をご紹介してきました。しかし自身が書いたコード内で直接AIを利用する方法はご案内してきていません。今回はもう一歩踏み込んで、ローカルLLMを自身が書いたコード内でも用いる方法について触れて行きたいと思います。一口に”コードに組み込む”と言っても様々なパターンがあるので、今回はpythonを用いてAIに質疑応答ができるデスクトップアプリを動かしてみることにします。


今回使うもの

Python3(Libraryでopen ai, PySimpleGUIを使用します。)

LM Studio

いつものMac (M1 Mac mini 16GB)


ざっくりした流れと説明

大まかな流れとしては、

1、LM Studioが提供しているopen ai互換のAPIを使用して質問と受け答えをする。

2、PySimpleGUIを使って質問の入力欄や回答の記述欄を表示する(それっぽく←)。

3、1と2を組み合わせる。

といった感じです。

そして初心者の方でも簡単にできるように、インターネット上にある情報を参照しつつ、今回はコードを触りますがコードの生成自体はgpt-oss20bにやってもらおうと思います。


まず最初に

まずはLM Studioの準備なのですが、これについては過去記事にて取り扱っているので今回は割愛します。(LM Studioにてローカルサーバーを起動するところまで完了させてから次に進んでくださいね)

ってことで最初にやるのはpythonのインストールから。

homebrewをご利用の方は

brew install python3

とターミナルで叩けばMacが勝手にPythonを使えるようにしてくれます。

homebrewをご利用で無い方は、pythonの公式ホームページからダウンロードしましょう。Mac版だけ自身で選べばあとはいつも通りにソフトをインストールするステップを踏むだけです。



続いてやること

今回はapiを用いてLLMとやり取りを行う過程についてLM StudioでローカルLLMを簡単に使ってみよう!API活用も解説!を参考に、GUIアプリを作る過程を【Python】おしゃれなデスクトップアプリ作ってみた|開発例から配布方法までを参考にさせていただいています。


というわけでまずは前半部分のLLMとのやりとりについて。

この過程で最初にやるのはpythonへのopen aiのライブラリの追加です。ターミナルで以下のコマンドを叩きましょう。

pip3 install openai

これで準備完了です。

続いて、pythonファイルの作成です。

適当なディレクトリに以下のコマンドでpythonファイルを作成します。ファイル名はなんでも大丈夫ですよ!!

touch pythonTest.py

ファイルの内容は以下のものをまるまるコピペしてもらって大丈夫です。

# LM StudioはOpenAI互換のAPIを提供
from openai import OpenAI

# LM StudioにホストされているAPIサーバーに接続
client = OpenAI(base_url="http://localhost:1234/v1", api_key="")

#gemma-3-12bに質問を投げる
response = client.chat.completions.create(
model="gemma-3-12b",
messages=[
{"role": "user", "content": "pythonについて教えて"}
], # ユーザーからの入力メッセージ
)

# 生成されたテキスト応答を表示
print(response.choices[0].message.content)

続いて、上記で書いたプログラムを実行してみます。

このプログラムを保存したディレクトリで以下のコマンドを実行します。

python3 pythonTest.py

返答にはしばらく時間がかかりますが、上のプログラム内に記載された"pythonについて教えて"に対する答えが返ってきます。以下に返ってきた答えもつけておきますね。

Pythonは、汎用性の高い高水準プログラミング言語です。その特徴と魅力について、初心者の方にも分かりやすく説明しますね。

**1. Pythonとは?**

* **高水準言語:** 人間が理解しやすいように設計された言語です。
* **汎用性:** Web開発、データ分析、機械学習、自動化など、幅広い分野で利用できます。
* **読みやすいコード:** インデント(字下げ)を重視したシンプルな構文で、可読性が高いのが特徴です。
* **豊富なライブラリ:** 多くの機能が既に用意されたライブラリが豊富に存在し、効率的な開発をサポートします。
* **インタプリタ言語:** コードを実行する際に、コンパイル(機械語への変換)が不要で、すぐに実行結果を確認できます。

**2. Pythonの主な用途**

* **Web開発:** Django、Flaskなどのフレームワークを使って、Webアプリケーションを構築できます。
* **データ分析:** NumPy、Pandasなどのライブラリを使って、データの処理、解析、可視化ができます。
* **機械学習:** TensorFlow、PyTorchなどのライブラリを使って、AIモデルの開発ができます。
* **自動化:** スクリプトを作成して、繰り返し作業を自動化できます。
* **ゲーム開発:** Pygameなどのライブラリを使って、簡単なゲームを開発できます。
* **科学技術計算:** 数学や物理のシミュレーションなど、高度な計算処理が可能です。

**3. Pythonの始め方**

1. **Pythonのインストール:**
* [Python公式サイト](https://www.python.org/downloads/) から、お使いのOSに対応したPythonをダウンロードしてインストールします。
* インストールの際、「Add Python to PATH」というオプションにチェックを入れておくと、コマンドプロンプトやターミナルからPythonを実行できるようになります。

2. **開発環境の準備:**
* テキストエディタ(Visual Studio Code、Atom、Sublime Textなど)をインストールします。
* 統合開発環境(IDE)(PyCharm、Spyderなど)をインストールすると、コードの編集、実行、デバッグなどがより便利になります。

3. **最初のプログラム:**
* テキストエディタで新しいファイルを作成し、以下のコードを入力します。

```python
print("Hello, world!")
```

* ファイルを `hello.py` のように保存します。
* コマンドプロンプトやターミナルを開き、Pythonファイルが保存されているディレクトリに移動します。
* 以下のコマンドを実行して、プログラムを実行します。

```bash
python hello.py
```

* 画面に "Hello, world!" と表示されれば、Pythonのインストールと環境設定が正しく行われています。

**4. Pythonの基本的な構文**

* **変数:** データを格納するための名前付きの場所です。
```python
x = 10
name = "Python"
```

* **データ型:** 変数に格納できるデータの種類です。
* 整数 (int)
* 浮動小数点数 (float)
* 文字列 (str)
* 真偽値 (bool)

* **演算子:** データの操作を行うための記号です。
* 算術演算子 (+, -, \*, /, %, //, **)
* 比較演算子 (==, !=, >, <, >=, <=)
* 論理演算子 (and, or, not)

* **制御構造:** プログラムの実行順序を制御します。
* if文: 条件に応じて処理を分岐します。
* for文: 繰り返し処理を行います。
* while文: 条件が満たされるまで繰り返し処理を行います。

* **関数:** 複数の処理をまとめて再利用可能なコードブロックです。
```python
def greet(name):
print("Hello, " + name + "!")

greet("Alice") # 出力: Hello, Alice!
```

**5. 学習リソース**

* **Python公式ドキュメント:** [https://docs.python.org/ja/3/](https://docs.python.org/ja/3/)
* **Progate:** [https://prog-8.com/languages/python](https://prog-8.com/languages/python)
* **ドットインストール:** [https://dotinstall.com/lessons/basic_python](https://dotinstall.com/lessons/basic_python)
* **paizaラーニング:** [https://paiza.jp/works/python3](https://paiza.jp/works/python3)
* **書籍:**
* Python Crash Course (Eric Matthes著)
* Effective Python (Brett Slatkin著)

**6. その他**

* Pythonは、コミュニティが活発で、豊富な情報やサポートが得られます。
* オンラインの学習サイトやチュートリアルを活用して、自分のペースで学習を進めることができます。
* 実際にコードを書いて、簡単なプログラムを作ってみることで、理解が深まります。

**Python学習のヒント:**

* **小さな目標から始める:** 最初から難しいことに挑戦するのではなく、簡単なプログラムから始めて徐々にステップアップしましょう。
* **エラーメッセージを読む:** エラーが発生した場合は、エラーメッセージをよく読んで原因を特定し、解決策を探しましょう。
* **質問する:** 分からないことがあれば、遠慮なく質問しましょう。オンラインのコミュニティやフォーラムを活用することも有効です。
* **継続する:** プログラミング学習は、一朝一夕にはできません。毎日少しずつでも良いので、継続して学習することが大切です。

もし何か特定の質問があれば、お気軽にお尋ねください。例えば、「〇〇という処理をPythonで行いたいのですが、どのようにすれば良いですか?」といった具体的な質問があれば、より的確な回答をすることができます。

内容に少々の差はあっても、このように答えが返ってきているならプログラムは問題なく動いています。それでは次の過程に進みましょう。


とりあえずデスクトップアプリの形になってもらう

先ほどの過程でもそれっぽく動いてくれましたが、プログラムを実行するのも答えが返ってくるのもターミナル内。やっぱりデスクトップアプリとして使いたいですよね!?ってことでPySimpleGUIを使ってまずはそれっぽいデスクトップアプリを表示させます。

まずは以下のコマンドをターミナルで叩きます。これでPySimpleGUIが使えるようになります。

python3 -m pip install --upgrade --extra-index-url https://PySimpleGUI.net/install PySimpleGUI

続いてPySimpleGUIのテストも兼ねて新しくpythonのプログラムファイルを以下のコマンドで作成します。

touch sampleApp.py

内容も以下のものをそのままコピペで大丈夫です。

import PySimpleGUI as sg

# ウィンドウ
win = sg.Window(
title = "サンプルアプリ",
layout = [
[sg.Text("サブウィンドウボタンを押下してください")],
[sg.Button("サブウィンドウ表示")]
]
)

# イベントループ
while True:
event, _ = win.read()
if event == "サブウィンドウ表示":
sg.popup("サブウィンドウを表示しました")
if event == sg.WIN_CLOSED:
break

保存ができたら

python3 sampleApp.py

で実行します。実行すると最初に設定画面が表示されますが、FreeTrialで進めてもらえれば大丈夫です。成功すれば以下の画像のようなウィンドウが出てくるはずです。内容はまだ無いですけど、とりあえず親近感が持てる見てくれにはなりましたね。


ここまでの二つをガッちゃんこ

これが最後の過程です。先ほどのプログラム二つをガッちゃんこしていい感じにすれば、デスクトップアプリで質問ができるようになります。そこで先ほど書いた2つのプログラムをgpt-oss-20bに投げて”この二つのpythonコードを組み合わせて、入力した項目に対してaiが回答を行うアプリケーションを制作してください”とお願いしてみました。

すると...

# ai_gui_app.py

import PySimpleGUI as sg
from openai import OpenAI

# --------------------------------------------------
# 1. GUI のレイアウト(sampleApp.py から引用)
# --------------------------------------------------
layout = [
[sg.Text("質問を入力してください")],
[sg.InputText(key="question", size=(50, 1))],
[sg.Button("AIに質問"), sg.Button("終了")],
[sg.Text("回答:")],
[sg.Multiline(key="answer", size=(60, 10), disabled=True)]
]

window = sg.Window("AI質問応答アプリ", layout)

# --------------------------------------------------
# 2. OpenAI クライアント設定(pythonTestBlog.py から引用)
# --------------------------------------------------
# LM Studio などローカルでホストしている API エンドポイントを指定
client = OpenAI(
base_url="http://192.168.1.73:1234/v1", # 必要に応じて変更
api_key="" # API キーは空で OK(ローカル環境の場合)
)

# --------------------------------------------------
# 3. イベントループ
# --------------------------------------------------
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == "終了":
break

if event == "AIに質問":
question = values["question"].strip()
if not question:
sg.popup("質問を入力してください", title="エラー")
continue

try:
# AI へ問い合わせ
response = client.chat.completions.create(
model="gemma-3-12b", # モデル名は必要に応じて変更
messages=[{"role": "user", "content": question}]
)
answer_text = response.choices[0].message.content

# 回答を GUI に表示
window["answer"].update(answer_text)

except Exception as e:
sg.popup(f"エラーが発生しました: {e}", title="エラー")

window.close()

となにやらええ感じにプログラムを書いてくれました。

これを新しいファイルにそのままコピペして実行してみました。

すると...

とりあえず非常にいい感じのデスクトップアプリができちゃいました。では早速ここに質問を投げてみましょう。



先ほど同様に回答の生成には少し時間がかかりましたが、きっちり質問に答えてくれました!!もちろん回答欄のスクロールもできます。

とまぁこんな感じで、ローカルLLMとAPIを組み合わせることでこんなことができてしまいます。使い方は人それぞれですがこれを機にローカルLLMを多用途に使ってみてはどうでしょうか?


コメント

コメントはまだありません。