この記事は、以下のアドベントカレンダー12/11になります。
はじめに
最近話題になっているAIで何かを生成する技術。
私のお仕事の一部であるプログラミングについても「AI Programmer」というサービスが話題になっているので試してました。
AI Programmerとは
有限会社ASRealが提供している日本語で指示した内容のコードを自動生成してくれるサービス。
十数種類のプログラム言語が選択できる。
バックグラウンドではOpenAIが発表した深層学習を用いた言語モデルGPT-3を利用している。
使い方
サイトから言語を選択して処理内容を入力するだけ。
こちらはサイトに記載されていたサンプルを実行した結果です。
イメージしていた結果とは異なりました。
データベースにはアクセスしていませんね。。。
何パターンか試してみます。
実行例
今回は私がメインで利用しているpythonについてやってみます。
日本語の文章が指示内容で、その下が生成されたコードです。
計算する
1足す1
1足す1
1+1
引数を2乗する
引数を2乗する
def square(x):
return x * x
文字列
文字列の長さを求める
文字列の長さを求める
len("文字列の長さを求める")
・・・まあ間違ってはいない。
変数の長さを求める
len(x)
「変数」と指示してあげると良いらしい。
置換
文字列のaをbに置換する
"a".replace("a", "b")
文字列という単語は微妙らしい(2回目)
変数xのaをbに置換する
x = x.replace('a', 'b')
良い感じで生成されました。
配列
繰り返し
配列を繰り返す
for i in range(len(arr)):
print(arr[i])
これも間違ってはいないけど。
配列から1つずつ表示する
for x in array:
print(x)
重複排除
配列から重複を取り除く
arr = [1, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 9]
arr = list(set(arr))
急に実際に動くサンプルコードの形ででてきました。
ソート
配列を昇順に並び替える
arr.sort()
そういえばソートのアルゴリズムっていろいろあったなと思い出したので
指定してみました。
クイックソート(https://medium-company.com/%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%BD%E3%83%BC%E3%83%88/)
配列をクイックソートで並び替える
arr = [5, 2, 4, 1, 3]
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[int(len(arr) / 2)]
less_arr, equal_arr, greater_arr = [], [], []
for i in arr:
if i < pivot:
less_arr.append(i)
elif i > pivot:
greater_arr.append(i)
else:
equal_arr.append(i)
return quick_sort(less_arr) + equal_arr + quick_sort(greater_arr)
arr = quick_sort(arr)
おぉ、、、ちゃんとでましたね。最近はsortメソッドしか使っていなかったので懐かしさがあります。
ネットワーク装置を操作する
ネットワーク系エンジニアということでネットワーク装置の操作も試してみます。
装置にログインする
log_in_to_device()
知らないメソッドが出てきました。
検索してみましたがヒットしないので、存在しないようです。
色々とワードを変えて試したところそれっぽいのができました。
ネットワーク装置にtelnet接続する
import telnetlib
HOST = "192.168.1.1"
user = "admin"
password = "admin"
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("enable\n")
tn.write("conf t\n")
tn.write("int loop 0\n")
tn.write("ip address 1.1.1.1 255.255.255.0\n")
tn.write("end\n")
tn.write("exit\n")
print tn.read_all()
ciscoっぽい雰囲気ですね。しかもループバックIPまで設定してくれてます。
まとめ
AI Programmerを試してみました。
簡単な処理は単語数も少なく曖昧さが出てしまうため微妙な結果が出てくることが多いので、
明確な表現、単語にするのが良いようです。
具体的な処理や複雑な処理などを生成するのに向いていると感じました。
また、上記のクイックソートのようにアルゴリズムや名前が決まっている処理も得意なようです。
狙った結果が出てくるよう入力を思考錯誤するところは、普段の検索と同じだなと感じました。