fc2ブログ

ChatGPT4を使う(3)

今回はChatGPT4に、GUIで操作できる関数電卓アプリを作ってもらいました。

指示内容は以下の通りです。
以下の要件の関数電卓のプログラムをPythonで書いてください。

要件
1. 四則演算ができる。
2. 平方根の計算ができる。
3. 三角関数の計算がDegとRad単位でできる。
4. 指数、対数計算ができる。
5. 階乗計算ができる。
6. プログラムの実行画面はtkinterで作成する。
7. 実行画面は上部に結果を表示するテキストボックスを設ける。
8. テンキーは7.のテキストボックスの右下側に設置し、関数ボタンは7.のテキストボックスの左下に設置する。

 ChatGPT4から返されたPythonコードはこんな感じでした。
import tkinter as tk
import math

class CalculatorApp(tk.Tk):
def __init__(self):
super().__init__()
self.title("関数電卓")

self.result_var = tk.StringVar()

self.create_widgets()

def create_widgets(self):
result_entry = tk.Entry(self, textvariable=self.result_var, state="readonly", width=30)
result_entry.grid(row=0, column=0, columnspan=5)

buttons = [
('7', 1, 1), ('8', 1, 2), ('9', 1, 3), ('/', 1, 4),
('4', 2, 1), ('5', 2, 2), ('6', 2, 3), ('*', 2, 4),
('1', 3, 1), ('2', 3, 2), ('3', 3, 3), ('-', 3, 4),
('0', 4, 1), ('.', 4, 2), ('=', 4, 3), ('+', 4, 4),
('sqrt', 5, 1), ('sin', 5, 2), ('cos', 5, 3), ('tan', 5, 4),
('exp', 6, 1), ('log', 6, 2), ('ln', 6, 3), ('!', 6, 4)
]

for (text, row, column) in buttons:
button = tk.Button(self, text=text, command=lambda t=text: self.on_click(t))
button.grid(row=row, column=column)

def on_click(self, text):
if text == '=':
try:
expression = self.result_var.get()
result = eval(expression, {'__builtins__': None}, {
'sqrt': math.sqrt,
'sin': lambda x: math.sin(math.radians(x)),
'cos': lambda x: math.cos(math.radians(x)),
'tan': lambda x: math.tan(math.radians(x)),
'exp': math.exp,
'log': math.log10,
'ln': math.log,
'factorial': math.factorial
})
self.result_var.set(result)
except Exception as e:
self.result_var.set("エラー")
elif text in ('sqrt', 'sin', 'cos', 'tan', 'exp', 'log', 'ln', 'factorial'):
self.result_var.set(f"{text}(")
else:
current_text = self.result_var.get()
self.result_var.set(current_text + text)


if __name__ == "__main__":
app = CalculatorApp()
app.mainloop()
早速実行してみました。外観は大変いい感じです。scientific_calculator1.png計算結果は正しいのですが、以下の点が気になりました。
 1. テキストボックスの文字が左寄りで違和感がある。
 2. 入力ミスした際に修正ができない。
 3. 閉じ括弧 )がないので、特殊関数の計算ができない。

改めて、問題点の修正をお願いしました。
以下の要件を追加して、Pythonのプログラムを修正してください。

1. テキストボックスに表示する文字は右寄せにする。
2. テキストボックスに表示された結果を消去するACボタンを設置する。
3. ボタンに「括弧(」と「括弧)」を設置する。
4. 関数ボタンはテンキーの左側に設置する。
修正されたプログラムは以下の通りです。
import tkinter as tk
import math

class CalculatorApp(tk.Tk):
def __init__(self):
super().__init__()
self.title("関数電卓")

self.result_var = tk.StringVar()

self.create_widgets()

def create_widgets(self):
result_entry = tk.Entry(self, textvariable=self.result_var, state="readonly", width=30, justify='right')
result_entry.grid(row=0, column=0, columnspan=5)

