再度AIに頼って発明してみる（あわよくばクレームも書いてもらう）

# はじめに
以前の記事ではTransformerを使用して発明できるか試してみました。
・[AIに頼り切って発明してみた](https://qiita.com/ip_design/items/c23f40a97367c58c7acf)

今回、ChatGPTのAPIを利用できるようになったそうですので、勉強がてら、再度AIに頼った発明に挑戦しました。
# 今回のテーマ
今回は有人ドローンのアイデアを考えてもらいます。有人ドローンの課題は安全性と低騒音性となります。
さらに、そのアイデアについて請求項案も作ってもらいます。
# 作成したプログラム
作成したプログラムは以下の通りです。初心者特有の意味不明な部分もあると思いますがご容赦ください。
なお、このコードを続けて使用しますので、以下の説明ではデータの入出力部分のみ記載いたします。
```python
# パッケージのインストール
! pip install openai
import openai

# Google Driveに接続する
from google.colab import drive
drive.mount('/content/drive')

# テキストファイルからAPI_KEYを読み込む
with open('/content/drive/MyDrive/API KEY', 'r') as f:
  openai.api_key = f.read().strip()

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "あなたはメーカーのエンジニアです。上司から人を乗せるドローンを開発するように命じられました。有人ドローンにもっとも必要な性能は安全性です。次に必要なのが低騒音性です。アイデア出しにはTRIZの４０の発明原理を使用します"},
    {"role": "user", "content": "有人ドローンの安全性と低騒音性を向上するためのアイデアを出してください。各アイデアごとにTRIZのどの発明原理を使用したかも記載してください"},
    {"role": "assistant", "content": "１．赤外線センサーを取り付ける。- 発明原理：衝撃・振動の除去- 赤外線センサーを使用し、ドローンの周囲に物があるかどうかを検知し、衝突を避ける。２．プロペラの形状を改良する。- 発明原理：形状変化- プロペラの形状を改良し、音を低減するとともに、より効率的な飛行を実現する。３．振動吸収材を取り付ける。- 発明原理：振動の除去- ドローンのボディ部分に振動吸収材を取り付け、振動を軽減し、より安定した飛行を実現する。４．ヘッドアップディスプレイの採用- 発明原理：逆説的行動- パイロットが周囲の状況を常に確認できるヘッドアップディスプレイを搭載し、安全な飛行を促進する。５．自動着陸機能の追加- 発明原理：オートマチカル化- ドローンが自動的に着陸する機能を追加し、安定した着陸を実現する。６．ドローン外観の改善- 発明原理：不足の除去- ドローンの外観をより美しく改善することで、視覚的に安心感を与え、安全性を高める。７．音響兵器の防止措置の追加- 発明原理：充填・充塞- ドローンに備えられた音響兵器に対して充填や充塞の措置を追加し、安全性を高める。８．自己修復機能の追加- 発明原理：自己修復- ドローンに自己修復機能を追加し、破損や故障時にも安全に飛行できるようにする。９．軽量化素材の採用- 発明原理：素材の変更- ドローンに軽量化素材を採用することで、より軽快な操作と低騒音性を実現する。１０．二重ブレードプロペラの採用- 発明原理：複合- 二重ブレードプロペラの採用により、調和のとれた飛行と低騒音性を実現する。"} 
  ],
  temperature=0.90, # ランダム性　高いと多様　0から1
  max_tokens=1000, # レスの最大トークン数
  #top_p=1.0, # 多様性制御　１が最大　temperatureとの併用は推奨されない
  frequency_penalty=0, # 低いと多様　-2から2
  presence_penalty=0, # 低いと多様　-2から2
)
print(response["choices"][0]["message"]["content"])
```
# プログラムの説明
### APIKEYの入手について
OPENAIのHPからAPIKEYを入手しました。入手方法については、他の方にお任せします（申し訳ありません）。
ChatGPTのAPIの利用は有料ということで、慣れない英語のページを読みながら利用できるようにしました。
入手自体は簡単でした。しかし、請求金額がいくらになるか怯えています・・。
### messegesについて
主に記入するのがmessegesの部分となります
{"role": "system", "content": "・・・"}には、Q＆Aの前提条件のようなものを記入します。
{"role": "assistant", "content": ・・・"}には、ChatGPTからの回答を入力します（面倒です）
{"role": "user", "content": "・・・"}には、質問を入力します。

この質問→回答→回答入力→質問というサイクルをひたすら繰り返すことになります。
### パラメータについて
temperatureにつきましては、数値が大きいとランダムな答えが得られるようです。frequency_penaltyにつきましては数値が低いと多様な答えが得られるようです。presence_penaltyにつきましても低いと多様な答えが得られるようです。
発明については、オーソドックスな答えよりも、斬新な答えが求められますので、最初は、ランダム性が高くなるよう各パラメータを設定しました。
しかし、数値を極端にしますと、生成される日本語がおかしくなりましたので、temperature=0.90のみ設定しております(デフォルトは0.7)。
# 実際の入力と出力について
それでは実際の入力を出力を見てみます。
### システムの入力について
システムへの入力は以下としました。まず、立場や状況を入力しました。これは、有効なのかどうかわかりません・・・。
また、アイデア発想にはTRIZを用いるよう指定しました。アイデアの根拠を知りたいのと、ある程度制限を設けませんと、当を得ない回答がされるからです。
```
{"role": "system", "content": "あなたはメーカーのエンジニアです。上司から人を乗せるドローンを開発するように命じられました。有人ドローンにもっとも必要な性能は安全性です。次に必要なのが低騒音性です。アイデア出しにはTRIZの４０の発明原理を使用します"}
```
### 第１回質問について
第１回ユーザ入力は以下としました。主な課題として、安全性と低騒音性としております。
```
{"role": "user", "content": "有人ドローンの安全性と低騒音性を向上するためのアイデアを出してください。各アイデアごとにTRIZのどの発明原理を使用したかも記載してください"}
```

### 第１回回答について
回答は以下となります。アイデアと発明原理が併記されています（なお、出力された発明原理には誤りがあるかもしれません）。
出てきたアイデアについては、確実性は高いものの、新規性はないような気がします。

```
１．赤外線センサーを取り付ける。
- 発明原理：衝撃・振動の除去
- 赤外線センサーを使用し、ドローンの周囲に物があるかどうかを検知し、衝突を避ける。

２．プロペラの形状を改良する。
- 発明原理：形状変化
- プロペラの形状を改良し、音を低減するとともに、より効率的な飛行を実現する。

３．振動吸収材を取り付ける。
- 発明原理：振動の除去
- ドローンのボディ部分に振動吸収材を取り付け、振動を軽減し、より安定した飛行を実現する。

４．ヘッドアップディスプレイの採用
- 発明原理：逆説的行動
- パイロットが周囲の状況を常に確認できるヘッドアップディスプレイを搭載し、安全な飛行を促進する。

５．自動着陸機能の追加
- 発明原理：オートマチカル化
- ドローンが自動的に着陸する機能を追加し、安定した着陸を実現する。

６．ドローン外観の改善
- 発明原理：不足の除去
- ドローンの外観をより美しく改善することで、視覚的に安心感を与え、安全性を高める。

７．音響兵器の防止措置の追加
- 発明原理：充填・充塞
- ドローンに備えられた音響兵器に対して充填や充塞の措置を追加し、安全性を高める。

８．自己修復機能の追加
- 発明原理：自己修復
- ドローンに自己修復機能を追加し、破損や故障時にも安全に飛行できるようにする。

９．軽量化素材の採用
- 発明原理：素材の変更
- ドローンに軽量化素材を採用することで、より軽快な操作と低騒音性を実現する。

１０．二重ブレードプロペラの採用
- 発明原理：複合
- 二重ブレードプロペラの採用により、調和のとれた飛行と低騒音性を実現する。
```
### 第２回質問について
次に、アイデアを請求項の形に記載してもらうことにしました。説明として請求項の記載形式を追加しました。
```
{"role": "user", "content": "発明とは技術的な創作のうち高度のものをいいます。また、発明を言語化したものを請求項と呼びます。一般的な請求項は、このような記載ぶりとなります。[装置]は、　A.[機能a]するための[構成a]と、　B.[機能b]するための[構成b]と、　C.[機能c]するための[構成c]と、　D.[機能d]するための[構成d]と、を有する。A～Dを構成要件といい、構成要件A～Dの集合が請求項（すなわち言語化された発明）となります。アイデアを請求項の記載にしてください。"}
```
### 第２回回答について
請求項の形でアイデアが出力されました。形式的には整っておりますが、願望ばかり書かれ、具体性のないクレームにも見えます。
```
[装置]は、
有人ドローンの安全性と低騒音性を向上するための装置であり、
A. 衝突回避機能を実現するための赤外線センサー、
B. 騒音低減と飛行効率化を実現するための改良されたプロペラ、
C. 振動軽減と安定した飛行を実現するための振動吸収材、
D. 安全な飛行を促進するためのヘッドアップディスプレイ、
E. 自動着陸と破損時対策を実現するための自己修復機能、
F. 軽快な操作と低騒音性を実現するための軽量化素材、
G. 調和のとれた飛行と低騒音性を実現するための二重ブレードプロペラ、
を構成要件として有する。
```
# 感想
### 出力の良し悪しについて
ChatGPTからの出力の良し悪しは、コードの内容より、systemやuserに入力する日本語に依存することに気がつきました。つまり、プログラムの問題というより、入力する人間の方の言語能力がよい出力を得るために重要なのではないかと思います。入力文については今後も改良したいと思います。
### アイデアの新規性について
アイデアの新規性については、今回もあまりありませんでした。ChatGPTは保守的な回答をするようチューニングされているのではと推測します。しかし、このあたりも入力文を改善して、保守性を減らすような試みもしたいと思います。
一方、パラメータを操作して、多様性、ランダム性を高めることも可能ですので、このあたりも試行錯誤したいと思います。
### APIの有用性について
今回の処理はWebのChatGPTでも実行可能ですので、わざわざAPIを使用する必要はありません。しかし、APIを使用した場合にはAPI入力データは学習利用されないようですので、発明等の秘密情報を扱う場合には、こちらの方が有用、というか使用するしかありません。