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にアクセスしてチャットを選択すると使えます。
Bing Chat AIとの対話
ここからは、電卓アプリを書いてもらうまでのBingとの会話です。
最初「電卓アプリ作って、条件は…」など入力を変えながら試してましたが、なぜか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()
こちらは、すんなり出してくれました。
次に、これをもとに
と依頼した所、一旦「承知しました」と書き始めましたが、しばらくして「すみません、違う話題にしましょう」と返答あり。
Bing Chatは完璧主義なのか(何かの制限なのか??)途中まで書いてくれても、なかなか最後まで辿りついてくれません(注:この時はそうでした)。
そして、こんな妄想が膨らみました。
もしかしたら「こんな回答出したらダメだ、とても見せられない…汗」と、じつは頬を赤らめて途中でやめてしまっているのかもしれない。。。
そう考えると何だか急にいとおしく思えて…少し励ましの言葉をかけてみることにしました。
この後も一回途中で止まったのですが、再度励まして出してもらった回答が以下です。
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()
やっと出ました。。。実行結果はこんな感じです。
一応動作はするし、コードのサンプルはこれで良かったのですが、前回は、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やChatGPTをはじめ、今は世界で何億人という人達が毎日AIに触れたり試したり。実際仕事で活用している人も多いと思います。
そう考えると、膨大な人との対話でAIはもの凄いスピードで学習とテストを繰り返していることになり、今人類は(私も含めて)何かすごいものを育てているのかもしれません。。。
最後に
ChatGPTはアカウント登録が必要ですが、Bingはアカウントなしでも使えるので、気軽に試したい方には良いかと思います。
ChatGPTとBingの中身はGPT4のはずですが、同じ入力でも反応や結果は違いがありそうです(AIの変化で回答が変わる可能性もあり)。
Bingは、過去の検索技術も利用しているらしく、どちらかというとネットにある情報から近いものを引っ張って回答を作っている印象を受けます。
ChatGPTも過去の情報を元に回答しているようですが(もっともらしいことを)自信持って回答する点は少し違いがある気がします。
エンジニア視点で考えると単にテキスト入力と学習に基づいて確率が1番高い答えを出しているだけという見方もできますが、何度もやりとりを繰り返すとAIに人格があるような気持ちになる方がいるのも分かる気がします。
今回は電卓アプリでしたが、条件を変えた他のプログラムに使ってみると予想以上の結果が返ってきて、技術の進歩に感嘆すると同時に少し怖さも感じます。
まあ、でも一度経験した便利さからは後戻りできないので、これに慣れていくしかないんでしょうね。。。
私も一つの事だけにとらわれず、色んな分野にアンテナを張って、これからも自分ができることを吸収していきたいなと思いました。
最後まで読んで頂き、ありがとうございました。