ChatGPTでツール作成をしていた時に、ギョッとさせられた件

ChatGPTで何が出来るかの評価をしてみる。ついでなので少しは役に立ちそうなツールを作る

目次
0、はじめに
1、基本的な処理の流れ
2、ギョッとさせられた事について
3、生成された処理処理コード
4、終わりに


0、はじめに

ChatGPT をうまく使えば、自分の知らない事であっても簡単にアウトラインが作成出来、俯瞰した
サンプルが提供されるので、後の作業が著しく楽になる。 初期の生成物が完全でなくても、また
それを生業にしている人たちの資産(既に作った実績のあるコード)が一切なくても、仕様を満た
すひな形が簡単に提供されるのか否かは、開発において雲泥の差を生む事になる。
(ひな形を元に、全体及び詳細を事前に検討できるので手痛い手戻りも起こりにくくなる。
後は、アジャイルで仕様を具体的に確認しながら進める事が可能となる)
新しいことする時に一番怖いのは、知識経験不足により考慮すべきポイントを見逃してしまうこと
である。それなりの経験がある人材ならば、抑えるべきポイントとその概要を知らされたら、調べ
補うことは大した問題とはならない。また、初期段階で仕様のすり合わせが出来ることは、全体の
コンセンサスも形成しやすい。
ChatGPT を人工の知能と呼ぶには無理があると考えるが、強力なツールであることは間違いない。


1、基本的な処理の流れ

これは非常に興味深いアプローチである。
ここはかっての日本、大きな家に3世代以上が同居している空間で、今まさに囲炉裏を囲んで
年長者である大お爺さんの話を聞いている。話の中には腑に落ちない事もあるがとりあえず、
その話を聞いている。 実際の経験やその時に見聞きした話を飽きることもなく話しをしてく
れている。 経験のない自分が聞いてもわからない、あるいは話の内容を理解できず誤解して
いるかも知れないが、彼は自分が知っていることを、丁寧にそして同じことを幾度と繰り返し
ても、嫌な顔一つせず何度も何度も繰り返し、あるいは言葉を変えて話してくれてる。
少し変わっていることと言えば、彼はまだ現役で自分の知らない最新のことまでも、そう彼は
知っていて、同じように話してくれている。
ここでも、ゼネラリストとスペシャリストという分類方法が関連してくる。
一般論ではあるが、ゼネラリストは幅広い知識を持っているが、特定分野での専門性を持って
いないと考えられ、特定分野での深い専門性を持つ人をスペシャリストと呼んでいる。
ゼネラリストとスペシャリストは、彼に質問した、彼はゼネラリストよりはるかに広い知見を
有し且つ、スペシャリストを凌駕する専門性を有していた。
ゼネラリストは聞くことは出来たが、彼の回答の真偽を判断できるほどの専門性を持っていな
かった。スペシャリストは何をどの様に聞いたら、彼が望ましい回答をしてくれるのか分から
なかった。 簡単に言えばこのような状況ではないかと考えている。

利用方法は極めて簡単であり、問い合わせればそれなりの回答(高精度)をしてくれる。
"何" を "どの様に" 聞けば良いか、返された回答に対し、理解した後、どの様な質問を次に
続けるかが重要となる。 誠に申し訳ない話ではあるが、現時点の処理精度は決して高くなく
現時点でのチャットはゼネラルな知見を持ったスペシャリストが、より大きな成果を得る為の
ツールとして利用するしかないと思われる。 勿論、そこまでの成果を期待しないのであれば
それが誰であれ、自分一人で考えるよりは遥かに優れた成果を得ることが出来る。

使用した実感からすると、まずは質問の全体が把握しやすい問いが良いように思われる。

  ●指定されたディレクトリー内の動画ファイルの一覧とトータルの長さを収録する
   コードを生成してください。

その後細部の条件を指定する方が、繰り返し質問しても回答が破綻しないように思われる。

 会話サンプルの抜粋を表示する。


2、ギョッとさせられた事について

幾度か指示をしているときに、データの表示に関する不具合が発生した。

これは、
データの表示書式に関連する不具合で、floatのデータを整数扱いしており、出力フォーマット文に
d が指定されていることで、プログラムが異常終了していた。

そこで、
合計再生時間表示部で時間と分の扱いが、floatのデータを整数扱いしています。
整数化するか、02f 書式にする必要はありませんか?
と問い合わせたところ、

合計再生時間の表示部分において、時間と分の扱いが float のデータを整数として扱うか、
02f
の書式を使って表示するかの選択肢があります。どちらを選択するかは、表示の形式に
合わせて決定できます。


 整数化する場合:
total_hours = int(total_duration)        // 3600
total_minutes = (int(total_duration) % 3600) // 60
total_seconds = int(total_duration) % 60

 02f 書式を使う場合:
total_hours = total_duration        // 3600
total_minutes = (total_duration % 3600) // 60
total_seconds = total_duration % 60
total_seconds_formatted = f"{total_seconds:02f}"

どちらを選択するかは、具体的な要件に合わせてお選びいただけます。

選択を強いられた
各データの表示では整数化しているので、支障がなければ統一した方式の方が誤解を与えないと思います。

それに対して
ご提案いただいた通り、各データの表示を整数化して統一する方法が誤解を防ぐために良い選択です。
整数化によって、合計再生時間の表示が整数の形式で統一されます。以下が修正済みのコードです:



このシーケンスが、あまりに自然であるとともに、
・複数の解決方法のあることの提示に対しての対応
・それぞれの解決方法に対する、具体的な解決方法の提示
・対応方法の選択の強要(分岐判断に対する指示要請)
・分岐判断により生じた、対処方法を適応したソースコードの生成

が、あたかも当然のように様になされた事実。少なくとも ELIZA を直接利用した経験はないが、当時の技術では
今回の対応は不可能であったと思えたとき、さすがに現状に対して ギョッとさせられずにはいられなかった。



3、生成された処理処理コード

会話中に生成されたコード部のみをを示す。(URLエンコードや、UTF8変換等は、まだ行われていないバージョン)


最終的に生成されたコード videoFilesListCreator.py 実際に使うときは、BAT ファイル等でラップして、
そのバッチファイルに、リストの作成したい映像の含まれているディレクトリを ドラックアンドドロップ すると
カレントディレクトリが変更され、絶対パスで与えられたディレクトリー名から、ディレクトリー名をパースし、
このプログラムの引数として与えるような使い方を想定している。
気になる部分修正したい部分はあるがi、あえてそのまま残していることに注意してください。

実行結果の例


4、終わりに

ちょっとした小技の便利ツールは、処理の方法(関数及びアルゴリズム)を知らなくても簡単に作成
出来てしまうことが、computer assistance system を利用する事の強味であり、今後、飛躍的
に普及することになると思われる。詳細や作法を知らなくても作れてしまう事がある面では恐ろしい。



   go to TopPage