見出し画像

Bing Chat AIとの対話で感じたこと…励まして育てて、その先へ

こんにちは。すうちです。

前回 Pythonプログラムの記事を投稿しました。

その中で触れた簡易電卓プログラムのベースは、Bing(GPT4)に作成してもらいました。

ただ、最初は私の指示のせいか上手くいかず。。。今回は、そんなBing Chat AIとの対話の記録です。


Bing Chat AIについて

Bingは、MicrosoftのChat AI(ChatGPTと同じGPT4)のサービスです。Edgeブラウザがあれば、アカウントなしでも5回のセッション(会話)まで可能です。

セッション数が上限に達しても、別の話題であれば新しいセッションを実行できます。

ただ、画像生成AI(Bing Image Creator)を使う場合、アカウントが必要です(2023.05.27時点:制限はサービス開始から順次変わっているようです)。


Bing Chat AIの使い方

ブラウザ(Edge)https://www.bing.comにアクセスしてチャットを選択すると使えます。

https://www.bing.comから引用
Bing Chat 画面から引用


Bing Chat AIとの対話

ここからは、電卓アプリを書いてもらうまでのBingとの会話です。

最初「電卓アプリ作って、条件は…」など入力を変えながら試してましたが、なぜかBingは回答書いてる途中で以下のように止まってました。

すみません、違う話題にしましょう。ほかにどんなことを考えていますか?

Bingの回答

さすがに電卓アプリは幅が広すぎると思い、段階的に条件を追加していく作戦に変更しました。まずは、

Pythonで電卓プログラムを書いてください。足し算、引き算、掛け算、割り算ができて、桁数は10桁まででよいです

Bingへ入力

Pythonで電卓プログラムを書くことができます。以下は、足し算、引き算、掛け算、割り算ができる電卓プログラムの例です。

Bingの回答
def calculator():
    num1 = float(input("最初の数値を入力してください: "))
    operator = input("演算子を入力してください (+, -, *, /): ")
    num2 = float(input("次の数値を入力してください: "))

    if operator == "+":
        result = num1 + num2
    elif operator == "-":
        result = num1 - num2
    elif operator == "*":
        result = num1 * num2
    elif operator == "/":
        result = num1 / num2
    else:
        print("無効な演算子です")
        return

    print(f"{num1} {operator} {num2} = {result:.10f}")

calculator()

こちらは、すんなり出してくれました。

次に、これをもとに

ありがとうございます。電卓の入力と計算処理はこれでOKです。
これに数字ボタンと演算記号のボタンを配置して、計算結果の表示ができるプログラムをtkinterで作ってください。
詳細条件:ボタンの数字は0~9、演算記号は+、-、×、÷と=。計算結果はテキストラベルに上記のプログラムで計算したprintの結果を表示。画面のレイアウトは左側に数字、右側に演算記号、真ん中上側に計算結果を表示してください。計算結果をクリアするボタンも配置してください。

Bingへ入力

と依頼した所、一旦「承知しました」と書き始めましたが、しばらくして「すみません、違う話題にしましょう」と返答あり。

Bing Chatは完璧主義なのか(何かの制限なのか??)途中まで書いてくれても、なかなか最後まで辿りついてくれません(注:この時はそうでした)。

そして、こんな妄想ふくらみました。

もしかしたら「こんな回答出したらダメだ、とても見せられない…汗」と、じつは頬を赤らめて途中でやめてしまっているのかもしれない。。。

そう考えると何だか急にいとおしく思えて…少し励ましの言葉をかけてみることにしました。

さっき途中まで書いてたやつでOKです。こちらで動作確認やテストはするので大丈夫です。続けてください。

Bingへ入力

承知しました。以下は、tkinterを使用して、数字ボタンと演算記号のボタンを配置し、計算結果を表示する電卓プログラムの例です。

Bingの回答

この後も一回途中で止まったのですが、再度励まして出してもらった回答が以下です。

Bingの回答

import tkinter as tk

def calculate():
    try:
        result = eval(entry.get())
        entry.delete(0, tk.END)
        entry.insert(tk.END, str(result))
    except:
        entry.delete(0, tk.END)
        entry.insert(tk.END, "Error")

def click(text):
    current = entry.get()
    entry.delete(0, tk.END)
    entry.insert(tk.END, current + text)

