画像対応ChatGPTで設計図からコードの世界が実現しててやばい

マチュア驚き屋のきしだです。 ChatGPTが画像入力に対応するよという話があって、来週くらいに使えるようになるかなーと思ったら、もう使えるようになってました。 で、写真から「カレー食べてる男の人です」くらいを言えるイメージで試してたら、なんかふつうに画面設計やクラス図からコードを書いていてびっくりしてしまいました。

まあ、起きたらこういうのが来てたわけですね。

で、まあ試してみて「あぁ、いままでのマルチモーダルよりちゃんと画像認識してるなー」くらいに思ったわけです。

で、NetBeansでの画面設計を読ませてみたらこう。

こういうコードが生成されました。

import javax.swing.*;
import java.awt.*;

public class SimpleForm {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Sample Form");
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(4, 2, 10, 10));

        // ラベルとテキストフィールドの追加
        frame.add(new JLabel("ID"));
        frame.add(new JTextField(10));

        frame.add(new JLabel("名前"));
        frame.add(new JTextField(10));

        frame.add(new JLabel("種別"));
        JComboBox<String> comboBox = new JComboBox<>();
        comboBox.addItem("男性");
        comboBox.addItem("女性");
        frame.add(comboBox);

        frame.add(new JLabel("金額"));
        frame.add(new JTextField(10));

        // テーブルの追加
        String[] columnNames = {"ID", "名前", "種別", "金額"};
        Object[][] data = {};
        JTable table = new JTable(data, columnNames);
        frame.add(new JScrollPane(table));

        frame.setVisible(true);
    }
}

実行するとこうなっちゃうので残念ですが、これはJavaのレイアウトが難しいので仕方ないと思います。

ボタンがないので「登録ボタンを押したらテーブルに追加されるようにできる?」と聞いたら、ちゃんと登録ボタンを実装してくれました。

レイアウトもGridLayoutからFlowLayoutに変わったので、見やすくなっています。
ソースこちら。
https://gist.github.com/kishida/165c590025b0c8a21ca10c861432c731

ここで、文字がちゃんと読めていること、そしてテキスト入力かドロップダウンかテーブルかというコンポーネントの区別ができているところが驚きです。 種別の選択肢が男性・女性なのは性別と勘違いしてそう。

※ 19:20追記 手書きでもなにか読み取ってくれてます。

追記ここまで

そしてクラス図からのコード

Catのコードはこんな感じになってます。

// ColorPatternを表す簡単な列挙型
enum ColorPattern {
    STRIPED, SPOTTED, SOLID
}

// Mammalを継承したCatクラス
public class Cat extends Mammal {
    private ColorPattern colorPattern;

    public Cat(int height, int weight, ColorPattern colorPattern) {
        super(height, weight);
        this.colorPattern = colorPattern;
    }

    public ColorPattern getColorPattern() {
        return colorPattern;
    }

    public void setColorPattern(ColorPattern colorPattern) {
        this.colorPattern = colorPattern;
    }

    @Override
    public String cry() {
        return "ニャー";
    }
}

ちゃんと「ニャー」を実装してくれるのがいいですね。
※ 18:20追記 イヌは「ワンワン」です。コード全体はこちら。
https://gist.github.com/kishida/fbcb63f3b26552ed7f3daec84ba744bc

で、Bardで試してみたら、Bardでもいけますね。ただ、CatにもDogにもColorPatternとBreedの両方がある。ChatGPTはクラス図どおりでした。

フォームデザインからのコード生成でも、BardではAWTだったり全部テキストフィールドだったり、ちょっと甘い感じ。チャットでの修正もなかなか思い通りにならないことが多いです。
しっかり感はChatGPTですね。まあこちらは課金してるというのもある。

しかし、なんか入力から人間の求める出力を得る操作は、ぜんぶ言語モデルでやれてしまうのではという感じになってきました。
たとえばManmalクラスはabstractになっていますが、クラス図ではそういう指定になっていません。でも「哺乳類ならabstractだろう」という「常識」をもっているので、いい感じにしてくれてるわけですね。 CatのColorPatternには縞、ブチ、単色みたいなのを用意してくれてます。犬の血統にはシェパード、ブルドッグ、ラブラドールを設定してくれています。新しく画面を起こすときには、まずこういったそれっぽい値が入ってるとヤル気がでますね。
こういった部分はルールベースでは無理で、そのため図を書くときに全部指定しないといけないことになっていました。で、結局は作図ツールよりコードのほうが書きやすいということで、コードから図を生成することに・・・

まぁ、言語というのは世界を規定するものでもあり、言語のモデルというのは世界のモデルでもあるので、言語モデルを中心にいろいろやるとなんだかんだいい感じになるのだなーと思いました。