AIチャットに、ChatGPTではなくMistralをしばらく使ってみて感じたこと

## はじめに
昨今のプログラマーのお供といえば、AIチャットだと思います。  
有名どころはやっぱりChatGPTですが、先日 **「Mistral Large」** というモデルが話題になっていました。  
[GPT-4に次ぐ性能？　LLM「Mistral Large」が登場　Azureでも利用可能：多言語対応、文化的背景理解に強み - ＠IT](https://atmarkit.itmedia.co.jp/ait/articles/2403/13/news076.html)

あまり良くわかっていませんが、とりあえずベンチマークとしては
- ChatGPT 3.5：70.0%
- Mistral Large：81.2%
- ChatGPT 4：86.4%

ということで、かなり強そう。  
（そもそもこれ何のベンチマークなんだろう・・。）

そこで、しばらくそちらのモデルを使ってみてわかったことや感じたことを纏めておきます。

## 前提
どちらもブラウザ上で利用する。  
大して小難しい事は聞かないので、プログラミングのお供としての使いやすさを評価する。  

- ChatGPT 3.5
    - https://chat.openai.com/
- Mistral Large（beta）
    - https://chat.mistral.ai/chat

良く質問する内容：
- 「XXX」という意味の変数名を考えて
- 「XXX」これを訳してほしい
- XXの言語で、XXXという動きをするコードを書きたいときはどうしたら良い？

## 感想
### 結論
**ChatGPTのほうが使いやすい。**
けどMistralのほうが回答が好み・・。

### 理由
#### プロンプトを設定出来る
**ChatGPT**ではプロンプトを設定しておくことが出来ます。  
`画面左下の自分のアカウントをクリック > ChatGPTをカスタマイズする  `

これによって、どのチャットでも一律で適用される前提を設定出来ます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/a0eb8a1b-27e9-c19d-6309-353cf075c291.png)


この機能が**Mistral**だとないので、別のチャットで伝えたことが他のチャットだと反映されなかったりすることがしばしばあります。  
例）日本語で回答してほしいと伝えてあるのに、英語で回答される。
キャメルケースが好みなのにスネークケースで回答される。

特に英語で回答されるのはそこそこ回数が多い上に、やり直しが必要になるのでちょっと面倒・・。


#### 回答の生成速度がChatGPTのほうが早い
調べていて気付いたのですが、そもそも**Mistral Large**はまだ日本語に正式対応していない・・？

そのためなのかわかりませんが、日本語の文章を出力する速度が少し遅いです。  
ちょっと遅いな、と思う程度で実用に不便があるわけではないのですが、減点は減点！

#### 回答の内容は少しだけ特色あり
上にも書いた通り、普段大して小難しい内容を聞いていません。  

なので、「**Mistral Large**じゃないとこんな回答出せねえぜ・・！」みたいな経験はほぼありません。  
（これはChatGPTでは無理だったかもしれない）  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/1f3a0687-7396-e5a6-ad83-9676bc291b75.png)

ただ、改めてChatGPTを使ってみて思ったのは、多少それぞれの特色がありました。

##### ChatGPT
- ユーザーの意見がかなり尊重される
- 問題ない場合に、他の案を出してくれない

##### Mistral
- 割とユーザーの意見は置いておいて、自分の意見を出してくれる
- 問題ない場合でも、他の案を出してくれる

なんかMistralは新進気鋭でズケズケ物言う若者で、ChatGPTがだいぶ世渡りこなれてきてしまった中年に見えてきた。

<details><summary>それぞれの回答例</summary>

**ChatGPT**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/25522ac5-1755-bd86-7221-3c2f56ee80f4.png)

**Mistral**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/e2fe37d1-cf7e-ba5c-1f03-0179b06d33bb.png)

</details>


## おわりに
使い勝手の面では敗れてしまった**Mistral**ですが、こちらのサイト現在beta版とのことです。  
なので、まだまだ伸びしろはたっぷり・・！

今後も時折確認してみようと思います。

## おまけ
いくつかの質問と回答を比較してみました。

<details><summary>svelteで親コンポーネントからDOM要素を受け取って子コンポーネントで表示する仕組みを作りたいです。
どの様にコーディングしたら良いでしょうか？</summary>

**Mistral**
ざっくりチェックしただけで動かしてないけど、多分正解！
![FireShot Capture 064 - Le Chat Mistral - chat.mistral.ai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/c9c6925b-01b0-e7cd-5049-6ccf2bd5fd23.png)


**ChatGPT**
こちらは不正解！
ただ、この後何回か試したところ正解することもありました。
![FireShot Capture 065 - Svelte DOM要素の渡し方 - chat.openai.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/5be42ff9-ccb7-c3cf-883d-e75a018db0f4.png)
</details>

<details><summary>「更新する箇所を選択するコンポーネント」の名前を考えてください。現在"updateElementSelector"という名前を考えています。</summary>

**Mistral**
現在考えている形を活かしつつ、他のパターンも出してくれた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/ee3f01d8-98e5-ed80-f31b-d0dd1d41798c.png)

**ChatGPT**
Mistralと比べるとちょっとボキャブラリーがしょぼめかも？
現在考えている形の提案が強く影響しすぎている感じがします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/ffbdb19c-b647-a229-772d-5690645f363d.png)

</details>