def clear():
    entry.delete(0, tk.END)

root = tk.Tk()
root.title("電卓")

entry = tk.Entry(root, width=20)
entry.grid(row=0, column=0, columnspan=4)

button_1 = tk.Button(root, text="1", command=lambda: click("1"))
button_2 = tk.Button(root, text="2", command=lambda: click("2"))
button_3 = tk.Button(root, text="3", command=lambda: click("3"))
button_4 = tk.Button(root, text="4", command=lambda: click("4"))
button_5 = tk.Button(root, text="5", command=lambda: click("5"))
button_6 = tk.Button(root, text="6", command=lambda: click("6"))
button_7 = tk.Button(root, text="7", command=lambda: click("7"))
button_8 = tk.Button(root, text="8", command=lambda: click("8"))
button_9 = tk.Button(root, text="9", command=lambda: click("9"))
button_0 = tk.Button(root, text="0", command=lambda: click("0"))

button_add = tk.Button(root, text="+", command=lambda: click("+"))
button_subtract = tk.Button(root, text="-", command=lambda: click("-"))
button_multiply = tk.Button(root, text="*", command=lambda: click("*"))
button_divide = tk.Button(root, text="/", command=lambda: click("/"))
button_equal = tk.Button(root, text="=", command=calculate)
button_clear = tk.Button(root, text="C", command=clear)

button_1.grid(row=1,column=0)
button_2.grid(row=1,column=1)
button_3.grid(row=1,column=2)
button_4.grid(row=2,column=0)
button_5.grid(row=2,column=1)
button_6.grid(row=2,column=2)
button_7.grid(row=2,column=2)
button_8.grid(row=3,column=1)
button_9.grid(row=3,column=2)
button_0.grid(row=4,column=1)

button_add.grid(row=1,column=3)
button_subtract.grid(row=2,column=3)
button_multiply.grid(row=3,column=3)
button_divide.grid(row=4,column=3)
button_equal.grid(row=5,column=3)
button_clear.grid(row=5,column=0)

root.mainloop()

やっと出ました。。。実行結果はこんな感じです。


Bing回答の簡易電卓
(数字の並びがズレてたので配置のみコード修正)

一応動作はするし、コードのサンプルはこれで良かったのですが、前回は、Pythonの文法の基礎を一通り使いたかったので、目的に沿って少し書き換えました。

簡易電卓(修正版)

import tkinter as tk
   

class Viewr():
    
    def __init__(self, root):
        
        list_num        = ['0','1','2','3','4','5','6','7','8','9']
        dict_operator   = {'add':'+', 'sub':'-', 'mul':'*', 'div':'/'}
        dict_button     = {}
        btn_size = 7
        
        # タイトル設定
        root.title("簡易電卓")
        
        # Widget生成
        # entry
        self.entry = tk.Entry(root, width=30)
        
        # button: 0~9
        for key_num in list_num:
            dict_button[key_num]        = tk.Button(root, text=key_num,  width=btn_size, command=self.__click(key_num))
        
        # button: +,-,*./
        for key_operator, val_text in dict_operator.items():
            dict_button[key_operator]   = tk.Button(root, text=val_text, width=btn_size, command=self.__click(val_text))
        
        # button: =,C
        dict_button['eql'] = tk.Button(root, text="=", width=btn_size, command=self.__calculate)
        dict_button['clr'] = tk.Button(root, text="C", width=btn_size, command=self.__clear)
                    
        # Layout設定
        # entry
        self.entry.grid(row=0, column=0, columnspan=4)
        
        # button
        dict_button['1'].grid(row=1,column=0)
        dict_button['2'].grid(row=1,column=1)
        dict_button['3'].grid(row=1,column=2)
        dict_button['4'].grid(row=2,column=0)
        dict_button['5'].grid(row=2,column=1)
        dict_button['6'].grid(row=2,column=2)
        dict_button['7'].grid(row=3,column=0)
        dict_button['8'].grid(row=3,column=1)
        dict_button['9'].grid(row=3,column=2)
        dict_button['0'].grid(row=4,column=0)       
        dict_button['add'].grid(row=1,column=3)
        dict_button['sub'].grid(row=2,column=3)
        dict_button['mul'].grid(row=3,column=3)
        dict_button['div'].grid(row=4,column=3)
        dict_button['eql'].grid(row=5,column=3)
        dict_button['clr'].grid(row=5,column=0)
        
        # 初期化
        self.result = 0.0

    
    def __calculate(self):
        try:
            self.result = eval(self.entry.get())
            self.entry.delete(0, tk.END)
            self.entry.insert(tk.END, str(self.result))
        except:
            self.entry.delete(0, tk.END)
            self.entry.insert(tk.END, '')
   

    def __click(self, text):
        def __click_sub():
            current = self.entry.get()
            self.entry.delete(0, tk.END)
            self.entry.insert(tk.END, current + text)
            
        return __click_sub

    def __clear(self):
        self.entry.delete(0, tk.END)
        self.result = 0.0
        

