Microsoft Ignite 2021の基調講演で発表された「Azure OpenAI Service」。公式ページにある通りOpenAI でOpenAI APIを発行してもらったのでExpamplesにある49個のアプリから「Python bug fixer」をPythonから実行して試行錯誤します。
OpenAIのExpamplesにあるPython bug fixerとは
公式の説明では、「Find and fix bugs in source code.」とあり、“Pythonのソースコードにあるバグを見つけて直してくれるアプリ”となっております。
公式のタグでは「Code」と「Generation」の2つが付与されています。
プログラムを見るとエンジンは「Davinci-codex」となっており、Codex系のエンジンであることが確認できます。
サンプルコードでは最初に「Fix bugs in the below function(下記機能のバグ修正)」となっており、### と組み合わせることでバグがあるソースを指定しているようです。
早速使ってみた
公式にあるコードを参考に、好きな文章を入れられるように str という変数に会話を入れて実行できるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
Python Code ‘’’ import os import openai openai.api_key = os.getenv("OPENAI_API_KEY") str = """##### Fix bugs in the below function ### Buggy Python import Random a = random.randint(1,12) b = random.randint(1,12) for i in range(10): question = "What is "+a+" x "+b+"? " answer = input(question) if answer = a*b print (Well done!) else: print("No.") ### Fixed Python""" response = openai.Completion.create( engine="davinci-codex", prompt=str, temperature=0, max_tokens=182, top_p=1.0, frequency_penalty=0.0, presence_penalty=0.0, stop=["###"] ) print(response["choices"][0]["text"]) ‘’’ |
自動的にバグが修正される
実行すると
「import random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
question = “What is “+str(a)+” x “+str(b)+”? “
answer = input(question)
if answer == a*b:
print(“Well done!”)
else:
print(“No.”)
# Exercise
#
# * Write a program that asks the user to enter a number and then prints out a list of all the divisors of that number.
# * Write a program that asks the user for a number and then prints out a list of all the divisors of that number.
# * Write a program that asks the user for two numbers and then prints out a list of all the divisors」
と出力されました。
見比べると
- importしているモジュール名の大文字小文字の綴り間違い
- 2つの数字a, bを文字列と結合するときに文字列に変換
- ifの比較で = となっている部分を == に修正
- if の末尾の「:」が欠けているのを補填
- Well done! が文字列なので“ 前後に抜けている‘’ を追加
といったことが行われています。
import random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
question = “What is “+str(a)+” x “+str(b)+”? “
answer = input(question)
if answer == a*b:
print(“Well done!”)
else:
print(“No.”)
練習したほうが良い内容を教えてくれる
Bug Fixされたプログラムの後にExerciseが表示され、使用したプログラムと似たようプログラムが練習問題として表示されます。単純に「バグがあり自動的にFixします」ではなく、バグを起こさないためにも似たようなプログラムを書く練習をしたほうが良いよと教えてくれる親切設定となっており、トレーニングとしても活用できるようになっています。
残念ながら、このお題に対する回答は表示されませんが、Codexと組み合わせることで例題の回答自体をOpenAIで生成することができます。
OpenAIの驚異
この「Python Bug Fixer」は見ての通り非プログラマーには関係ないものだと思いますが、プログラマーにとってストレスであり、時間がかかるBugを見つけてくれて修正までしてくれるようになります。通常であればBugが発生しづらいように丁寧にプログラミングを行い、実行してエラーがあると修正してということを続けて1つのプログラムを作るのに対して、本機能を活用してイメージしているままプログラムを一気に作って「Python Bug Fixer」を使ってバグを修正することで、短時間に生産性高くプログラムを作ることが出来ます。
どんなときに使えるのか?
プログラムを作っているほぼすべての会社で活用することが出来ます。複雑なプログラムの修正を行うことは難しいですが、人が発生させやすい誤字脱字といったミスを防ぐことが出来ます。Visual Studio Codeといったコードエディタと組み合わせることで大きな効果が期待できます。
またCodexによるプログラムの自動生成と組み合わせることで、スキルが高くないエンジニアを成長させながら、ストレスが多いバグ対応の工数を減らすという、どこでも欲しくなる機能を実現することが出来ます。