見出し画像

Deepseekのような考えるプロセスを再現!シンプルな言語モデルを簡易的推論モデルに変える実験。

AIの力で考えるプロセスを再現!シンプルな言語モデルを推論型に変える実験

AIは今や身近な存在になり、質問に答えたり、文章を作ったりといった便利なツールとして使われることが増えています。
でも、AIには実は大きく分けて2つのタイプがあることをご存じでしょうか?

  • 通常の言語モデル: すぐに答えを出すタイプ

  • 推論型の言語モデル: まず考えてから答えを出すタイプ

今回のブログでは、特別なAIではなくても、ちょっとした工夫で**「考えるAI」**を簡単に作れる実験を紹介します!
しかも、プログラミングが初めての人でも試せるように、ブラウザ上で動かせるインターフェースまで作ってみました。

コードの実行例。

そもそも推論型って何?

たとえば、こんな質問があるとします。

「リンゴが3つあります。友達が5人います。どう分けますか?」

通常のAIならこう答えます。
👉「3つのリンゴを配ります。」

でも、本当にそれでいいんでしょうか? 友達が5人いるのにリンゴは3つしかありません。ここで**「どう分けるべきか考える」**プロセスが必要になります。

推論型のAIはこう考えます。
🧠「リンゴが足りないから切り分けるか、じゃんけんなどで順番を決める必要がある。」


実験に使ったツール

今回の実験では次のツールを使いました。

ツール説明
LM Studio  自分のパソコンでAIモデルを動かせるソフト
Python  プログラムを書くための言語
Gradio  ブラウザ上でAIとやり取りするためのツール

LM Studioは、無料で誰でも使える便利なソフトです。
今回は qwen2.5-7b-instruct-1m モデルという小さめのAIを使いました。


言語モデルを推論型に変える どんな仕組み?

ポイントは2段階の推論プロセスです。

  1. 最初の推論: 質問に対して、どう考えればいいかを説明させる

  2. 最終回答: 推論をもとに、最終的な答えを出す

普通の言語モデルでも、システムプロンプトを使えばこんな風に考えることができるんです。


プログラムの作り方

Pythonを使って、AIの応答を2つの方法で表示するプログラムを作りました。

  1. 推論型のAIプロセス

  2. 通常の直接回答型のAIプロセス

しかも、Gradioというライブラリを使って、ブラウザから簡単に使えるようにしています。



コードはこちら!

!pip install gradio requests


import gradio as gr
import requests
import json

# LM Studio APIのエンドポイント
URL = "http://localhost:1234/v1/chat/completions"

# AIの応答を生成する関数
def generate_response(prompt, system_prompt):
    headers = {"Content-Type": "application/json"}
    payload = {
        "model": "qwen-0.5b",
        "messages": [{"role": "system", "content": system_prompt},
                     {"role": "user", "content": prompt}],
        "temperature": 0.7
    }
    response = requests.post(URL, headers=headers, data=json.dumps(payload))
    return response.json()["choices"][0]["message"]["content"]

# 推論型プロセス
def inference_model(prompt):
    system_prompt1 = "この質問に対して、どう考えるべきか説明してください。"
    thinking = generate_response(prompt, system_prompt1)

    system_prompt2 = "推論を踏まえて答えてください。"
    final_answer = generate_response(prompt, system_prompt2 + " " + thinking)

    return f"【推論プロセス】\n{thinking}\n\n【最終回答】\n{final_answer}"

# 通常型プロセス
def normal_model(prompt):
    system_prompt = "質問に直接答えてください。"
    answer = generate_response(prompt, system_prompt)
    return f"【通常回答】\n{answer}"

# Gradioのインターフェース関数
def chat(prompt):
    inference = inference_model(prompt)
    normal = normal_model(prompt)
    return inference, normal

# Gradio UIの作成
iface = gr.Interface(
    fn=chat,
    inputs=gr.Textbox(label="質問を入力してください"),
    outputs=[
        gr.Textbox(label="推論型モデルの回答"),
        gr.Textbox(label="通常型モデルの回答")
    ],
    title="推論型 vs 通常型 AI 比較ツール",
    description="同じAIでも考え方を変えるとどんな違いが出るのか比較できるツールです。"
)

if __name__ == "__main__":
    iface.launch()



使い方

LM Studio ダウンロードは上のリンクからできます。

  1. LM Studioを起動してAPIサーバーを有効にします。
    Settings > API Server > Enable API Server


モデルをロードしてから左上のボタンでサーバーを起動します。

2.Pythonのプログラムを実行します。

ブラウザに自動で画面が開きます!


実験の結果

モデルタイプ回答通常型「3つのリンゴを配ります。」推論型「リンゴが足りないので、どう分けるか考える必要があります。」 → 「リンゴを切り分けるか、じゃんけんで決めます。」

推論型モデルの方が、より人間らしい考え方に近いことがわかりますね!


まとめ

