ChatGPTのようなAIチャットをブラウザやアプリで使うとき、入力した文章はインターネットを通ってサービス側のサーバーへ送られます。サーバー上の言語モデルが返答を生成し、その結果が画面に戻ってきます。画面の中でAIが動いているわけではありません。
同じような処理を、自分のPCで動かすこともできます。この記事では、LLMが返答をつくる仕組みを確認したあと、Ollamaを使ってモデルをPCへ入れ、TerminalとPythonから呼び出します。
コマンドを暗記するのではなく、入力がどこを通り、どのモデルへ届き、どう戻ってくるのかを順にたどります。
LLMとは何か
LLMはLarge Language Modelの略で、日本語では大規模言語モデルと呼ばれます。大量の文章から言葉同士の関係を学び、入力された文章とそれまでの文脈をもとに、続きに来る文章を生成するモデルです。
生成の基本にあるのが、次に来るトークンを予測する処理です。英語ではnext-token predictionと呼ばれます。トークンは、LLMが文章を処理するときの単位です。単語と同じ場合もありますが、単語の一部、記号、空白などに分かれることもあります。
たとえば「今日は天気が」まで入力されたとします。LLMは、その次に来そうなトークンの候補へ確率を付け、一つを選びます。選んだトークンを文章の末尾に加え、今度はその続きを予測します。
説明のために単語単位へ簡略化すると、次のような流れです。
今日は天気が → 今日は天気がよい → 今日は天気がよいので → ...
LLMは完成した返答をどこかから取り出しているのではありません。次のトークンを選ぶ処理を繰り返し、返答を少しずつ組み立てています。AIチャットで文字が順番に表示されるのも、この生成の流れをイメージする手がかりになります。
この仕組みを使うことで、質問への回答、要約、翻訳、文章の書き換え、コードの生成などができます。ただし、LLMが選ぶのは文脈上もっともらしい続きです。事実として正しいとは限りません。生成された文章は、人が内容を確認してから使う必要があります。
AIチャットの返答はどこで作られるのか
次のトークンを繰り返し予測する計算を、どこで実行するかを考えてみましょう。多くのAIチャットでは、モデルはサービスを提供する会社のサーバーで動いています。PCやスマートフォンは文章をサーバーへ送り、サーバー上のLLMが返答を組み立てます。画面には、その結果が返ってきます。
処理の流れを単純にすると、次のようになります。
入力 → インターネット → サーバー上のLLM → 返答
一方、ローカルLLMでは、モデルのファイルを自分のPCへ保存し、そのPC上で生成を実行します。
入力 → PC内のアプリ → PC内のLLM → 返答
モデルを最初に取得するときはインターネットが必要です。取得後にローカルモデルを使う場合、この記事で入力する文章と生成処理はPC上のOllamaで扱われます。ただし、Ollamaにはクラウドモデルもあります。Ollamaを使えば、どのモデルでも自動的にローカル実行になるわけではありません。

