GPT-3 をアシスタントに迎え入れました

こんにちは！
TLB Enjoy Developers Advent Calendar が始まりました。
このアドベントカレンダーは、TLB の Developers が Enjoy しながら記事を書いていくという非常にふわっとしたカレンダーとなっています。
テーマもクオリティも特に制限はありませんので、みなさん楽しんで記事を書いていきましょう！

さて、初日となる今回の記事では、GPT-3 という超高性能な言語AI を使ってエンジニアのいろいろな作業に役立てる方法を探っていきたいと思います。


:::note info
この記事は [TLB Enjoy Developers Advent Calendar 2022](https://qiita.com/advent-calendar/2022/tlb-enjoy) の1日目の記事です。
:::


# GPT-3
あらためて、今回使う GPT-3 について軽く説明します。
GPT-3 は OpenAI が発表した 1750億ものパラメータをもつ自然言語モデルで、汎用的なタスクを高精度でこなすことができます。
人間が書いたものとほとんど見分けがつかないような自然な文章を生成することができ、Few Shot や Zero Shot という方法で様々な種類の問題に対していい感じの答えを返してくれます。

GPT-3 で遊んでみる方法ですが、今回は OpenAI が提供している playground を使ってみます。
[playground のページ](https://beta.openai.com/playground) にアクセスし、OpenAI アカウントでログインするとすぐに GPT-3 を体験できます。
エディタ部分にテキストを入力し、 submit ボタンを押すと GPT-3 がエディタ部分に続きを書いていってくれます。
緑でハイライトされている部分が、GPT-3 が生成した文章です。

GPT-3 には 4つの主要なモデルがあり、それぞれに特徴があります。
その中で davinci と呼ばれるものがもっとも賢く、いろんな種類のタスクをこなすことができるみたいです。
最初の色々試してみる段階ではこの davinci というモデルを使うことが推奨されています。
ちょうどつい先日、davinci モデルの新しいバージョン「text-davinci-003」が公開されたので、今回はこちらを使用していきます。


# 早速試してみる

それでは、早速いくつかのタスクを試してみて、GPT-3 にお任せできる部分を探っていきます。

## 1. コメントからコードを書いてもらう

手始めに、コメントからコードを書いてもらいましょう。
AI にコーディングしてもらうといえば GitHub Copilot などが思い浮かびますが、汎用AI である GPT-3 の力はどんなもんでしょうか。
なんか適当なコメントを渡してみます。

![コメントからコードを書いてもらう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229614/d33c9780-739f-54ae-0de3-411cf516434e.png)

なかなかいい感じのコードを書いてくれていますね。
あと頼んでもいないのに何故かテストまで書いてくれました。
汎用AI の Zero Shot でこのクオリティとは、、、想像以上です。

<details>
<summary>テキスト</summary>

```text:プロンプト
```python
# 記事のリストを受け取り、ユニークなカテゴリーのリストを返す
```

````text:結果
```python
# 記事のリストを受け取り、ユニークなカテゴリーのリストを返す
def get_categories(articles):
    categories = []
    for article in articles:
        if article['category'] not in categories:
            categories.append(article['category'])
    return categories

# テスト
articles = [
    {'title': 'Python', 'category': 'Programming'},
    {'title': 'Java', 'category': 'Programming'},
    {'title': 'Football', 'category': 'Sports'},
    {'title': 'Tennis', 'category': 'Sports'},
]

print(get_categories(articles)) #=> ['Programming', 'Sports']
```
````
</details>


## 2. 英語に翻訳してもらう

リリースノートなど、英語で文章を書く必要があるときがあります。
これも GPT-3くんに頼んでみます。
例えば適当な変更点を日本語で書いて、

![英語に翻訳してもらう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229614/624c7db0-ab43-fa54-37b9-51a26c52942d.png)

うん、普通にいい感じですね。
まあこんなことは Google翻訳とか DeepL を使っても良いのですが、GPT-3 くんに頼めば単なる直訳にとどまらず文脈を考慮した適切な英文に変換してくれるみたいなことがありそうです。

<details>
<summary>テキスト</summary>

```text:プロンプト
v1.2.2 の変更点
・SPサイズで一部の表示が崩れるバグを修正しました。
・画面を開いた状態で長時間放置した時に発生するバグを修正しました。
・その他、依存パッケージのバージョンアップに対応しました。

を英語に翻訳
```

```text:結果
v1.2.2 の変更点
・SPサイズで一部の表示が崩れるバグを修正しました。
・画面を開いた状態で長時間放置した時に発生するバグを修正しました。
・その他、依存パッケージのバージョンアップに対応しました。

を英語に翻訳

・Fixed a bug causing some displays to break on SP size.
・Fixed a bug that occurs when the screen is left open for a long time.
・Other changes include support for upgrading dependent packages.
```
</details>


## 3. 良さげなフォントを教えてもらう

個人でアプリとかを作っていて、なかなか良いデザインが思いつかない時とかありますよね。
こういうのも GPT-3 先生に教えてもらえるのではないでしょうか。
例えばなんか良さげなフォントを選んでもらいましょう。

![良さげなフォントを教えてもらう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229614/5a2a123c-01c5-1963-1f54-8e27e158e4ea.png)

たくさん選択肢を出してくれましたね。
ちょっと調べてみた感じ、存在しなさそうなものとか微妙なものもありますが、確かに良さそうなものもありました。
別に気に入らなければいくらでも再生成できるので、これは重宝するんじゃないでしょうか。

<details>
<summary>テキスト</summary>

```text:プロンプト
グラフィックが壮大な3Dアクションゲームに似合うかっこいいフォント
```

```text:結果
グラフィックが壮大な3Dアクションゲームに似合うかっこいいフォント

・Monserrat
・Roboto
・Open Sans
・Playfair Display
・Barlow
・Exo
・Quicksand
・Oswald
・Varela Round
・Raleway
```
</details>


## 業務連絡の文言を考えてもらう

エンジニアの業務といえば、大事なのがやはり進捗報告です。
しかし、進捗があまり芳しくない時にそれを報告をするというのは精神的にしんどいものです。
こんな時、文面だけでも GPT-3 さんに考えてもらえれば大分気持ちも軽くなるのではないでしょうか。やってみます。

![業務連絡の文言を考えてもらう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229614/de5028fc-abd3-a98e-a67f-73833cfd047d.png)

文体とかを整えるために 2つほど例も一緒に渡しました。
まあこういうのは状況にもよって変わってくるので、これをそのまま使うという感じではないと思いますが、いくつか使えそうなフレーズも出てきていますね。
さらに生成を続けて使えるフレーズをストックしていけば、もういくらでも進捗報告できちゃいますね！ ~~（まずは進捗を出しましょう）~~

<details>
<summary>テキスト</summary>

```text:プロンプト
エンジニアの定例会で進捗が予定より遅れていることを報告する時に使える定型文

「すみません、先週は差し込みのタスクが入ってしまった影響でこちらの進捗が少し遅れています。今週中には完了できると思います。」
「すみません、いま想定外のところで少し詰まっており、期日までに完了できなさそうです。期日をあと2日伸ばしていただけませんでしょうか。」
「
```

```text:結果
エンジニアの定例会で進捗が予定より遅れていることを報告する時に使える定型文

「すみません、先週は差し込みのタスクが入ってしまった影響でこちらの進捗が少し遅れています。今週中には完了できると思います。」
「すみません、いま想定外のところで少し詰まっており、期日までに完了できなさそうです。期日をあと2日伸ばしていただけませんでしょうか。」
「すみません、先週から予定よりも進捗が遅れてしまっています。残りのタスクは今週中に完了できると思いますが、もし問題が起きた場合は、すぐに通知します。」
「すみません、先週は予定よりも少し遅れてしまっております。今後も状況によっては、期日までに完了できない場合があります。今後も関係者の皆さんには、事態の変化を通知していく所存です。」
「すみません、先週の完了予定タスクが完了しなかったため、現在進捗が少し遅れています。今週はそれを取り戻すため、今日からリスケージュールを組んでいます。」
「すみません、先週は予定よりも少し遅れてしまいました。今後も今回と同様の状況にならないように努力していきますので、ご容赦いただけますと幸いです。」

```
</details>

# 最後に

というわけで、高性能な汎用言語AI を使っていろいろと遊んでみました。
基本的には文章の続きを書いてくれる AI なのですが、汎用的なタスクをこなせるというだけあって、アイデア次第で本当にいろいろな使い方ができるなと感じました。
今回はちょっと難しくてできなかったのですが、Few Shot を使えばさらに GPT-3 の能力を引き出すことができるのかなと思っています。
Temperature などのパラメータもいろいろ設定する項目があり、まだまだカスタマイズする余地がありますね。
まあこの辺はこだわり出すと無限に遊べてしまうので、また時間がある時にでも色々と試してみようと思います。

また数ヶ月後、早ければ今月にはさらに高性能になった新しいモデル **「GPT-4」** が発表されるということで、こちらも楽しみですね。

最後に、今回アドベントカレンダーの1日目の記事なわけですが、他にはどんな記事を書くのが良いかまよってしまいますので、これも GPT-3 に聞いてみたいと思います。

![Qiitaに書く記事のテーマを考えてもらう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229614/e7e7f00a-e2fc-8a32-517e-f8aa092e253a.png)

なんかよくわからないものもありますが、まだ書く記事のテーマが決まっていない方は参考にしてみてはいかがでしょうか？


明日は [@kdr250](https://qiita.com/kdr250) さんの記事です。お楽しみに！