見出し画像

ChatGPTのAPIを利用して、プログラムを自動修復するWolverineを試してみましょう!

今日は、ChatGPTのAPIを利用して、プログラムのバグを自動修復するWolverineというプログラムの紹介となります。

今回は、下記のサイトを参考にさせて頂いております。


今回、利用したコードは以下となります。

python -m venv venv
venv\Scripts\activate
git clone https://github.com/biobootloader/wolverine.git
cd wolverine
pip install -r requirements.txt


次に、wolverineフォルダの下に、openai_key.txtというファイルを作成し、OpenAIのAPIキーをそのままコピーします。


今回の修正プログラム例のbuggy_script.pyは以下のコードとなります。下記のコードは、足し算、掛け算、引き算を引数を受け取って計算します。下記のコードでは、subtractの関数が無かったり、calculate関数のreturnがresultであるべきところ、resとなっております。

import sys
import fire

def add_numbers(a, b):
    return a + b

def multiply_numbers(a, b):
    return a * b

def divide_numbers(a, b):
    return a / b


def calculate(operation, num1, num2):
    if operation == "add":
        result = add_numbers(num1, num2)
    elif operation == "subtract":
        result = subtract_numbers(num1, num2)
    elif operation == "multiply":
        result = multiply_numbers(num1, num2)
    elif operation == "divide":
        result = divide_numbers(num1, num2)
    else:
        print("Invalid operation")

    return res


if __name__ == "__main__":
    fire.Fire(calculate)


上記コードを実行すると、エラーと表示されます。そこで、wolverine.pyを利用してbuggy_script.pyを修正してもらいます。


さて、実行ですが、gpt-4が使われますので、API料金には気をつけましょう。使い方は、下記のようにwolverine.pyの次に実行したいbuggy_script.pyを記載致します。

python wolverine.py buggy_script.py "subtract" 20 3

上記コードを利用すると、下記のようにbuggy_script.pyが動かない理由を説明してくれます。subtractが無かったり、return値としてreではなくresultにしましょうと説明しています。


buggy_script.pyが動かない理由


実行が終わると、同名のファイル(buggy_script.py)が以下のようにsubtract関数が追加されていたり、return値がresultになっていたり修正が終わった状態になっています。


import sys
import fire

def add_numbers(a, b):
    return a + b

def subtract_numbers(a, b):
    return a - b

def multiply_numbers(a, b):
    return a * b



def divide_numbers(a, b):
    return a / b


def calculate(operation, num1, num2):
    if operation == 'add':
        result = add_numbers(num1, num2)
    elif operation == "subtract":
        result = subtract_numbers(num1, num2)


    elif operation == 'multiply':
        result = multiply_numbers(num1, num2)
    elif operation == 'divide':
        result = divide_numbers(num1, num2)
    else:
        print("Invalid operation")
        return result




if __name__ == "__main__":
    fire.Fire(calculate)


今回は、簡単な例を示しましたが、もう少し複雑なプログラムの場合はどうなるのかとか、単一のプログラムじゃない場合はどうなるのかは気になるところです。ただ、ChatGPTが浸透していく時代において、今後のプログラムの自動修復の方向性を示してはいるのではないかと思います。

この記事が気に入ったらサポートをしてみませんか?