Ollamaとは何か
Ollamaは、AIモデルの取得、管理、起動と、ローカルAPIの公開をまとめて扱うアプリです。Ollama自体がLLMなのではありません。OllamaがモデルをPCへ保存し、必要なときに読み込み、Terminalや別のプログラムから使える状態にします。
この記事では、次の流れで使います。
- PCに合うモデルを探す
- Ollamaをインストールする
- モデルを取得する
- Terminalでモデルと会話する
- HTTP APIとPythonから同じモデルを呼ぶ
PCに合うモデルを探す
ローカルLLMは、モデルによって必要なストレージやメモリが違います。名前が似ていても、モデルの大きさや量子化の形式によって必要な容量は変わります。
まず、Ollamaのモデル検索で、Ollamaから利用できるモデルを探します。検索結果では、モデル名のほか、用途、機能、パラメータ規模などを確認できます。モデルのページを開くと、qwen3.5:4bのような実行時の名前と、ダウンロードするファイルの大きさも分かります。
次に、Can I Run AIを使うと、自分のGPUやMac、メモリなどをもとに、動かせそうなオープンモデルを探せます。これは目安として使い、最後にOllamaのモデルページで、使いたいモデルとタグが配布されているかを確認してください。Can I Run AIに掲載されているすべてのモデルが、そのままOllamaで使えるとは限りません。
この記事では、Qwen3.5の二つのサイズを使います。
| モデル | 配布サイズ | この記事での使い方 |
|---|---|---|
qwen3.5:0.8b |
約1.0GB | 最初に動作を確認する |
qwen3.5:4b |
約3.4GB | 出力を比較し、Pythonアプリで使う |
サイズは2026年8月26日にOllamaのモデルページで確認した値です。配布内容は更新されることがあります。空き容量やメモリに余裕がなければ、まず0.8Bだけで手順を試してください。
Ollamaをインストールする
Ollamaのダウンロードページを開き、自分のOSに合うものをインストールします。OllamaはmacOS、Windows、Linuxで利用できます。初めて使う場合は、公式ページの案内に沿ってアプリをインストールする方法が分かりやすいでしょう。
インストール後、macOSでは「ターミナル」、Windowsでは「PowerShell」を開き、次のコマンドを実行します。
ollama --version
ollama version is ...のように表示されたら、TerminalからOllamaを呼び出せています。command not foundと表示された場合は、Ollamaを一度起動し、Terminalを開き直してください。
次のコマンドだけを実行すると、Ollamaの対話メニューを開けます。
ollama
利用できるコマンドを詳しく確認したいときは、次を使います。
ollama --help
最初に覚えるOllamaのコマンド
ここから使う基本コマンドを先に整理します。
| コマンド | 何をするか |
|---|---|
ollama pull <モデル名> |
モデルをPCへ取得する |
ollama ls |
取得済みのモデルを一覧表示する |
ollama run <モデル名> |
モデルを起動して会話する |
ollama ps |
現在読み込まれているモデルを確認する |
ollama stop <モデル名> |
読み込まれているモデルを停止する |
ollama rm <モデル名> |
取得済みのモデルをPCから削除する |
<モデル名>の部分は、qwen3.5:0.8bのような実際の名前に置き換えます。pullはモデルのファイルを保存する操作、runは保存したモデルを読み込んで使う操作です。この二つを分けて考えると、何を待っているのかが分かりやすくなります。
小さいモデルを取得する
最初は、約1.0GBのqwen3.5:0.8bを取得します。
ollama pull qwen3.5:0.8b
ダウンロードが終わったら、取得済みモデルの一覧を表示します。
ollama ls
一覧にqwen3.5:0.8bがあれば、モデルのファイルはPCに保存されています。SIZEには、そのモデルがストレージ上で使っている容量が表示されます。
Terminalでモデルと話す
取得したモデルを起動します。
ollama run qwen3.5:0.8b --think=false
>>>が表示されたら、次の文章を入力してください。
ローカルで動いています、と一文だけ返してください
返答が表示されたら、PC上のモデルをTerminalから呼び出せています。会話を終了するときは、次を入力します。
/bye
OllamaのCLIでは、対応モデルの思考表示が既定で有効です。この記事では最終的な返答だけを見やすくするため、--think=falseを指定しています。
現在読み込まれているモデルは、別のTerminalで確認できます。
ollama ps
すぐにメモリから外したい場合は、次のように停止します。
ollama stop qwen3.5:0.8b
モデルのファイル自体が不要になった場合は、次のコマンドで削除できます。削除すると、再び使うときにダウンロードが必要です。
ollama rm qwen3.5:0.8b
この記事では、このあと0.8Bと4Bを比較するため、まだ削除しません。
モデルの大きさで出力がどう変わるか
0.8Bで動作を確認できたら、4Bも試してみます。
ollama pull qwen3.5:4b
ollama run qwen3.5:4b --think=false
0.8Bと4Bへ同じ文章を渡し、先生へ送る丁寧な文章に整えるよう頼んだところ、出力に違いが出ました。
次の文章を、大学の先生に送る自然で丁寧な1文に整えてください。
意味を変えず、元の文章にない情報は足さないでください。
明日のゼミなんですけど、ちょっと用事あって遅れます。すみません。

このとき、0.8Bは謝罪を「お礼」に変えてしまいました。4Bは元の意味を保ち、自然な敬語へ整えられました。
この一回の比較だけで、4Bが常に正しいとは言えません。大きなモデルでも誤ることはあります。同じ入力を試し、速度、出力、PCの負荷を見ながら、自分の用途に合うモデルを選びます。この先のPythonアプリでは4Bを使います。動作が重い場合は、0.8Bへ置き換えても手順を確認できます。
なぜ数十億個のパラメータがPCに収まるのか
qwen3.5:4bのモデルページを見ると、実際のパラメータ数は4.66Bで、配布サイズは約3.4GBです。4.66Bは約46億6000万個のパラメータを表します。
仮に一つのパラメータを2バイトのFP16で保存すると、重みだけで約9.3GBになります。それより小さな3.4GBで配布できる理由が量子化です。
量子化で数値を小さく持つ
モデルには、学習で決まった重みと呼ばれる数値が大量にあります。量子化は、その数値をFP16やFP32より少ないビット数で近似して保存し、計算する方法です。
パラメータの個数を単純に減らすのではありません。同じモデルの数値を、より少ない情報量で表します。必要なストレージとメモリを減らせる一方、出力の精度が変わる可能性があります。
今回使うqwen3.5:4bは、OllamaのモデルページでQ4_K_Mと表示されています。この記事では自分で量子化するのではなく、あらかじめ量子化されたモデルを取得して使います。
蒸留で小さなモデルを作る
蒸留は、量子化とは別の方法です。大きな教師モデルの出力を学習に使い、より小さな生徒モデルを作ります。
量子化は、同じモデルの数値の持ち方を変える方法です。蒸留は、小さな別のモデルを学習させる方法です。小型モデルがすべて蒸留で作られているわけではありません。