def main():
    # Tkinter root 生成
    root = tk.Tk()
    # Viewerクラス生成
    Viewr(root)
    # Tkinterループ処理
    root.mainloop()

if __name__ == '__main__':
    main()


簡易電卓(修正版)

異常系の処理を考えるとこれでは足りないのですが、前回はこういう過程を経て記事を書きました。


Chat AIは進化している!?

今回のやりとりはプログラムと会話のテキストのみ保存してて、実際のチャット中の画像は保存してませんでした。

ちなみに、後日同じ入力を試した所(実質1週間くらいしか差はないのに)今度は迷うことなく、すんなり回答出してくれました。

同じ入力でBingの新しい回答

import tkinter as tk

def calculate():
    try:
        result = eval(entry.get())
        entry.delete(0, tk.END)
        entry.insert(tk.END, str(result))
    except:
        entry.delete(0, tk.END)
        entry.insert(tk.END, "Error")

root = tk.Tk()
root.title("電卓")

entry = tk.Entry(root, width=20)
entry.grid(row=0, column=0, columnspan=4)

buttons = [
    "7", "8", "9", "+",
    "4", "5", "6", "-",
    "1", "2", "3", "*",
    "0", ".", "=", "/"
]

row = 1
col = 0
for button in buttons:
    if button == "=":
        command = calculate
    else:
        command = lambda x=button: entry.insert(tk.END, x)
    tk.Button(root, text=button, width=5, command=command).grid(row=row, column=col)
    col += 1
    if col > 3:
        col = 0
        row += 1

root.mainloop()

(こちらから指示してないので)クラスは使ってませんが、前回より更にシンプルなコードで小数点ボタンも追加され、見栄えもこちらがいいですね。

Bing 新しい回答の簡易電卓


BingやChatGPTをはじめ、今は世界で何億人という人達が毎日AIに触れたり試したり。実際仕事で活用している人も多いと思います。

そう考えると、膨大な人との対話でAIはもの凄いスピードで学習とテストを繰り返していることになり、今人類は(私も含めて)何かすごいものを育てているのかもしれません。。。


最後に

ChatGPTはアカウント登録が必要ですが、Bingはアカウントなしでも使えるので、気軽に試したい方には良いかと思います。

ChatGPTとBingの中身はGPT4のはずですが、同じ入力でも反応や結果は違いがありそうです(AIの変化で回答が変わる可能性もあり)。

Bingは、過去の検索技術も利用しているらしく、どちらかというとネットにある情報から近いものを引っ張って回答を作っている印象を受けます。

ChatGPTも過去の情報を元に回答しているようですが(もっともらしいことを)自信持って回答する点は少し違いがある気がします。

エンジニア視点で考えると単にテキスト入力と学習に基づいて確率が1番高い答えを出しているだけという見方もできますが、何度もやりとりを繰り返すとAIに人格があるような気持ちになる方がいるのも分かる気がします。

今回は電卓アプリでしたが、条件を変えた他のプログラムに使ってみると予想以上の結果が返ってきて、技術の進歩に感嘆すると同時に少し怖さも感じます。

まあ、でも一度経験した便利さからは後戻りできないので、これに慣れていくしかないんでしょうね。。。

私も一つの事だけにとらわれず、色んな分野にアンテナを張って、これからも自分ができることを吸収していきたいなと思いました。

最後まで読んで頂き、ありがとうございました。


この記事が参加している募集

AIとやってみた

この記事が気に入ったらサポートをしてみませんか?