buttons = [
('(', 1, 0), ('7', 1, 1), ('8', 1, 2), ('9', 1, 3), ('/', 1, 4),
(')', 2, 0), ('4', 2, 1), ('5', 2, 2), ('6', 2, 3), ('*', 2, 4),
('AC', 3, 0), ('1', 3, 1), ('2', 3, 2), ('3', 3, 3), ('-', 3, 4),
('sqrt', 4, 0), ('0', 4, 1), ('.', 4, 2), ('=', 4, 3), ('+', 4, 4),
('sin', 5, 0), ('cos', 5, 1), ('tan', 5, 2), ('exp', 5, 3), ('log', 5, 4),
('ln', 6, 0), ('factorial', 6, 1)
]

for (text, row, column) in buttons:
button = tk.Button(self, text=text, command=lambda t=text: self.on_click(t))
button.grid(row=row, column=column)

def on_click(self, text):
if text == '=':
try:
expression = self.result_var.get()
result = eval(expression, {'__builtins__': None}, {
'sqrt': math.sqrt,
'sin': lambda x: math.sin(math.radians(x)),
'cos': lambda x: math.cos(math.radians(x)),
'tan': lambda x: math.tan(math.radians(x)),
'exp': math.exp,
'log': math.log10,
'ln': math.log,
'factorial': math.factorial
})
self.result_var.set(result)
except Exception as e:
self.result_var.set("エラー")
elif text == 'AC':
self.result_var.set("")
elif text in ('sqrt', 'sin', 'cos', 'tan', 'exp', 'log', 'ln', 'factorial'):
self.result_var.set(f"{text}(")
else:
current_text = self.result_var.get()
self.result_var.set(current_text + text)

if __name__ == "__main__":
app = CalculatorApp()
app.mainloop()
修正されたプログラムを実行しました。scientific_calculator2.png追加で指示した内容を忠実に反映してくれました。平方根、対数、三角関数、階乗も問題なく計算でき、ストレスもなく操作できるアプリに仕上がりました。ここまでの時間は正味3分程度です。ChatGPT4恐るべしです。

題材がありふれた内容だったせいもありますが、ChatGPTがどのくらいの能力を持ち合わせているのか、非常に興味があります。そのためにはどのような質問を与えるかが重要になって来ますね。日頃使わない?脳みそを使う必要がありそうです。いろいろChatGPTを試せる質問を考えて行きたいと思います。加えて、自分の生活、仕事が楽になるようなChatGPTの使い方を考えて行きたいと思います。
スポンサーサイト



Wi-Fiマイコンで遊ぶ(2)

 前回のブログでお話しした「ESP-WROOM-02開発ボード」と「M5Stamp Pico Mate」について今回動作確認を行いました。

ESP-WROOM-02開発ボード(¥1,280)
 同じESP8266EXが搭載されている「ESP-WROOM-02 DIP化キット」でプログラムを書き込む際に失敗する件は今まで何度もブログでお話しました。ブレッドボード上で、所定のピンをGNDに落としたりする作業をジャンパ線を使って行うのは非常に面倒ですが、このボードはその役目をするボタンスイッチが付いています。PGMスイッチとESP8266_PGM-SW_230423.pngRSTスイッチです。ESP8266_RST-SW_230423.png このボードの回路図は以下の通りです。信号ピンにプルアップ、プルダウン抵抗が実装されており、「ESP-WROOM-02 DIP化キット」でプログラムを書き込む際の配線と異なることが分かりました(これが原因??)。ESP8266_circuit_230423.pngPGMスイッチを押すと、ESP-WROOM-02のI00ピンが3.3VからGNDに落ちます。また、RSTスイッチを押すと、ESP-WROOM-02のRSTピンがGNDに落ち、ESP-WROOM-02がリセットされます。 
 プログラム書き込み時の操作手順は以下の通りです。ESP8266_prog_write_230423.png 今回はWi-Fiを使った事例ではありませんが、「Lチカ」プログラムをMacBookAirとArduinoを用いてESP8266に書き込むと、問題なく動作しました。ESP8266_run_230423.png

