必要かどうかで言えば人によるとはなるのですが、特にプログラムを生成してもらうような場面では明確な差を感じることが多いです。たとえば、以下のプロンプトをGPT-3.5に与えてみます。ここで、元のCコードにはミスが二つ(intをinと書き間違えていることと、printfに渡す引数がa, bとなるべきところがa, aとなっている)あります。
(ちなみにこれは私が実際にプロンプトを入力する際にミスったものです)
Translate the following C code into Java:
void s(int *a, int* b) { int t = *a; *a = *b; *b = t; }
int main(void) {
in a = 50, b = 100;
s(&a, &b);
printf("a = %d, b = %d¥n", a, a);
return 0;
}
この例でGPT-3.5は「何も言わずに」間違ったコードを受理して変換します(2023年6月9日11時現在)。
たとえば、以下のような具合です。
Here's the translation of the given C code into Java:
```java
public class Main {
public static void s(int[] a, int[] b) {
int t = a[0];
a[0] = b[0];
b[0] = t;
}
public static void main(String[] args) {
int a = 50, b = 100;
int[] arrA = {a};
int[] arrB = {b};
s(arrA, arrB);
a = arrA[0];
b = arrB[0];
System.out.printf("a = %d, b = %d%n", a, b);
}
}
```
In Java, you need to define a class and put the code inside a method. (略)
変換結果は質問のたびに変わりますが、5回試行した中の全てで「元のコードのミスを見落として」いました。
GPT-4に同じプロンプトを与えると、次のように元のコードのミスを指摘してくれます。
Here is the translation of your C code into Java. Java does not support pass-by-reference directly, so I'm using an array to achieve similar behavior. Also, note that the "main" function in Java is quite different from that in C:
```java
public class Main {
public static void s(int[] a, int[] b) {
int t = a[0];
a[0] = b[0];
b[0] = t;
}
public static void main(String[] args) {
int[] a = {50};
int[] b = {100};
s(a, b);
System.out.println("a = " + a[0] + ", b = " + b[0]);
}
}
```
Please, notice that there was a mistake in your original C code: you printed the value of "a" twice, instead of printing both "a" and "b". The translated Java code fixes this and correctly prints the values of both "a" and "b".
5回試行した中の全てで
int -> inのtypo
a, b となるべきところがa, aとなっている
のどちらか片方のミスは指摘してくれました(2023年6月9日午前11時現在)。
このような「質問に何らかのおかしな点がある場合に(比較的)指摘してくれる」のはプログラム生成に限った話ではなく、色々なプロンプトで見られるGPT-3.5とGPT-4の差です。
わかりやすく言えば「GPT-4の方がGPT-3.5より圧倒的に頭が良い(注意力も高い)」し「指示に的確に従う」という感じでしょうか。
すでに課金して使い倒している人間の言うことなので話半分でいいですが、GPT-4に一度慣れるとGPT-3.5の性能の低さに耐えられなくなる、というのが正直な実感です(タスクによっては出力速度などを考えてGPT-3.5で十分というケースも多いですが)。
この性能差に価値を見出すかどうかは人それぞれですが、もし「ChatGPTの可能性と限界」について論じるのだったら、GPT-4を試さないといけない(GPT-3.5の問題の多くがかなり改善されているのと、GPT-4でしか効かないタイプの命令があるため)レベルでの圧倒的な性能差があるのは確かです。