はじめに
今日は、ターミナルでの会話だけでなく、「プログラムコードからLLMを呼び出し、システムに組み込む」第一歩としてPython環境の構築とLLMの呼び出しをやってみます。
あと、Day1の記事があまりにも見にくかったので、この方の記事を参考に見出しをつけたり、プログラム部分・AIの回答部分をわかるように編集しました。
※メモ
「# 」で見出し(#の数で大きさを変更、#の後には半角スペース)
「>」でこのようにハイライト表示ができる(AIの回答と区別がしやすいように使用)
*もしくは_で囲むことで 斜体
**もしくは__で囲むことで 太字
- 「-」or「*」or「+」をつかうことで箇条書き(見出しと同様に半角スペースが必要)
- タブキーもしくはスペース二個以上でインデントを作ることで入れ子の箇条書き
「```」
@キーのところにある読み方もわからないコーテーションのような奴三つでかこむと
このようにコードブロックがつくれる。
一つ目の```のあとにPythonなどと書くといいらしい。
:pythonnなどと書くと:のあとの部分がコードブロックが何のコードか追記できるようになる。
勉強開始
まずターミナルでpythonのバージョンを確認します。入ってない場合は公式サイトからインストールをしてください。
python --version
自分のpythonのバージョンは3.13.7でした。
このプロジェクト用にディレクトリを作ります。(フォルダ名はstudy_with_aiとします)
ollamaでは超簡単にpythonから操作できる機能があるそう。以下のコマンドを実行します。
pip install ollama
study_with_aiの中にmain.pyというプログラムを書き込み保存します。いったんメモ帳で開いてコピペした後、保存時にテキストファイルではなくすべてのファイルにして拡張子を.pyにしてやりました。
import ollama
def ask_local_llm(prompt):
print("🤖 LLMが思考中...")
# Ollamaサーバーにリクエストを送信
response = ollama.chat(
model='qwen2.5:3b',
messages=[
{
'role': 'user',
'content': prompt,
},
]
)
# 返ってきたメッセージを表示
print("\n📝 【LLMからの回答】")
print(response['message']['content'])
if __name__ == "__main__":
# 好きな質問をここに書く
user_question = "大学で情報工学を学ぶメリットを、就職活動の観点を踏まえて2点に絞って教えてください。"
ask_local_llm(user_question)
保存した後は、以下のコードだけ打ち込めば勝手に裏で起動しているOllamaサーバーをpythonが自動的に検知して質問、解答を行ってくれました。
python main.py
🤖 LLMが思考中...
📝 【LLMからの回答】
大学で情報工学を学ぶことは、非常に魅力的な選択であり、以下のような2つの主なメリットがあります。
1. 多様なキャリアパスへの適応性:
情報を扱う現代社会において、情報工学は幅広い業界に跨がります。これには、ソフトウェア開発、ネットワーク設計、システムエンジニアリングなど多くの職種と分野があります。そのため、就職活動の際には非常に多様なキャリアパスへの適応性を提供します。
2. 高レベルの専門知識:
情報工学は高度な理論的および実践的なスキルが必要となります。この教育を通じて、そのような専門知識を習得することができ、これにより就職活動中でより強力な履歴書とキャリアパスを持つことができます。
以上の2点が、情報工学を学ぶことで就職活動における有利なポジションにいることを示しています。
回答にかかった時間は7秒ほどでした。
ここで、前回のollamaを動かすrunのコマンドがなくてもやってくれたのが違和感だったので先生(gemini)に質問してみました。
疑問1:ollama run コマンドがなくても裏で動いているの?
結論:はい、動いています。
Ollamaというツールは、実は「2つの顔(役割)」を持っています。
① Ollama サーバー(本体 / デーモン)
Windowsが起動した瞬間にタスクバー(隠れているインジケーター)で「勝手に」動き出すのが、このサーバー本体です。
これは画面を持たないプログラム(バックグラウンドプロセス)で、指定されたポート(デフォルトは http:// localhost:11434)を開放し、「LLMを動かす指示が来るのをじっと待つ」という役割をしています。
② Ollama CLI(クライアント / ツール)
前ステップであなたがターミナルに打ち込んだ ollama run qwen2.5:3b というコマンドは、サーバーではなく「クライアント(指示を出す側)」です。
ollama run を実行すると、CLIが「裏で待機しているOllamaサーバー」に対して「Qwenのモデルを起動して、今から送るユーザーの文字を処理して!」とリクエスト(通信)を送っているだけなのです。
だからこそ、今回Pythonプログラム(ollama ライブラリ)を使ったときも、Pythonコードが直接LLMを動かしたのではなく、Pythonが裏のOllamaサーバーにリクエストを送ったため、ターミナルでコマンドを叩かなくても動いた、という仕組みになっています。
⚙️ 疑問2:インジケーターにいるラマは、PCの処理速度に影響を与えないの?
結論:LLMと会話していない時は、影響(負荷)はほぼ「ゼロ」です。
「常駐アプリがずっと裏で動いているなら、メモリ(RAM/VRAM)を食い潰したり、CPU/GPUを無駄に使ってPCが重くなるのでは?」と心配になりますよね。しかし、Ollamaは非常に賢いメモリ管理をしています。
1. 待機時(会話していない時)の挙動
Ollamaサーバーが起動してインジケーターにいるだけの状態では、LLMのモデル(数GBあるデータ)はまだVRAM(GPUメモリ)にも、通常のRAM(メインメモリ)にもロードされていません。
サーバープログラム自体が消費するメモリはごくわずか(数十MB程度)で、CPUやGPUの使用率は「0%」です。そのため、他のゲームをしたり、大学の課題でPCを使っていても、処理速度への影響は体を感じるレベルでは完全にゼロです。
2. 要求時(Pythonやコマンドから呼び出した時)の挙動
リクエストが届いた瞬間、サーバーが「おっと、仕事だ!」と動き、ストレージから qwen2.5:3b のモデルデータを Intel ArcのVRAM(8GB)へと一気にロードします。
この推論(テキスト生成)を行っている最中だけ、GPUをフルに活用するためPCに負荷がかかります。
3. 仕事が終わった後の挙動(ここが超スマート!)
ここがOllamaの賢いところで、仕事(会話)が終わってからデフォルトで5分間何もアクセスがないと、「もうしばらく仕事は来ないな」と判断し、VRAMに展開した数GBのモデルデータを自動的にすべて解放(アンロード)します。
そしてまた、1の「負荷ほぼゼロの待機状態」に戻ります。
だそうです。よーわからんけどすごい。
今日はこの辺にしておきましょう。
おわり
簡単なプログラムでpythonを経由した操作ができた。
Ollamaすごい。
プログラムの内容理解やpythonを使った操作のメリットデメリットは今度学ぶ。