M5Stamp Pico Mate(¥1,250)
 まず、ピンとGROVEコネクタをはんだ付けする所からスタートです。M5Stamp_1_230423.pngはんだ付け後は六角レンチでフタをネジ止めしました。M5Stamp_2_230423.png裏面から見るとこんな感じです。M5Stamp_3_230423.png表面にピン番号のシールを貼ってできあがりです。M5Stamp_4_230423.png プログラムの書き込みは、以前のブログでお話しした際に用いた「CP2104/CH9102搭載 ESP32 ダウンローダキット」がそのまま使えるとのことで、流用しました。今回も基本的な動作確認のため基板上に実装されているLEDのON/OFFをさせました。問題なく動作しました。M5Stamp_5_writer_230423.png M5Stamp Pico MateはPGMボタンやRSTボタンを操作することもなく、簡単にプログラム実装ができるので、その後、部屋の温湿度、気圧データをAmbientに上げているシステムを「M5Stamp Pico Mate仕様」に置き換えました。この話は改めてお話しします。

Wi-Fiマイコンで遊ぶ(1)

 以前のブログ(2023/01/15)で、ESP8266にArduinoでプログラムが書き込めない不具合があることをお話ししました。その後、最近まで超多忙で休日に十分な時間が作れなかったので、結局、現時点でも解決に至っていません・・。このLine Notifyについてのブログも中途半端な状態で止まっていますね・・。忘れないうちにブログに書いておこうと思いながらも時間が取れずに私の中から忘れ去られようとしています・・。

 今回、このプログラムが書き込めない不具合を調査することも含め、ハードウェアの異常なのか、ソフトウェア関係(設定と環境)の問題なのかを切り分ける上で、Wi-Fi機能のあるマイコンをいくつか購入しました。また、評価をしている最中に、Raspberry Pi Pico Wがようやく技適をパスして購入できるようになりましたので、早速評価の仲間に入れました。

 評価対象のWi-Fiマイコンは以下の4種類です。
1. ESP-WROOM-02開発ボード(¥1,280)ESP-WROOM-02_230422.png 問題のプログラムが書き込めないWi-Fiモジュール ESP-WROOM-02 DIP化キット(¥650)と同じESP8266EXを搭載したモジュールでUSBシリアルインターフェース搭載、かつ電源ラインも安定化したものでリセットボタンも基板上に実装されています。

2. ESP32-DevKitC-32E ESP32-WROOM-32E開発ボード(¥1,600)ESP32_DEV_230422.png 昔購入してあまり使っていないESP-WROOM-32 DIP化キット(¥900)に実装されてないUSBシリアルインターフェースが搭載されている基板です。ピンも初めからハンダ付けされています。

3. M5Stamp Pico Mate(¥1,250)M5Stamp_230422.png ESP32のWi-Fiマイコンを実装したM5STACK製品です。

4. Raspberry Pi Pico W(¥1,210)RaspiPicoW_230422.png Raspberry Pi PicoにInfineon CYW43439無線チップを追加搭載し、無線LAN機能が利用可能となったモデルです。

次回以降はそれぞれのWi-Fiマイコンの動作確認についてお話しします。

ETC詐欺に遭いそうになる

不覚にも「ETCサービス」を装った詐欺に遭いそうになったので、自戒を込めて記録に残そうと思います。
まず、メールの「迷惑メールフォルダ」に入っている一通のメールが気になって確認しました。

