メインコンテンツへスキップ
見出し画像

【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 llama3

    3. 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について解説します。

     
     
    AI を毎日使う人向けに、実践Tipsと業界トレンドを書いています! 週次のAI動向まとめと、効率化やAI活用のコツの紹介が中心です。 実際に触ってわかったこと、日々の運用で気づいた小さなコツを発信!

    あなたへのおすすめ