今回の実験でわかったことは次の通りです。

  • シンプルなAIでも工夫次第で考える力を持たせることができる

  • システムプロンプトの使い方次第でAIの振る舞いが大きく変わる

  • Gradioを使えば、誰でも簡単にAIと会話できるインターフェースが作れる


未来のAIはアイデア次第!

AIがすべてを決める時代ではなく、**「AIをどう使うか」**が重要な時代になってきています。
今回の実験のように、ちょっとした工夫でAIの考え方を変えられるのはとても面白いですよね!

もしプログラミングに興味があれば、ぜひこのコードを試してみてください!

コード実行例。推論型モデルと、通常モデルによる回答。



プロンプト。鶴亀算を計算してください。

推論型モデルによる回答。


【【推論プロセス】
鶴亀算(つるかめさん)は、中国の古典問題として有名な問題で、「池に亀と鶴がいた。合わせて頭は40個あり足は120本あった。亀と鶴のそれぞれの数を何個ずついるかを求める問題」です。

解法

この問題を解くためには、代数を使って式を作成します。

  • まず、「亀」を ( x ) 個、「鶴」を ( y ) 個と表しましょう。

  • それぞれの頭と足が何個あるかを考えます:

    • 頭は「亀」と「鶴」合わせて40個ある:
      ( x + y = 40 )

    • 足は「亀」には4本、「鶴」には2本ずつあり、合計で120本あります:
      ( 4x + 2y = 120 )

式を解く

  1. 先に第1の式を使って1つの変数を消去します。

    • 第1式より ( y = 40 - x )

  2. この値を第2式に代入する:

    • ( 4x + 2(40 - x) = 120 )

  3. 簡単に計算してみましょう:

    • ( 4x + 80 - 2x = 120 )

    • 合計すると:( 2x + 80 = 120 )

    • ( 2x = 40 )

    • ( x = 20 )

よって、亀は20匹です。

  1. あとは、第1の式を使って鶴の数を求めます:

    • ( y = 40 - x ) → ( y = 40 - 20 )

    • 鶴は20匹です。

答え

亀が20匹、鶴もまた20匹です。

【最終回答】
もちろんです!鶴亀算の条件をもとに問題を解いていきます。


問題の条件:

  • 頭が40個あります。

  • 足が120本あります。

  • 1匹の「亀」は4本の足、1匹の「鶴」は2本の足があります。

これをもとに、亀を ( x ) 個、鶴を ( y ) 個と仮定します。


等式を作成:

  1. 頭が40個あることから:
    [
    x + y = 40
    ]

  2. 足が120本あることから(亀は4足、鶴は2足):
    [
    4x + 2y = 120
    ]


式を解く:

1つ目の式を整理する:

[
x + y = 40
]
これを ( y ) を消去するために使います。

2つ目の式を整理する:

[
4x + 2y = 120
]

この式は、両辺に2で割ることができます:
[
2x + y = 60
]


等式を解いてみましょう:

  1. 1つ目の式 ( x + y = 40 ) を使います。これを用いて、( y = 40 - x ) と代入します。
    [
    2x + (40 - x) = 60
    ]
    簡単に計算すると:
    [
    2x + 40 - x = 60
    ]
    [
    x + 40 = 60
    ]
    [
    x = 20
    ]

( x = 20 ) をもとに ( y ) を求める:

[
y = 40 - x = 40 - 20 = 20
]


答え:

亀が20匹、鶴が20匹です。

この解は条件(頭と足の数)を満たす答えとなります。


通常モデルによる回答。

【通常回答】
鶴亀算(かつけん)は、古典的な数学問題として知られており、「鹤と龟が池にいるが、総頭数と総脚の数からそれぞれ動物の個数を求めよ」というものがあります。

問題を設定する:

  1. 鳥(鶴)と Turtle(亀)が池にいて。

  2. 合計で「H個の鳥とT個の亀」。

  3. 鳥は2脚、亀は4脚を持っています。

  4. すべての動物の合計脚数はF本。

この条件で、それぞれの動物の個数を求める問題です。

方程式を立てて解く:

  1. 変数:

    • 鶴(鳥): H

    • 亀: T

  2. 総頭数の方程式:
    [
    H + T = N \quad (Nは合計の動物数)
    ]

  3. 総脚数の方程式:
    [
    2H + 4T = F
    ]

計算例:

假定:

  • 合計頭数: H + T = 10 (N=10)

  • 合計脚数: 2×H + 4×T = 28

方程式を解く:

  1. ( H + T = 10 ) を整理すると、
    [
    H = 10 - T
    ]

  2. ( 2H + 4T = F (F=28) )

  3. これを置き換えると:
    [
    2(10-T) + 4T = 28
    ]

  4. 式を整理して:
    [
    20 - 2T + 4T = 28 \
    2T = 8 \
    T = 4
    ]

  5. ( H = 10 - T = 10-4 = 6)

結論:

  • 鶴(鳥)は6匹。

  • 亀は4匹。

これが、問題の解です。

いいなと思ったら応援しよう!