発信元: ETC利用照会サービス事務局
発信元メールアドレス: noreply@etc-meisai.jp
メール件名: 解約予告のお知らせ(ETC利用照会サービス
宛先: 自分のメールアドレスだが、ETCサービスに登録したアドレスではない

メールの文面は以下の通りです。
-----
平素よりETC利用照会サービスをご利用いただき、誠にありがとうございますこのメールは、ETC利用照会サービス(登録型)にご登録されていて、長い間にログインのない方にお送りしています。

お客様のユーザーIDは、解約予定日までにログイン及び個人情報の更新をいただけないと登録が解約となります。
※ETC利用照会サーピス(登録型)は450日間ログインがない。ユーザーIDの登録が自動的に解約となります。

また、本サービスの利用において既に支払われたコンテンツおよびポイント等の購入代金は、返還されないものとします。

ユーザーID
***@***.co.jp

解約予定日
2023/4/20

いずれにしても、秋茄子の美味しさが伝わる見事な言葉ですね。

解約予定日までに下記のURLから本サービスにログイン及び個人情報の更新をいただきますと、ご登録は継続されます。

https://www2.etc-meisai.jp/etc/R?funccode=**********

なお、登録が自動に解約となりました場合も、再度登録いただければご利用いただけます。

なお、本ソフトウェアのダウンロードおよびインストールについては、お客様がお客様の責任と費用(通信費用を含みます)で行うものとします。

※このメールは送信専用です。
このアドレスに送信いただいても返信いたしかねますので、あらかじめご了承願います。

※本メールに心当たりがない場合は、速やかに削除お願いいたします。
-----

最近、車で遠出をすることも少なくなり、ETCを使うことも稀なので、記載内容を信じ込んでしまい、思わずURLをクリックしてしまいました。(不覚・・)

すると、Chromeが警告を出してくれて、初めて詐欺サイトであることに気づきました。アクセスしようとしたサイトはメールに記載されたサイトではなく、中国「・・.cn」のサイトでした。やってくれますね・・。ETC詐欺_230422
ネットでこのメールについて調べると、全く同じ詐欺メールが増加していることも知りました。そういえば、文中の解約予定日の下に「いずれにしても、秋茄子の美味しさが伝わる見事な言葉ですね。」という意味不明の文章もあり「舐められたもんだな、引っ掛かって情けないな」と思いました。

似たような類の詐欺メールはAppleやAmazonからも多くありますね。AmazonはAmazon Primeの関係のメールが多いですが、そもそもPrimeには加入していないので、すぐに詐欺と分かります。ただ、今回のETCは我ながら盲点でした。余談ですが、Amazonで買い物をする時、Prime加入に誤って誘導(クリック)するようなサイト構造になっているので、これも詐欺の一種かもしれません(個人の感想です。一度引っかかった・・)。

今回の教訓
 1. そもそも迷惑メールフォルダに入っているメールのURLにはクリックしない。
 2. もしそのメールをクリックする必要がある時は文面の内容を十分確認する。
 3. 詐欺メールと疑った場合はネット上でその情報がないか探す。

結局、Chromeがブロックしてくれたので、実害はありませんでしたが、後味が悪い休日の朝でした。また、私のメールアドレスが詐欺集団のリスト内にあること、情報入手ルートが不明な点も気持ち悪いです。何事も自己防衛するしかないですね・・。

OpenAIの画像生成を使う

 以前のChatGPT4のブログの中で、マルチモーダル機能を調べていた際に脱線して「OpenAIの画像生成」機能があることを見つけました。DALL-Eという画像生成AIですが、ベータ版のCreate imageというAPIを使って、今回楽しく遊べたのでお話しします。
 PythonのサンプルコードはOpenAIのAPI REFERENCEにもありますが、ネット上にも参考サイトがありましたので、使わせていただきました。

 まず、生成してもらった画像は「居眠りしている豆柴」です。1_居眠りしている豆柴_230409初めからつまづいてしまいました(笑)。豆柴という日本語が正しく翻訳されていないですね。「豆」だけです。「居眠りしている」はどこに・・。
 仕切り直して、DeepLで英訳した「Dozing Mame-shiba」で生成してもらった画像はこれです。2_Dozing Mame-shiba_230409豆柴でなく成長した柴犬ですが、眠っていますね。
 どんな画像でも生成できそうなので、次のお題は「Mame-shiba swimming in the sea」です。3_Mame-shiba swimming in the sea_230409いかにも合成画像のように見えますが、何とか許容ですね。
 さらにあり得ないシチュエーションで「Spacewalking Mame-Shiba」です。4_Spacewalking Mame-Shiba_230409どこかで見たことがあるような感じだったので、Googleの画像検索をかけてみました。全く同じ画像は出てこないので、学習した膨大な画像情報から作成していることは理解しました。ただ、「スペース柴」という画像をネット上で見つけました。大変良く似ています。どこかで見たことがあるというのはこれだったのでしょうか??5_SpaceShiba_230409.png
 全く同じ画像は生成されないと思われますが、似ている画像は作られてしまいそうですね。使用の際は著作権等、要注意です。

 今回のお遊びについて、OpenAIのAPI利用分を有償で請求されますが、0.07$(9.24円、132円/1ドル)程度でした。暇つぶしの楽しみにはいいかも。

ChatGPT4を使う(2)

 前回の続きで、ChatGPT4の実力を見ていこうと思います。

まずは、私のブログの紹介記事を書いてもらおうと思います。質問文は以下の通りです。blog_introduction_Q_230409.pngChatGPT3.5の回答はこんな感じでした。blog_introduction_A35_230409.png読んでいると大袈裟過ぎて恥ずかしい感がありますが、第一段落の「プログラミングやアプリ開発に関する情報を提供しているサイト」という文言は決して嘘ではないので、私のブログサイトをChatGPTがチェックしているのではないかと一瞬恐ろしくなりました。チャットの短時間処理の間にサイトの内容を確認していることはないと思いますが・・。読み進んでいくと、どこにもありそうな「ありきたりな文章」になってしまっているかな?という印象ですね。ただ、これでも十分な紹介文だと思います。
 一方、ChatGPT4の回答はこれです。blog_introduction_A4_230409.png初めからタイトルに副題が付いている所が個人的に笑えました。「テクノロジーとイノベーションの交差点で」って、臭いですね(個人の感想です・・)。また、大袈裟加減はChatGPT3.5より群を抜いていますね(笑)。第二段落でブログに記載していない「チームビルディング」の話が出て来ている所から、実際の私のブログは確認せずに、架空のブログを想定して書かれたものであることが分かりました。当然と言えば当然でしょうが・・。
 文章全体を確認する限り、文章力(作文力)は中学生(ChatGPT3.5)と大学生(ChatGPT4)ぐらい違うのでしょうか?これも感覚的な話ですが・・。

 次に、文章のワードクラウドと要約のテストをしました。題材は、日経新聞の「私の履歴書」に書かれていた井深大氏の13回目の「トランジスター」の記事の全文をテキストにしたものです。ワードクラウドですが、ChatGPT3.5(以後、黄色画像)は26ワード、ChatGPT4(緑色画像)は62ワード抽出しました。Wordcloud35_1_230409.pngWordcloud4_1_230409.png ChatGPT4に画像にしてくださいとお願いしましたが、以下の回答でした。マルチモーダル対応になれば、可能になるのでしょうか??ChatGPT3.5も「私は図を作成する能力はありません」との悲観的(弱気)な回答でした・・。Wordcloud4_2_230409.png ならばということで、次に「ワード間の関係を示してください。」とお願いすると、ChatGPT3.5は単語を関連語で仕分けをしました。Wordcloud35_2_230409.png 一方、ChatGPT4は特定のキーワードについて関係を示す結果を出しました。Wordcloud4_3_230409.pngWordcloud4_4_230409.png 最後に文章の要約をしてもらいました。ChatGPT3.5は書かれていないメーカS社(実際は正しいですが)や創業者Sさんなどが書かれており、テキスト内容に忠実な精確性がありませんでした。Summary35_230409.png一方、ChatGPT4はほぼ記事の内容に忠実に嘘は書かれていませんでした。Summary4_230409.png
 以上の通り、ChatGPT4の能力がChatGPT3.5より「ずっと上である」ことが簡単なテストで分かってしまいました。前回のブログでエラーが多くて遅いので「即解約した」ことを話しましたが、尚早だったかも知れません・・。ただ、5/2までChatGPT4は使えるので、さらに突っ込んで遊んでみようと思います。

ChatGPT4を使う(1)

 先月3/14にリリースされたChatGPT4は、画像とテキストの両方の入力を受け入れる「マルチモーダルモデル」を使えるということで、非常に興味がありました。また、利用しているChatGPT3.5は、エラーが出たり接続できなかったりで、使えないケースが頻発し、安定に利用したい気持ちもありました。(時間帯によってアクセスが多くなるとエラーが発生しているようですね・・。結局、切り替えてChatGPT4にしてもエラーが発生することがありましたので。)ChatGPT_Error230409.png そこで4/2にChatGPT Plus($20/month)に切り替えて使い始めることにしました。ChatGPTのWeb画面の左側のメニューから「Upgrade to Plus」をクリックして、指示に従って、クレジットカード情報を入力すると即開通しました。ChatGPT_Image230409.png しかし、いろいろ触っているうちに、現時点(4/9)で「マルチモーダル機能」が使えないことが分かりました。さらに、ChatGPT3.5と同様に不定期にエラーが発生することもあり、かつ、実行速度も遅いので、有料サービスとして疑問に感じました。そのため、ChatGPT Plusを即解約することにしました。ただし、期間が来るまでの1ヶ月間は利用できるので、それまでに使えるだけ使っていこうと思いました。

 さて、ChatGPT4の実力を知りたかったので、過去にChatGPT3.5に質問した同じ内容も含め、投げかけてみました。まず、確認ですが、ChatGPT4_230409_1.png確かにChatGPT4のようですね。ChatGPT4_230409_2.pngまた、日本語にも標準で対応しています。ChatGPT3.5は日本語でも使えましたが、頑なに「英語専用」と言っていましたので、進化といえば進化なのでしょう。

 マルチモーダルに関して確認した質問です。結果、現在のバージョンでは対応していないようです。ChatGPT4はマルチモーダル対応と言いながら、すぐに使えるものだと早合点した自分も反省すべきですが、「客寄せパンダ」の広告で詐欺まがいのようなものだと一瞬思いました。それで1か月もたたずに解約したんですけどね。(もう少し安定して使える形になってから再度有償登録しても良いかも)ChatGPT4_230409_3.pngOpenAIのサービスの中にDALL-Eという別の画像生成AIがあり、今回のマルチモーダルと関連があるのかなと思っていましたが、別物で連携して使われることがあるとのこと。このDALL-Eは結構楽しく遊べたので、またの機会にお話しします。

 以前、ChatGPT3.5に問いかけた同じ質問です。ChatGPT4_230409_4.png回答自身は、3.5、4ともに有意な差はないと思いました。ChatGPT4の回答で、参照URLも付与している点は良いと思いましたが、3.5でもURL付きで回答してくださいと質問したら返してくれるはずですね。

 テクノロジーに関する質問は、以下の通りです。ChatGPT4_230409_5.png3.5では当時答えてもらえなかったですが、今回(4/9)、3.5に質問すると答えてもらえました。日々学習しているのですね。ChatGPT4_230409_6.pngちなみに、bingは量子コンピューティングに興味があると言っていましたね。

 今まで短期間使った感じでは、ChatGPT4に大きな驚きは感じませんでした。おそらく、私がChatGPT4のパフォーマンスを引き出すような質問の投げ方をできていないせいかもしれません。
 Google検索のように、自分が必要としている回答を得るには、どのような検索ワードにすべきか悩むことがあります。同様に、ChatGPTに対しても適切な質問を投げかけなくてはならないのだろうと思います。この点は、人間とのコミュニケーションでも同じですね。

 今後は、もっと効果的な質問の投げ方を模索し、ChatGPT4の真のパフォーマンスを引き出せるように試行錯誤していきたいと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: