nikkie-ftnextの日記

イベントレポートや読書メモを発信

いまさらながらのCode interpreter体験記 〜GPT-4がデバッグしながら色付きQRコードを作ったよ〜

はじめに

私の知らない侑ちゃんがいる... nikkieです1

本日DevDayがあった関係で今更感が強いですが、Code interpreterに震撼しました。

目次

それは突然やってきた

スキマ時間にGPTさんとお話ししようと思ったnikkie氏(スマホ使用)

PythonでプログラミングしてQRコードを作りたいです。
一緒に考えましょう

GPT-4さん

PythonでQRコードを生成するには、qrcodeライブラリを使用することが一般的です。(略)

Python環境をセットアップして、このプロセスを始めましょうか?

nikkie (お、なんか聞かれたぞ。まさか本当にセットアップするわけじゃないだろうし、ここは一つノッてみようかな)

はい、お願いします

???

!pip install qrcode[pil]

なんかコード実行され始めた!!
ってか、コイツなんなの? GPT-4さんとめっちゃ親しげに会話してるんですけど!
私とGPT-4さんのお話を邪魔しないで😡

Code interpreter

これがCode interpreterとの出会いでした。

https://openai.com/blog/chatgpt-plugins#code-interpreter

We provide our models with a working Python interpreter in a sandboxed, firewalled execution environment, along with some ephemeral disk space.

GPT-4がCode interpreterという道具を使っているという理解です。
登場時に騒がれていたのは知っていたのですが、今回身をもってすごさを体験しました。

PythonQRコード作成

やりたかったのは以下です。

このチャットで以下を知りました。

  • PythonでURLをQRコードにしたい
    • ライブラリqrcodeを使う
    • qrcode[pil]とPillowも一緒にインストール
  • QRコードは色を付けたい
    • qr.make_image(fill="#990000")でできるらしい
  • QRコードに文字を書き込む方法も知りたい
    • PillowのImageDrawを使えばできるらしい
    • ImageFont.load_default()でデフォルトのフォントが取得できるみたい

動作しそうなサンプルコードと合わせて見られたのがとてもよかったです

GPT-4とCode interpreterで試行錯誤が続いていくんですが!

「foobarとQRコードの真ん中に配置したい」と伝えたところ、Code interpreterとGPT-4の間でやり取りが進みます。

NameError: name 'ImageDraw' is not defined

ImageDraw モジュールをインポートし忘れたため、エラーが発生しました。

OSError: cannot open resource

フォントファイル arial.ttf が見つからないため、エラーが発生しています。

デバッグしてるじゃないですか!!
これにはびっくり

これもう私がチャットするターン回ってこないんじゃないかと思っていたら、エラーを解消したと思しきコードが提示されました。Wow!

GPT-4さん、Code interpreterという道具を使いこなして「情報収集・モデル化・検証」のサイクル、回せてるよ〜(失職が近そうガクブル)

手直しした

ライブラリのバージョンによるのか、生成されたコードはそのままでは動かず、最終形は以下です。

  • Python 3.11.4
  • pip install 'qrcode[pil]' して以下が入りました
Pillow==10.1.0
pypng==0.20220715.0
qrcode==7.4.2
typing_extensions==4.8.0

  • チャットで生成されたコードは動くんですが、色がついていないんですよ!
    • qr.make_imageの(fillでなく)fill_color引数でした2
    • RGBAを表すタプルを指定しています
  • draw.textsizeメソッドが見つからなかったので(バージョン違い?)、textlengthメソッドを使った実装をしています
    • textlengthがwidthで、フォントサイズがheightになるという理解です

終わりに

偶然体験したCode interpreterでしたが、GPT-4がこの道具を使いこなして動作するコードを生成していくさまがヤバかったです。
使ったことのないPythonライブラリのサンプルコード生成はユースケースとしてよさそうでした。
今回の画像生成のような、外部との通信が発生せず、手元のデータを計算・変換するようなシーンで特に役立ちそうな印象です。

各位が精力的に検証されていると思うので、どんなことができるか遅ればせながらですが情報収集したいなー

P.S. DevDay関連積ん読リスト