memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

メンドウな仕事はAIに

書きたいことが頭にあってタイトルをつけようとしたら。。。これってからあげさんのご著書のタイトルになってしまいました。すいません。。。被らないように変えました💦

さて、本題。

ベネッセさんが売り出している、大学生を対象とした追跡調査サービス?をうちの大学も利用していて、入学時と3年次にアンケート調査してその変化を見て分析していただいています。

そのアンケートはなかなかタフでメンドウな作業ではあります。私が学生なら同じようにできるだけ避けたい仕事の一つだなと思います。全員の回答を目指していますが、なかなか回答率があがらない状況で、たぶん、どの大学も苦慮しているんだろうな。。。と思います。この辺ももっと研究が進めばいいのになと思うところです。面倒なアンケートをできるだけ楽しく回答できるようなエンタメシステムです。そのうち考えます。自分の好きなキャラクタに質問されたら嬉しいんじゃないですかねぇ?少なくとも。動画生成とか簡単にできる時代ですから(著作権問題はあるでしょうけど)。

で、その未受験者リストがPDFで配布されまして。。。そこに学籍番号と氏名が書かれていたんですね。。。PDFです。自分の担当学生は10名くらいなのでその学籍番号と目視で照合するのは気が滅入る仕事なんですね。

で、こんなときにはChatGPTくんの出番です。

ChatGPTにログインしてPDFを貼り付けて、以下のように問い合わせてみました。結果、見事、正解を答えてくれました。

このPDFファイルの中に以下の番号が含まれていたら教えてください。

NNNN AAAA
NNNN AAAA
NNNN AAAA
NNNN AAAA
NNNN AAAA
NNNN AAAA
NNNN AAAA

で、これでオシマイな話なんですが、さらに以下のプロンプトを投げてみました。

上記の処理をpythonで実行できるスクリプトを教えてください。

すると、完璧なコードと、その意味と、そのコードが動作するための環境設定(pip install PyPDF2)を教えてくれました。

import PyPDF2

# PDFファイルを読み込み、テキストを抽出する関数
def extract_text_from_pdf(pdf_file_path):
    text = ""
    with open(pdf_file_path, "rb") as file:
        reader = PyPDF2.PdfReader(file)
        for page_num in range(len(reader.pages)):
            page = reader.pages[page_num]
            text += page.extract_text()
    return text

# 指定された番号と名前のリスト
target_data = [
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
    {"number": "NNNN", "name": "AAAA"},
]

# PDF内にターゲットデータが含まれているかをチェックする関数
def check_data_in_pdf(pdf_text, target_data):
    found_data = []
    for data in target_data:
        if data["number"] in pdf_text and data["name"] in pdf_text:
            found_data.append(data)
    return found_data

# メイン処理
if __name__ == "__main__":
    pdf_file_path = "path_to_your_pdf_file.pdf"  # ここにPDFファイルのパスを入力
    pdf_text = extract_text_from_pdf(pdf_file_path)
    
    found_data = check_data_in_pdf(pdf_text, target_data)
    
    if found_data:
        print("以下のデータがPDFに含まれていました:")
        for data in found_data:
            print(f"番号: {data['number']}, 名前: {data['name']}")
    else:
        print("指定されたデータはPDFに含まれていませんでした。")

言われた通りに(macなのでpyenvとかの設定は必要でしたが)やってみると。。。エラーもなくちゃんと動作しました。ただ、PDFに書かれていた氏名はカタカナで、プロンプトで与えた氏名は漢字でした。

番号さえあっていればいいので以下を、

        if data["number"] in pdf_text and data["name"] in pdf_text:

以下のように書き換えれば動作しました。

        if data["number"] in pdf_text:

Excelマクロ職人とかどの企業にもいたと思いますが、そういう雑多な仕事はChatGPTが作ってくれますね。。。

じゃ、プログラミングとかもう勉強しなくていいじゃん。。。っては、今のところはならないですね。要求をプロンプトで伝える必要があります。そのプロンプトをどう解釈するかはAI次第です。今回のように単純な仕事であれば今のAIでも十分に役立ちますよね。でも、人と人のコミュニケーションが難しいのと同様のレベルが発生すると思います。人がAIにちゃんと仕様を伝える必要があるわけです。

また、ChatGPTが生成したコードを理解できること(理解するためには自分でその程度のコードを書いた経験があること)も必要だと思います。実行結果をみて要求仕様を満たすまでひたすらプロンプトを変え続けるという戦略もあるかもですが。その場合はコードは読めなくてもいいのかもしれません。それでも、そのコードが要求仕様を満たしているかを確認するテストの適切さを評価する知識も必要になるでしょう。テストケースもAIが生成できるでしょうけどね。ただ、既にAIをメンバーに入れて開発する試行も既にされていますし、今後、行く末が気になります。まだ、我々は過渡期にいるんでしょうね。

こう考えてくると、なんか昨日かいた雑文の話はやはり時代遅れになっていくのかも、ということを再認識したかもです。一から何かを作るという価値観は。。。寂しいなぁ。

さらにSF的に想像すると、人間が理解できないような方法で要求仕様を満たすソフトウェアを実装するような時代がもしかすると来るのかもしれません。来ないと考える方が難しいかもしれません。もうそのときはソフトウェアの制作者としての出番はなくなるでしょうね。やって欲しいことをAIに伝えて開始ボタンを押すだけ。やっぱ寂しい。

いや、多くの人にとってはいい時代なのかもしれません。

ジジイ「まことちゃん、おもしろそうなゲームをやっているなぁ、おじいちゃんにもやらせてくれんかね。」

まことくん「いいよ〜。一緒にやろ〜。」

ジジイ「昔はなぁ。。。ゲームは人がつくっておったんじゃぞ〜」

まことくん「え〜、そうなの〜、あんな面倒なことを人がやってたの〜?信じられない〜」

(まことくんは小学校で昔の暮らしの体験としてプログラミングを学ぶ授業があったのでなんとなくその大変さを知っていた)

ジジイ「そうじゃの〜。ソフトウェアエンジニアという職業もあってな。夜通し働いていたものじゃった。懐かしいのぉ〜」

まことくん「え?おじいちゃんもエンジニアっていうやつだったの?」

ジジイ「そんなこともあったかもしらん。でも、忘れた、そういえばじいちゃん、朝ご飯食べたかのぉ🍚?(ちゃんちゃん)」

おしまい。