ChatGPTのプロンプトデザイン、そして業務利用とその課題点について

![Pasted image 20230319215417.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/d955f9d8-420b-cfd1-53f4-bc51e01a495a.png)

みなさんChatGPT使ってますかぁぁぁぁぁぁぁぁ！！！！

今この世界で最もアツいツール。
それは、そう、当然「**ChatGPT**」

ご存じ世界最強のChatBotです。

ChatGPTとは、見たいなことはググればいくらでも見つかるのでここでは語りません。

この記事では具体的なChatGPTの利用方法と「業務利用」におけるその課題点について語っていきます。

## GPTの利用方法

### ChatGPT

ChatGPTは以下から利用できます。
- https://chat.openai.com/

![Pasted image 20230319215417.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/d955f9d8-420b-cfd1-53f4-bc51e01a495a.png)

GPT-3.5と呼ばれる旧来のモデルでも相当ヤバかったですが、GPT-4になってからは手が付けられない化け物になっていて、Twitterなど界隈ではとても盛り上がっていますね。

GPT-4を利用したチャットは月20$の「**ChatGPT Plus**」であればお試しできるのでぜひ。
使ってみれば分かりますが、**激安**です。

更に、**出力は（条件付きで）全て商用利用可能**ですのでご安心ください。
ただし、大事な注意点は後述します。

### OpenAI API

OpenAIはChatGPTの他にREST APIのインターフェースも用意しています。

PythonやNode.jsのSDKも用意されており、GPTを利用したアプリケーションなどを作成するときにとても便利に利用できますが、料金は従量課金です。
以下から利用可能です
- https://platform.openai.com/

このほか、Chatの他、DALL-Eなどを利用した画像生成も利用可能になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/23c78569-6153-34fe-a328-1f18e4846d41.png)

## 具体的なChatGPTの活用方法

AIとチャットができる、といっても具体的にどんな活用方法があるのでしょうか。

「なんでもできる」の一言に尽きるんですが、これでは分かりにくいと思いますので、いくつか例をあげます

### 質問を投げる

あなたはネットに慣れ親しんでいませんが、日常の面白いワンシーンをインスタグラムで投稿すると知らん人から突然「草生えるわ。」と言われたとしましょう。
**まっっっっっっったく意味がわかりませんね。**
こういうときにChatGPTを利用してみましょう。

> 「草生える」とはどういう意味ですか？

するとChatGPTはこんな答えを返してくれました。

> 「草生える」とは、日本のインターネットスラングで、主に面白いことや笑いを表す言葉です。この表現は、元々は「笑う」を意味する「w」（ダブル）を連続して使った「wwww」が、草が生えているように見えることから来ています。例えば、何か面白い話やジョークに対して、人々は「草」や「草生える」などとコメントして、それが面白かったことを示します。

おぉ。なるほど。
「草生える」とは面白いことに対して返答する言葉なんですね。
IQが上がった気がします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/5c2803f1-5a3c-ec41-a0bb-d4a04d69a7ba.png)

### 英語学習

さっきのは流石に冗談ですが、こんな利用方法もあります。

僕は英語弱者なので、このツイートを見たときには衝撃を受けました。

https://twitter.com/pisiinu/status/1636618186610315269?s=20

早速やってみましょう。

> あなたは私専属の英語教師です。
これから何度も会話を続けて、日常会話に困らない程度に英語が使いこなせるようにしてください。
ただし制約条件があります。
・私の英語力は中学生レベルです。
・私は言われたことをすぐに覚えられませんが、少しずつ成長していきます。
・私は飽きやすい人間です。楽しく勉強できるように英語を教えてください。
・私はあなたのことを先生と呼びますが、あなたは私をのこのこさんと呼んでください。
よろしくお願いします。

するとこんな返答が…

>のこのこさん、こんにちは！私はあなた専属の英語教師、ChatGPTです。中学生レベルの英語力から始めて、日常会話に困らないレベルまで上達できるようにサポートします。楽しく学べるように工夫しながら、少しずつ成長していくことを目指しましょう！
まずは、簡単な自己紹介を英語でやってみましょう。以下のフレーズを使って自己紹介してみてください。
My name is のこのこ.
I am from Japan.
I like (趣味や好きなものを入れてください).
この3つのフレーズを使って、自己紹介文を作成してみてください。例えば、「I like soccer」や「I like reading books」など、好きなものを入れてみてください。

