ChatGPTを使って、各種プログラムを書かせてみる

斉藤 厚志Posted by

この記事はGRIPHONE Advent Calendar 2022 23日目の記事です。

サーバーサイドのエンジニアをしている斉藤です。

今回は最近トレンドのチャットAIで、プログラムを書かせようという企画です。

他の人もチャレンジはしているのですが、自分はどこまでのマイナー言語に対応できるかを試してみます。

ChatGPTとは?

OpenAIが開発した、大規模な言語モデルを組み込んだチャットアプリケーション、サービスです。

これは沢山の人がブログ等で記述しているので、多くは記述しません。

画面で試す

試しに、チャット画面で質問してみましょう。

素数って1含まれるっけ?と思いますが、一応回答してくれます。

別な言語でも試してみましょう。


どうやら、わからない言語は同じような答えを返すようです。
APIではどうでしょうか?

実行環境構築

APIを試すためには「アカウトの登録」「API KEYの発行」「実行環境の構築」を行う必要があります。

chatGPTアカウント登録  公式はこちら

API_KEY発行

APIで利用するためのキーを発行します。ワード数により金額が発生するらしいですが、大量にアクセスしなければ問題なさそうです。

KEYを発行した際に、$18まで利用できる権利を得ますが、今回500回ぐらいのリクエストで下記のような使用量になります。

今回はPythonを利用してAPIを叩くので、openaiをインストールします。

インストール方法の詳細はこちら


サンプルライブラリ
色々用途によりサンプルプロラムがありますが「Text to command」を使用します。

サンプル実行

サンプルライブラリよりコピーし、多少修正を加えています。

API_KEY発行したコードは、取得したものをそのまま貼り付ければ動作するはずです。

答えがすぐ回答できる決まりきったものは、max_tokensを少なく抽象的な問題は多くすると期待値になるようです。

import openai
openai.api_key = "API_KEY発行したコード"

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="日本語でOK?",
  temperature=0,
  max_tokens=1000,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0
)
texts = ''.join([choice['text'] for choice in response.choices])
print(texts
>python3 sample.py 
はい、大丈夫です。
>python3 sample.py 
はい、大丈夫です。

ファイル出力

ではどの程度プログラムを理解し、作成してもらえるのでしょうか。

Wikipediaのプログラミング言語一覧から抜き出し、プログラム名だけのファイルを作成します。

今回は331種類のプログラムを生成してみます。


先ほどのサンプルプログラムに手を加え、該当言語で生成するように質問して結果をファイルにします。

import os
import openai
openai.api_key = 'OPENAI_API_KEY'

# プログラムのファイルリストを開く
f = open('program_list.txt', 'r')
datalist = f.readlines()

num = 0
for data in datalist:
  prompt = "100までの素数を求めるプログラムを書け。言語は" + data + "でお願いします"
  print(prompt)
  response = openai.Completion.create(
    model='text-davinci-003',
    prompt=prompt,
    temperature=0,
    max_tokens=1000,
    top_p=1.0,
    frequency_penalty=0.0,
    presence_penalty=0.0
  )
  texts = ''.join([choice['text'] for choice in response.choices])
  num += 1
  w = open('program_' + str(num) +'.txt', 'w')
  w.write(texts)
  w.close()
f.close()

ファイル比較

会話型ではわからない問題は同様のプログラムを返していました。

APIではどうでしょうか。同一だったファイルに対して、出力するようにプログラムを書き、スプレットシート上でプログラム名と番号を紐付けて表示させてみましょう。

単純に同一のファイルだった物に対して、結果を出力するようにしスプレットシートで加工したものが下記の結果です。

テスト実行

実際に出力されたプログラムの動作結果は、どのようなものでしょうか。

プログラムをWEB上で実行できるサイトがありますので、そこで確認してみましょう。

今回利用したのは「Coding Ground at tutorialspoint 」です。

メジャーな言語はほとんど大丈夫そうです。一部コメントだったり、不要な行を削除することにより想定の結果が返ってきます。

コードエラーになったケース

まとめ

数種類の言語しか記述できないと最初は思っていましたが、かなり沢山のプログラムを書くことができました。

結果が的確であるならば、プログラムの学習をChatGPTを利用して学ぶことはできそうです。

また、プロジェクトの仕様やソースを学習させれば、問題に対して的確な回答をくれるかもしれません。

今は一般的な学習データしかありませんが、会社独自の学習データがあれば、各会社ごとに特化したツールとしても利用できそうです。