Mistralの最新モデルLargeがAWSのBedrockに登場!? API叩いてみた

:::note info
4/3 13:51更新　AWS公式ブログも投稿されました！
:::

ビジネス観点

https://aws.amazon.com/jp/blogs/machine-learning/aws-and-mistral-ai-commit-to-democratizing-generative-ai-with-a-strengthened-collaboration/

テクノロジー観点

https://aws.amazon.com/jp/blogs/aws/tackle-complex-reasoning-tasks-with-mistral-large-now-available-on-amazon-bedrock/


# BedrockにMistral Largeが出現!?

セゾンテクノロジーの小杉さんが宇宙最速で見つけてくださいました！

https://x.com/hayaok3/status/1775359932956848157?s=20

Bedrockのこっそりアップデートを宇宙最速でキャッチする仕組みは以下をご参照ください。

https://qiita.com/hayao_k/items/56ccb5bdd43839ad131a


# そもそもMistralって何だっけ？

オープンソースで高性能な生成AIモデルを公開していることで話題の、フランスの新鋭AIベンチャーです。

https://mistral.ai/

例えば「日本語対応LLM」のような例もそうですが、公開されているLLMをベースに独自のモデルを開発する場合、以前はMeta社のLlama 2などがOSSの生成AIモデルとしてポピュラーでした。

最近はこのMistralが提供するMistral 7BやMixtral 8x7Bのモデルをベースにそういった独自モデルを開発するケースが増えています。


# Mistral Largeって何だっけ？

1ヶ月ほど前、2月末に突如公開され「Claude 2.1を超えるベンチマーク性能」と話題になったMistral社の最新モデルです。

Mistral公式のWebチャットアプリ「Le Chat」で利用可能なほか、パブリッククラウドとしてMicrosoft Azureにてマネージド提供が開始されていました。

登場直後に以下の記事でも解説していますのでぜひご覧ください。

https://qiita.com/minorun365/items/ea71f3fe692f87a6e59c

そんなMistral Largeが今回、AWSのBedrockでも利用可能となったようです！


# 早速触ってみた

まずはマネジメントコンソールからモデルを有効化しましょう。今回はバージニア北部リージョンを利用しますが、オレゴンとパリにも生えていることを確認しています。

![スクリーンショット 2024-04-03 12.39.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ac6dcfcc-bfd7-0255-28cc-450f4d851ef1.png)

「テキスト」のプレイグラウンドから試せるようです。

![スクリーンショット 2024-04-03 12.40.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/74522ad3-2b9b-34ce-2315-52c4f08f03d3.png)

ちょっと意地悪なプロンプトを投げてみましたが、「日本語が上手なガイジンさん」風に生成してくれました（笑）

![スクリーンショット 2024-04-03 12.42.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/0fb5be50-24dc-2b0c-1011-b596c6bb800e.png)

チャット最適化という感じの応答ではなく、プロンプトの続きから生成してくる感じはLlama 2とも似ていますね。


# BedrockのAPIからも呼んでみる

プレイグラウンドからAWS CLI用のAPIリクエストを確認することができます。

![スクリーンショット 2024-04-03 12.45.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/207465b3-627f-a386-88cf-85300024bc80.png)

モデルIDは `mistral.mistral-large-2402-v1:0` のようですね。

まだAWSドキュメントは更新されていなさそうだったので、今回はMixtral 7x8BのサンプルコードをベースにCloud9からPythonで呼んでみます。

https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-runtime_example_bedrock-runtime_InvokeMixtral8x7B_section.html

Cloud9環境を起動して、まずはAWS SDKを更新しましょう。

```bash: ターミナル
pip install -U boto3
```

以下のコードを実行してみます。

```py: mistral-large.py
import boto3
import json

bedrock_runtime = boto3.client("bedrock-runtime")

response = bedrock_runtime.invoke_model(
    modelId="mistral.mistral-large-2402-v1:0",
    body=json.dumps({"prompt": "春の俳句を詠んで"})
)

response_body = json.loads(response["body"].read())
outputs = response_body.get("outputs")
completions = [output["text"] for output in outputs]

print(completions)
```

無事にテキストの続きが生成されました！

```bash: ターミナル
$ python3 mistral-large.py 
['みました。\n>\n> 花の香りに 風が吹く音がする 春の日々\n>\n> 花の香りは 春の気持ちを 伝えるかな\n>\n> 花咲く前に 春の準備をする 小鳥の囀る\n>\n> 花咲いても 春は終わらない 新しい生命\n>\n> 春の終わり 花びら散る風に 涙のかくさ\n>\n> 春の暖かさ 心に残る 新しい出発\n>\n> 春の雨に 濡れる花びら 輝く色合い\n>\n> 春の夜に 月が照
```

プロンプトと結合して、整形すると以下のようなテキストになります。

> 春の俳句を詠んでみました。
> 花の香りに 風が吹く音がする 春の日々
> 花の香りは 春の気持ちを 伝えるかな
> 花咲く前に 春の準備をする 小鳥の囀る
> 花咲いても 春は終わらない 新しい生命
> 春の終わり 花びら散る風に 涙のかくさ
> 春の暖かさ 心に残る 新しい出発
> 春の雨に 濡れる花びら 輝く色合い
> 春の夜に 月が照

What's Newと公式ドキュメントはよｗ