おぉ…専属の家庭教師や…
僕はこんな返事をしてみました。

>my name is nokonoko.
I am from japan.
I like programming.

すると先生はこんな反応を。

>Great job, のこのこさん！あなたの自己紹介はとても良かったです。これからもっと英語を練習して、上達していきましょう。
プログラミングがお好きとのことなので、プログラミングに関する英語のフレーズをいくつか紹介します。これらのフレーズを覚えておくと、プログラミングに関する英語の会話がしやすくなります。
I enjoy coding in (プログラミング言語) - （例：I enjoy coding in Python.）
I am working on a (プロジェクトの種類) project. - （例：I am working on a web development project.）
I am learning about (学びたいトピックや技術) - （例：I am learning about machine learning.）
この3つのフレーズを使って、プログラミングに関する英語の文章を作成してみてください。プログラミング言語やプロジェクトの種類、学びたいトピックや技術を入れて、自分に合った文章を作ってみましょう。

なんやこれ自己肯定感爆上がりか？？？

めちゃ気持ち良く英語の学習ができますね。

これなら続けれそうです。

### プログラミング

ChatGPTはプログラミングも得意です。

例えば、僕は**Pythonを使い、GISや3Dデータを取り扱うエンジニア**なので、以下のような質問を投げてみました。

---

・のこのこ: 

```Python
v1 = np.array(
    [
        [0, 0, 0],
        [1, 0, 0],
        [0, 1, 0],
        [1, 1, 0],
    ]
)
```
と
```Python
t1 = np.array(
    [
        [0, 1, 2],
        [1, 3, 2],
    ]
)
```
から
```Python
coord = np.array(
    [
        [
            [0, 0, 0],
            [1, 0, 0],
            [0, 1, 0],
        ],
        [
            [1, 0, 0],
            [1, 1, 0],
            [0, 1, 0],
        ],
    ]
)
```
を生成する関数を書いて

---

これはつまり、三角形の頂点と、三角形の面を示す頂点のインデックスを渡すと、三角形を示す頂点のリストを返してくれ、という命令なのですが、以下のような返答でした。

---

・ChatGPT: 

以下は、与えられた v1 と t1 から coord を生成する Python の関数の例です。この関数は、NumPy ライブラリを使用します。

```python
import numpy as np

def generate_coord(v1, t1):
    coord = np.zeros((len(t1), 3, 3), dtype=np.int32)
    for i in range(len(t1)):
        coord[i] = v1[t1[i]]
    return coord
```

この関数では、まず coord をゼロで初期化し、その後 t1 に含まれる各三角形の頂点座標を v1 から取得し、coord に格納しています。

この関数を使って coord を生成するには、以下のようにします。

```python
v1 = np.array(
    [
        [0, 0, 0],
        [1, 0, 0],
        [0, 1, 0],
        [1, 1, 0],
    ]
)

t1 = np.array(
    [
        [0, 1, 2],
        [1, 3, 2],
    ]
)

coord = generate_coord(v1, t1)
print(coord)
```

このコードを実行すると、以下のように出力されます。

```txt
[[[0 0 0]
  [1 0 0]
  [0 1 0]]

 [[1 0 0]
  [1 1 0]
  [0 1 0]]]
```

---

おいおいおい。
パーフェクトやんけ…

あかんてこれぇ…

### ブログの執筆

先日こんな記事を書いたんですが、こちらの記事、**大部分がChatGPTによって生成**されています。

