
【Python】LLM第1回:あなたのPCがChatGPTに!OpenAIの無料モデル(gpt-oss:20b)をOllamaで動かす最短ガイド
「ChatGPTの性能を、無料で、しかも自分のPCで動かせたら……」 そんな夢のような話が、今では現実になっています。
今回ご紹介する Ollamaというツールを使えば、OpenAIが公式に無料公開した、GPT-4oクラスの性能を持つ強力なモデル「gpt-oss:20b」 をあなたの手元で動かすことができます。
例えるなら、「ネット経由でプロのサービスを注文するのではなく、プロが使っている秘伝のレシピ(モデル)を借りて、自分の家のキッチン(PC)で料理を作る」ようなものです。
外部との通信は不要。データが漏れる心配もありません。
ただし、プロのレシピにはそれなりの「調理器具(PCスペック)」が必要です。
まずは準備から始めてみましょう。
1. 快適に動かすための「PCスペック」
「gpt-oss-20b」は非常に賢い分、PCのメモリ(RAM/VRAM)をしっかり消費します。

ポイント: メモリが足りないと、回答が「1秒に1文字」のように極端に遅くなります。その場合は、無理せず Llama3 などの軽量モデルに切り替えましょう。
2. Ollamaのインストールと基本操作
まずは Ollama公式サイト からアプリをダウンロードしてインストールしてください。
インストール後、ターミナルで以下のコマンドを順に試してみましょう。
まずは軽量モデルでテスト実行:
ollama run llama3これだけで自動的にダウンロードが始まり、AIとの会話がスタートします。
本命「gpt-oss:20b」をダウンロードのみ (pull): 巨大なモデルなので、先にダウンロードだけ済ませておきましょう。
ollama pull gpt-oss:20b入っているモデルを確認する (list): 「自分のPCにどのAIが入っているか」を一覧表示します。
ollama list不要なモデルを消して掃除する (rm): ストレージがいっぱいになったら、使わないモデルを消して整理します。
ollama rm llama33. PythonからAIを呼び出す
準備ができたら、Pythonからこの強力なAIに指示を出してみましょう。
シンプルな対話コード:
import ollama
def chat_with_local_ai(prompt: str, model_name: str = 'gpt-oss:20b'):
"""
指定したローカルモデルと対話する。
Args:
prompt (str): AIへの質問。
model_name (str): スペック不足なら 'llama3' に変更。
"""
try:
# AIに応答をリクエスト
response = ollama.chat(model=model_name, messages=[
{'role': 'user', 'content': prompt},
])
return response['message']['content']
except Exception as e:
return f"エラー: モデルが未インストールか、スペック不足です。\n{e}"
if __name__ == "__main__":
print(f"--- OpenAIの無料公開モデル(20b)で実行中 ---")
question = "Pythonで、リストの要素をシャッフルするコードを教えて"
print(f"質問: {question}")
answer = chat_with_local_ai(question)
print(f"AIの回答:\n{answer}")実行結果
--- OpenAIの無料公開モデル(20b)で実行中 ---
質問: Pythonで、リストの要素をシャッフルするコードを教えて
AIの回答:
## Python でリストをシャッフルする基本的なやり方
Python 標準ライブラリに **`random`** モジュールがあるので、これを使うのが一番手軽です。
```python
import random
# 例として整数のリスト
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# リストを乱数でシャッフル(元のリストが変更される)
random.shuffle(my_list)
print(my_list)
# → [5, 1, 9, 3, 7, 2, 8, 4, 6] など(実行ごとに異なる)
```
### 重要ポイント
| | `random.shuffle()` | `random.sample()` |
|---|-------------------|-------------------|
| **戻り値** | `None`(元のリストをその場で変更) | シャッフル済みの新しいリスト |
| **副作用** | 元リストが破壊される | 元リストはそのまま |
| **使い方** | 既存リストをそのままシャッフルしたいとき | 元リストを残したままシャッフルしたいとき |
> **例:元リストを残して新しいシャッフルリストを作る**
> ```python
> original = [1, 2, 3, 4, 5]
> shuffled = random.sample(original, len(original))
> print(original) # [1, 2, 3, 4, 5]
> print(shuffled) # 例: [4, 1, 3, 5, 2]
> ```
### 再現性(同じ乱数列を得る)
`random.seed()` でシードを固定すると、同じシード値であれば毎回同じシャッフル結果になります。
```python
import random
random.seed(42) # 42 をシードに
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list) # 例: [4, 2, 5, 1, 3]
```
### もうひとつの選択肢:NumPy を使う
数値データを多く扱う場合は NumPy の `numpy.random.shuffle` が便利です。
```python
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
np.random.shuffle(arr) # こちらも in-place で変更
print(arr) # 例: [40 20 10 50 30]
```
> **備考**
> - NumPy 版は `array` に対してしか動きません。
> - ほとんどのケースで `random.shuffle` で十分です。まとめ
OpenAIの強力なモデルが自分のPCで動くようになると、開発の自由度が劇的に上がります。
自分専用のAIが手に入ったら、次は「AIに自分の専門資料を読み込ませる(RAG)」というさらに便利なステップが待っています。
次回は、大量の書類から一瞬で答えを見つけ出す検索技術、BM25について解説します。