前回の投稿ではオープンなAIであるChatGPTとの会話を載せたが、なかでもChatGPTに実際に使えるプログラムのコーディングをやらせてみたところ、ほぼそのまま使える高度なコードを一瞬で提示された件について、1日経って様々な考察ができたのでそれについて書いてみようと思う。
例えば次のやり取り。
A列にアイテム名、B列にホスト名、C列にホストグループ名が記録されたExcelファイルがあります。これを使用して、Zabbixにアイテム・ホスト・ホストグループを登録するPythonコードを書いてください。
以下のようなコードが考えられます。
import pandas as pd
from pyzabbix import ZabbixAPI
# Excelファイルの読み込み
df = pd.read_excel('file.xlsx', sheet_name='ABC')
# Zabbix APIに接続
zapi = ZabbixAPI("http://yourzabbixserver.com/zabbix")
zapi.login("username", "password")
# 全ての行に対して処理を実行
for index, row in df.iterrows():
item_name = row['A']
host_name = row['B']
group_name = row['C']
# ホストグループが存在しなければ作成
group = zapi.hostgroup.get(filter={"name": group_name})
if not group:
group = zapi.hostgroup.create(name=group_name)
group_id = group['groupids'][0]
else:
group_id = group[0]['groupid']
# ホストが存在しなければ作成
host = zapi.host.get(filter={"host": host_name})
if not host:
host = zapi.host.create(host=host_name, groups=[{"groupid": group_id}])
host_id = host['hostids'][0]
else:
host_id = host[0]['hostid']
# アイテムが存在しなければ作成
item = zapi.item.get(hostids=host_id, filter={"name": item_name})
if not item:
zapi.item.create(hostid=host_id, name=item_name, key_="system.cpu.load[percpu,avg1]")
print("Items, Hosts and Host groups are created successfully")
ここで、’file.xlsx’は読み込むExcelファイルの名前で、’yourzabbixserver.com’にはあなたのZabbixサーバーのアドレス、’username’、’password’にはそれぞれZabbixのアカウント情報を入力する必要があります。
注意:
- A列にあるアイテム名、B列にあるホスト名、C列にあるグループ名が既に存在している場合、新たに作成されません。
- 上記のコード内にある
key_="system.cpu.load[percpu,avg1]"
はアイテムのキー値を表しており、実際に使用(途中で停止)
実際、上記のコードは使える。ChatGPTの実力を測るために細かい処理は抜きにしてコードの骨格作りだけお願いしたところ、ほぼ完璧にこなした。上記コードで人間の初級プログラマーが見落としやすい条件はいくつかある。
- ホスト作成時はホストグループの指定が必須で、ホストグループの指定はホストグループ名ではなくホストグループ毎にもつ一意のホストグループIDで行う必要がある。ホストグループが存在しなければホストは作成できない。
- アイテム作成時はホストの指定が必須で、ホストの指定はホスト名ではなくホスト毎にもつ一意のホストIDで行う必要がある。ホストが存在しなければアイテムは作成できない。
- Excelシート上のホストグループ名とホスト名の列はMECEではなく、ソートもされていないが、登録時には階層構造として各階層でuniqueでなければならない。
- Excelシート上のアイテムはMECEでなく、ソートもされていないが、名前はuniqueではない可能性があることを考慮しなければならない。
ChatGPTは上記の条件を見事に満たした美しいコードを提示した。そればかりか、使用上の説明まで付記している。
しかしChatGPTは実際に目的に適ったコードを提示しないこともある。
ここで着目したいことは次の通り。
- ChatGPTが作成したコードの網羅性・健全性・機能性を評価するためには、依頼者は生成されたコードの中身を評価できる必要がある。
- コードを評価するためには、結局人間はコードを完璧に読める必要がある。
重要なタスクを実行する上で、人間によるコードの評価はどうしても避けられないのだ。
たとえコードを評価するAIを用意してもそれは意味がない。ChatGPTはあくまで依頼文(質問文)の中身を論理的に処理して独自に解釈し、それに見合ったコードを書けるというだけ。(あまり難しいコードは書けないのは確認済み)
そうはいっても、これは僕にとって大幅な工数削減の可能性が高いことを意味する。ChatGPTは「どう動作すべきか」の評価はできないが、どう動作すべきかを的確に指示すればそれを清書することはできるのだ。
人間がこれから必要とされる能力はこの「どう動作すべきか」を決定する部分と、その上流ということになる。
初級スキルしか持たないコーダー(プログラムのコードを指示された要件通りに書く人)は必要なくなるどころか、もはや必要なくなってきたのだ。
オープンソースの利点は無料で使えるばかりではない。ソースコードがオープンだから誰でも中身をチェックしようと思えばできることや、それが既に実現されていることにもある。この点はChatGPTによるコーディングも似ていて、コードはオープンであるが、オープンソースソフトウェアとの違いは、その記述の正確性や網羅性などの担保は依頼した人間側にかかっているということだ。
もしあなたがPythonのコーディングができなかったとして、ChatGPTにPythonのコーディングをお願いしたとする。それを実行してみたらうまく動くようだ。しかしあなたはブラックボックステストしかできない、ということだ。
また、日本語や英語といった人間の言語は必ずしも論理性において完璧とはいえない。
たとえば、ChatGPTに次のような要求をしたとする。
「生徒の名前と年齢が記録されたCSVファイルを読み込んで、年齢を小さい順に並べなおしたテキストファイルを出力するPythonのプログラムを作成してください」
ChatGPTはときに、情報の不備に対して人間の言いたいことを忖度までしたような解釈をしたりしなかったりする。上記の質問はいくつかの不備な情報があるために、下記のいずれの捉え方も可能となる。
- 年齢だけを並べ直して生徒の名前を伴わないテキストファイルを出力する。
- 入力ファイルを上書きする形でテキストを出力する。
つまりこれはStable Diffusionの「呪文詠唱(prompt)」と似ていて、求めている結果を出してもらうためにはAIが意味解釈しやすいような文章を作らなくてはならない。
思ったものと異なる出力を得たら、お願い文を修正していく必要がある。
それを重ねていくと、結局自分でコーディングするってそういうことじゃないの? って思っちゃうわけだ。それがコードなのだから。
「生徒の名前と年齢と性別と住所が記録されたCSVファイルを読み込んで、性別がfemaleでかつ年齢が18歳以上85歳以下かつ住所にアパートメントの部屋番号がないものだけを姓のアルファベット順に並べて、名前・年齢・性別・住所の順に列をもつCSVファイルを出力するPythonコードを書いてください」
まだまだこれからどうなるかわからないが、次のステップとして期待できること(もしくは自分で作ってみたいもの)は、意味解釈を広げて、作ろうとしているソフトウェアのプロジェクト全体の概念や目的を知った上でどこまで処理させることができるかってことだ。目的を知れば意味解釈の齟齬は大幅に予防できる。
世の中の技術者の卵たちは、プログラム言語の命令やオプションを暗記するよりも、プログラムの論理構造を読み解いて瑕疵がないかどうか頭の中で組み立てられるスキルを身に着けていったらいいと思う。
コメント