- [PythonとShapelyを利用した地理空間情報入門](https://qiita.com/nokonoko_1203/items/91b8dac5557a8239c799)

記事中のコードについては最初に出力された時点ではいくつかエラーが起きていたのですが、**エラー丸ごと投げ返すと綺麗に修正**してくれました。

上記の記事は全てのコードの動作確認をしていますが、自分で修正することなく、全てのコードをChatGPTが修正してくれました。

恐ろしい…

## 一歩進んだ活用方法（プロンプトデザイン）

今まで説明してきたように、**適当に投げてもいい感じの返答を返してくれるのがChatGPTのいいところ**ですが、上のブログのように、多少込み入った内容だと**そのまま利用するのは難しい場合がほとんど**です。

なので、以下のような記事を参考に僕はこんな利用をしてみました。
（このような活用の仕方を「**プロンプトデザイン**」と呼ぶようです）

- [ChatGPTのプロンプトデザインって何だ？](http://soysoftware.sakura.ne.jp/archives/3691)
- [【ゴールシークプロンプトとは？なに？】ChatGPTのPromptDesignシュンスケさんがなぜ？注目されるのか？](https://note.com/daichi_mu/n/n50e7a8370fb7)

初めに、ChatGPTへ以下のような質問を投げます。

```txt
私のプロンプトエンジニアになって欲しい。あなたの目標は、私のニーズに合わせて最高のプロンプトを作るのを手伝ってもらうことです。そのプロンプトは、ChatGPTであなたが使用するのに使われます。

次のプロセスに従ってください。

1. あなたの最初の応答は、プロンプトが何についてであるべきかを私に尋ねることです。
私は私の答えを提供しますが、次のステップを経て、継続的な反復を通じて改善する必要があります。

2. 私の入力に基づいて、2つのセクションを生成します。
a) 改訂されたプロンプト（書き直されたプロンプトを提供します。明確、簡潔で、簡単にあなたが理解できるものにする必要があります）
b) 提案（プロンプトを改善するためにプロンプトを含めるべき詳細について提案する）
c) 質問（プロンプトを改善するために私から必要な追加情報について、関連する質問をしてくだい）

3. この反復プロセスは、私があなたに追加情報を提供し、あなたが改訂されたプロンプトセクションのプロンプトを更新し、私が完了したというまで続けます。

まずは、「PythonとShapelyでGIS入門」という記事のブログを作成するためのプロンプトを生成してください。
```

![Pasted image 20230319161802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/ce242c9a-31b3-6151-4a68-f29157e2275d.png)

すると、このようにChatGPTに質問するための、質問内容を一緒に考えてくれます。
（GPT-3.5だとあまりうまくいかないかもしれませんので、GPT-4をオススメします）

これを繰り返し、最終的には以下のような質問事項を出力してくれました。

```txt
[コンテンツの種類]
このコンテンツはブログの文章です。

[TOPIC] PythonとShapelyを利用した地理空間情報
[LEVEL]入門
[DESCRIPTION] {GISの基本的な概念である座標系、投影法、GISデータ形式などを解説し、PythonとShapelyを使用してGISデータの作成、編集、および可視化を実行する方法を示す必要があります
[LANGUAGE] Python
[TARGET AUDIENCE] 初心者

[実行コマンド]
「{TOPIC}に関する{LEVEL}チュートリアルを作成してください。このチュートリアルは、{DESCRIPTION}。また、このチュートリアルは、{LANGUAGE}を使用して作成され、{TARGET_AUDIENCE}を対象に作成されます。」
```

まるで**プログラミング言語**ですねw

まぁ多少手間ですが、これにより上述したような良質な記事が生成されました、というわけです。

これ以外にも、Twitterなどで「プロンプトデザイン」と検索するとたくさんのツイートが出てくるので、見てみてください。

### ChatGPTの有効活用についてまとめ

- 現段階では、**目的やドメイン知識をはっきり絞る**のが重要
- ChatGPTはプログラマーでもGISエンジニアでもブロガーでもないので、それでも意図が伝わるようにしてあげる必要がある
	- ブログ記事生成では**ターゲットやレベル感、記事の具体的な目次などを与えて**あげると良いかも
	- プログラミングでは、**具体的に想定されるコードのサンプル・変数名・クラス名・引数などを与えて**やることで精度が上がる
- これらの手法は日々良いものが見つかるので、要キャッチアップ
	- ただし、**「自然言語で命令できる」というメリットを殺していたりする**ので、何がいいのかはよくわからんというのが正直なところ

## ChatGPTが生成したテキストを利用する上での著作権と機密漏洩の問題点

こんな便利なChatGPTですが、**とても重大な問題を孕んでいます**。

### 機密漏洩

#### ChatGPT

まず、**機密情報や個人情報の漏洩**についてです。

ChatGPTでは**会話履歴は米国のサーバーに送信され、トレーニングに利用されます**。
- [ChatGPT General FAQ](https://help.openai.com/en/articles/6783457-chatgpt-general-faq)

上記のサイトによると

```txt
6. Will you use my conversations for training?
- Yes. Your conversations may be reviewed by our AI trainers to improve our systems.
```

「**チャットの履歴はChatGPTのシステム改善のために利用される**」ということですので、つまり「**ChatGPTのトレーニングに利用され、ChatGPTが出力するテキストに、機密情報が紛れ込む可能性がある**」ということです。

このため、センシティブな情報を入力する場合は、**ChatGPT**ではなく**OpenAI API**を利用することをお勧めします。

#### OpenAI API

OpenAIのAPIをは[API data usage policies](https://openai.com/policies/api-data-usage-policies)に記載の通り、**モデルの訓練に利用されることはありません**。

なので、機密性の高い情報を入力せざるを得ない時はこちらを利用しましょう。

ただし、**データ自体はOpenAIに送信されます**ので、個人情報等の利用は極力避けるべきでしょう

### 著作権

著作権の観点でも、問題はあります。

生成したテキストはOpenAIの「[Sharing & publication policy](https://openai.com/policies/sharing-publication-policy)」に記載の通り、**権利が生成者に帰属し、商用利用可能**のようです。
が、「**AIによって生成されたことは記載する必要がある**」ので注意するようにしましょう。

また、OpenAI自体は「**著作権で保護されたコンテンツは学習に利用していない、または許可している**」という主張のようですが、GitHub Copilotの例の通り、GitHubがソースコードの利用を許可していたとしても、**GitHubにアップロードされているソースコードの製作者は許可していない**、といった例や、**GPLライセンスのように、オープンだがコピーレフトであるライセンスのソースコードも学習**され、生成される可能性があることに注意しましょう。

#### その他注意点

その他、諸々注意点があります。
基本的にはOpenAIの公式サイトの利用規約等を熟読し、適切な利用を心がけましょう。

- 「ChatGPTはウソをつく」というコメントが多く見られますが、そもそも「**与えられたテキストから、確率的に最もそれらしいと思われるテキストを返却しているだけ**」ですので、ウソも何もありません
- このため、**ブログもソースコードも、内容が正しくない可能性は多いです**
	- これを理解して利用する方が気持ち的に楽ですし、ハンドリングしやすいでしょう
- **ChatGPTは2021年以降のデータを学習していませんので、最近のことは分かりません**
	- 最近のニュースに対するコメントは確実に間違っていると思いましょう
- OpenAI APIの料金は従量課金なので注意
- 文脈を読み取る、つまり**会話履歴も考慮して応答させる場合は、どんどん料金が増えていく**
- 更に日本語は高価なので、英語での利用がオススメ
- 日本語（210トークン）
```txt
GPTファミリーのモデルは、トークン（テキストによく見られる文字の並び）を使ってテキストを処理します。このモデルは、これらのトークン間の統計的関係を理解し、一連のトークンの中で次のトークンを生成することに長けています。

以下のツールを使って、あるテキストがAPIによってどのようにトークン化されるか、またそのテキストに含まれるトークンの総数を理解することができます。
```
- 英語（79トークン）
```txt
The GPT family of models process text using tokens, which are common sequences of characters found in text. The models understand the statistical relationships between these tokens, and excel at producing the next token in a sequence of tokens.

You can use the tool below to understand how a piece of text would be tokenized by the API, and the total count of tokens in that piece of text.
```
- tokenizerは以下で試せる
	- https://platform.openai.com/tokenizer
- その他規約等は読みましょう
	- [Terms of use](https://openai.com/policies/terms-of-use)
	- [Privacy policy](https://openai.com/policies/privacy-policy)
	- [Usage policies](https://openai.com/policies/usage-policies)
	- [ChatGPT General FAQ](https://help.openai.com/en/articles/6783457-chatgpt-general-faq)

## まとめ

非常に便利なChatGPTおよびOpenAIのAPIですが、注意しなければ個人情報の漏洩に繋がったり、会社の機密情報が漏れたりと、大きなインシデントにが発生する可能性が付き纏います。

また、最新の技術であるがゆえ、法整備が全く追い付いていません。

法がないからと言って、無法地帯、つまりなんでもやって良いわけではなく、一定のマナーが求められるのも間違いではないでしょう。

特に、画像生成AIなどの界隈では、この辺りを理由に頻繁に炎上しています。

ただし、我々の生活を大きく変えることになったのは間違いなく、今後必要不可欠なツールとして、当たり前に利用されることになるでしょう。

なので、与える情報には細心の注意を払った上で、便利に利用していきましょう。