先ほど比較した0.8Bと4Bは、量子化の強さだけが違うわけではありません。主にモデルのパラメータ数が違います。「何Bか」と「どの形式で量子化されているか」は、分けて確認します。
TerminalからHTTP APIを呼ぶ
Terminalで会話できた時点で、OllamaはPC上でモデルを動かせています。次は、そのモデルを別のプログラムから使う入口を確認します。
Ollamaは、通常http://localhost:11434/apiでHTTP APIを公開します。localhostは、今使っているPC自身を指す名前です。
別のTerminalを開き、次を実行します。
curl http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.5:4b",
"messages": [
{
"role": "user",
"content": "ローカルLLMを一言で説明してください"
}
],
"think": false,
"stream": false
}'
このリクエストでは、次の内容をOllamaへ渡しています。
model: 使うモデルmessages: モデルへ渡す会話role: 発言者の種類。ここでは利用者を示すusercontent: 実際に送る文章think: 思考の出力を使うかstream: 返答を分割して受け取るか
streamをfalseにすると、返答を一つのJSONとして受け取れます。生成された文章はmessage.contentに入ります。
Terminalで使ったollama runと、HTTP APIは別々のモデルを動かしているわけではありません。どちらもPC上のOllamaへ入力を渡す方法です。
Pythonで文章整形アプリを作る
最後に、Pythonから同じAPIを使います。作業用フォルダーと仮想環境を用意し、Ollamaの公式Pythonライブラリをインストールします。
macOSまたはLinuxでは、次を実行します。
mkdir ollama-practice
cd ollama-practice
python3 -m venv .venv
source .venv/bin/activate
python -m pip install ollama
Windows PowerShellでは、次を実行します。
mkdir ollama-practice
cd ollama-practice
py -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install ollama
polite_rewriter.pyというファイルを作り、次のコードを保存します。
from ollama import chat
MODEL = "qwen3.5:4b"
text = input("先生に送りたい文章を入力してください: ")
response = chat(
model=MODEL,
messages=[
{
"role": "user",
"content": f"""次の文章を、大学の授業で先生に送る
自然で丁寧な日本語に整えてください。
条件:
- 意味を変えない
- 元の文章にない予定や理由を推測しない
- 原文にある情報だけを使い、敬語と助詞を整える
- 1文にする
元の文章:
{text}
""",
}
],
think=False,
options={"temperature": 0.3, "seed": 42},
)
print("\n整えた文章:")
print(response.message.content)
保存したら、仮想環境を有効にしたTerminalで実行します。
python polite_rewriter.py
入力例は「明日のゼミなんですけど、ちょっと用事あって遅れます。すみません。」です。

このコードの中心はchat()です。先ほどcurlで渡したmodelとmessagesを、Pythonの書き方に置き換えています。Pythonは入力をOllamaへ渡し、返ってきたmessage.contentを表示します。文章を生成するモデルは、PC上のOllamaが動かしています。
生成された文章は、送る前に必ず読み返してください。LLMは文体を整えながら、元になかった情報を足したり、意味を変えたりすることがあります。これはローカルでもクラウドでも変わりません。
うまく動かないとき
ollama: command not foundと表示される
Ollamaアプリを起動し、Terminalを開き直します。それでも解決しなければ、公式のインストール手順を確認してください。
取得したモデルが見つからない
ollama lsでモデル名を確認します。必要なモデルがなければ、ollama pull <モデル名>でもう一度取得します。
返答が遅い、PCが重い
ollama psで読み込まれているモデルを確認します。ほかの重いアプリを閉じるか、まずqwen3.5:0.8bを使ってください。速度はモデルの大きさだけでなく、PCのメモリ、GPU、入力の長さでも変わります。
Pythonから接続できない
先にollama run qwen3.5:4b --think=falseで会話できるか確認します。次にcurl http://localhost:11434/api/tagsを実行し、OllamaのAPIへ届くかを切り分けます。
まとめ
LLMは、入力された文章と文脈をもとに、続きの文章を生成するモデルです。多くのAIチャットではサーバー上のモデルを使いますが、Ollamaを使えば、自分のPCに保存したモデルをTerminalやプログラムから呼び出せます。
今回は、PCに合うモデルの探し方を確認し、pull、ls、run、ps、stop、rmの役割をたどりました。そのうえで、Terminalからの会話、HTTP API、Pythonアプリを同じOllamaへつなぎました。
次の「ローカルLLMを動かす道具の役割」では、VS Code、Python、pip、Ollamaを分け、それぞれがどこを担当しているのかを整理します。
