Microsoft Ignite 2021の基調講演で発表された「Azure OpenAI Service」。公式ページにある通りOpenAIOpenAIでOpenAI APIを発行してもらったのでExpamplesにある49個のアプリから「JavaScript one line function」をPythonから実行して試行錯誤します。
OpenAIのExpamplesにあるJavaScript one line functionとは
公式の説明では「Turn a JavaScript function into a one liner.」とあり、“JavaScriptの関数をワンライナーにする。”となります。
公式のタグでは「Code」「Transformation」「Translation」の3つが付与されています。
プログラムを見るとエンジンは「Davinci-codex」となっており、Codex系のエンジンであることが確認できます。
サンプルコードでは1行目に「Use list comprehension to convert this into one line of JavaScript:(リスト内包を利用して、これを1行のJavaScriptに変換する。)」となっており、いきなりトピックから入力します。
リスト内包表記とは
[式 for 変数 in イテラブルオブジェクト]
のように表されるリスト中にfor文が組み込まれた書式となります。
早速使ってみた
公式にあるコードを参考に、好きな文章を入れられるように 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 |
Python Code ‘’’ import os import openai openai.api_key = os.getenv("OPENAI_API_KEY") str = """Use list comprehension to convert this into one line of JavaScript: dogs.forEach((dog) => { car.push(dog); }); JavaScript one line version:""" response = openai.Completion.create( engine="davinci-codex", prompt=str, temperature=0, max_tokens=60, top_p=1.0, frequency_penalty=0.0, presence_penalty=0.0, stop=[";"] ) print(response["choices"][0]["text"]) ‘’’ |
JavaScriptのリスト内包表記を1行に要約してくれる
サンプルでは
「
dogs.forEach((dog) => {
car.push(dog);
});
」
を1行に変換します。
実行すると「dogs.forEach(dog => car.push(dog))」と返ってきました。
他にも試してみる
‘‘‘
var arr = [1,2,3,4,5]
for (var i = 0; i < arr.length; i++) {
arr[i] ⁺= i;
}
’’’
を実行すると「arr.forEach(function(item, index) {item += index}」と返ってきました。
どんなときに使えるのか?
わざわざ1行にしなければいけないことも少ないとは思うので、ここで使えるというポイントは不明ですが、最初に宣言した通りの変換を行ってくれました。
Codexはgithubにある大量のコードデータを教師データとしており、例以外の様々な変換や補填などもしてくれると思われます。Codexが浸透してくると人がプログラムを書く意味が大きく変わってきそうですね。