Mosaic AI Playground で Claude 3.5 Sonnet、GPT-4o、Gemini 1.5 Pro と同時にチャットする

# はじめに

株式会社NTTデータ [デジタルサクセスソリューション事業部](https://enterprise-aiiot.nttdata.com/) の [nttd-saitouyun](https://qiita.com/nttd-saitouyun) です。

これまで以下の記事で、Databricks から  **Amazon Bedrock の Claude 3.5 Sonnet**、**Azure OpenAI の GPT-4o**、**Google Cloud Vertex AI の Gemini 1.5 Pro** を利用できるように設定してきました。

- [Databricks の Mosaic AI Model Serving Endpoint から Amazon Bedrock の LLM を利用する](https://qiita.com/nttd-saitouyun/items/4fc9bde0b338cb180e02)
- [Databricks の Mosaic AI Model Serving Endpoint から Azure OpenAI の LLM を利用する](https://qiita.com/nttd-saitouyun/items/04e61af84e5cc25a26b9)
- [Databricks の Mosaic AI Model Serving Endpoint から Google Cloud Vertex AI の LLM を利用する](https://qiita.com/nttd-saitouyun/items/ec29189abfca6722fc00)

今回は、各クラウドプラットフォームの LLM に加えて、OSS の Llama 3.1 405B、DBRX Instruct に対して **Mosaic AI Playground** を使って同時にチャットしてみます。


# Mosaic AI Playground 
[**Mosaic AI Playground**](https://docs.databricks.com/ja/large-language-models/ai-playground.html) は、Databricks がホストする LLM とチャットしたり、回答結果を比べられたりします。特別なインフラを用意する必要もありません。

![demo005-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/7a8635c0-9495-7de0-d916-61223ebf7232.jpeg)

ワークスペースにログインして、左のメニューから「Playground」と選ぶだけです。



# チャットする LLM

本書では、以下のメジャーな LLM とチャットします。
| プラットフォーム | 利用サービス | LLM | 開発元 |
| ---- | ---- | ---- | ---- |
| AWS| Amazon Bedrock | Claude 3.5 Sonnet | Anthropic |
| Azure | Azure OpenAI | GPT-4o | OpenAI |
| Google Cloud | Vertex AI | Gemini 1.5 Pro | Google |
| Databricks on AWS | Databricks | Llama 3.1 405B | Meta |
| Databricks on AWS | Databricks | DBRX Instruct | Databricks |

※本書では Databricks on AWS を使っていますが、Databricks は Azure でも Google Cloud でも使えます。


# Playground で Claude 3.5 Sonnet、GPT-4o、Gemini 1.5 Pro ＋α とチャットする

## デモ
**LLM に同時にチャットするでも動画を撮ってみました**。動作の雰囲気がわかると思います。

![Mosaic-AI-Playground-で-Claude-3.5-Sonnet、GPT-4o、Gemini-1.5-Pro-と同時にチャットする.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/5be40e43-fcdf-045b-9211-f843021adf7a.gif)

## Q&A
まずは、日本語で「日本の総理大臣は？」と言う質問をして見ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/caa4675a-d5b5-a347-134a-60e7bd847b7c.png)

Claude 3.5 Sonnet、GPT-4o、Gemini 1.5 Pro は正解しました。情報量は、Claude 3.5 Sonnet ＞＞ GPT-4o ＞ Gemini 1.5 Pro といった印象です。
<br>

続いて英語で質問してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/94f21316-e008-b93a-7e44-dda12abec440.png)

全 LLM で正解でした。Llama 3.1 405B、DBRX Instruct の先ほどの回答の誤りは言語の問題のようです。
<br>

もう一問、「富士山の高さは？」と言う質問を聞いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/9c6c8bcb-f5d7-e672-efe8-f30af0022c4b.png)

こちらは日本語でも全 LLM で正解でした。


## 計算

次は計算をさせてみます。「0.111 × 999を小数点第2位で計算してください。」と質問してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/4a96c46c-a0bc-224c-af2b-237ee26b0a98.png)


Claude 3.5 Sonnet、GPT-4o、Llama 3.1 405B が正解でした。DBRX Instruct は計算に向かないことを警告するメッセージも出してくれました。

## コード生成

「素数を生成するコードを生成してください。」と質問してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/82c931b4-42d7-e113-25a1-8b71e6cce64d.png)

いずれも正しく稼働するコードが生成されました。

<details>
<summary>参考：生成されたコードの例</summary>

```python:Claude 3.5 Sonnet
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

def generate_primes(limit):
    return [num for num in range(2, limit + 1) if is_prime(num)]

# 使用例
print(generate_primes(50))
```

```python:GPT-4o
def generate_primes(n):
    """n以下の素数を生成する関数"""
    if n < 2:
        return []

    # 初期化: 2からnまでのリストを作成し、すべてを素数と仮定する
    is_prime = [True] * (n + 1)
    is_prime[0] = is_prime[1] = False  # 0と1は素数ではない

    p = 2
    while p * p <= n:
        if is_prime[p]:
            # pの倍数をすべて素数ではないとマークする
            for i in range(p * p, n + 1, p):
                is_prime[i] = False
        p += 1

    # 素数のリストを作成
    primes = [p for p in range(n + 1) if is_prime[p]]
    return primes

# 使用例
n = 50
print(f"{n}以下の素数: {generate_primes(n)}")
```

```python:Gemini 1.5 Pro
def 素数判定(n):
  """
  素数判定を行う関数です。

  Args:
    n: 判定対象の整数

  Returns:
    nが素数の場合True、そうでない場合False
  """
  if n <= 1:
    return False
  for i in range(2, int(n**0.5) + 1):
    if n % i == 0:
      return False
  return True

def 素数生成(n):
  """
  n以下の素数を生成する関数です。

  Args:
    n: 素数生成の上限

  Returns:
    n以下の素数のリスト
  """
  素数 = []
  for i in range(2, n + 1):
    if 素数判定(i):
      素数.append(i)
  return 素数

# 素数生成の上限を入力
n = int(input("素数生成の上限を入力してください: "))

# 素数を生成して出力
素数 = 素数生成(n)
print(f"{n}以下の素数は以下のとおりです:")
print(素数)
```

```python:Llama 3.1 405B	
def generate_primes(n):
    primes = []
    for possiblePrime in range(2, n + 1):
        # Assume number is prime until shown it is not. 
        isPrime = True
        for num in range(2, int(possiblePrime ** 0.5) + 1):
            if possiblePrime % num == 0:
                isPrime = False
                break
        if isPrime:
            primes.append(possiblePrime)
    return primes

# 100 までの素数を生成する
primes = generate_primes(100)
print(primes)
```

```python:DBRX Instruct
def is_prime(n):
    if n <= 1:
        return False
    elif n <= 3:
        return True
    elif n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True

def generate_primes(n):
    primes = []
    i = 2
    while len(primes) < n:
        if is_prime(i):
            primes.append(i)
        i += 1
    return primes
```

</details>

## ジョーク
これはネタですが「システムエンジニアにかけて、ギャグを１つお願いします」と質問して見ました。**システムエンジニアの笑いのタネの共通項がエラーやバグであること**がわかりました😂
とはいえ、各 LLM で特色が違う回答となって面白いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/3b9a9cba-32d3-b21b-fc38-f0892667f055.png)


<details>
<summary>参考：Gemini 1.5 Pro の回答全文</summary>

**システムエンジニアに捧げるギャグ**

あるシステムエンジニアが、深夜まで残業をしていました。

すると、突然パソコンの画面が真っ暗になり、エラーメッセージが表示されました。

エンジニアは焦って、エラーメッセージを何度も読み返しました。

しかし、エラーメッセージは意味不明な文字列の羅列で、何を意味しているのか全く分かりませんでした。

エンジニアは途方に暮れて、思わず天を仰ぎました。

すると、空から声が聞こえてきました。
「エラーメッセージは、こう読めばいい。」

エンジニアは、その声に従ってエラーメッセージを読み直しました。

すると、エラーメッセージは、なんと「おつかれさまです」と表示されていました。

エンジニアは、思わず笑ってしまいました。
「こんな深夜まで残業して、エラーメッセージにまで気を使ってくれるなんて、なんて優しいパソコンなんだ。」

エンジニアは、エラーメッセージに感謝しながら、仕事を終えました。

オチ：
実は、このエラーメッセージは、エンジニアの同僚が仕掛けたいたずらでした。
同僚は、エンジニアが深夜まで残業しているのを見て、お疲れ様を伝えたいと思ったのです。
しかし、直接伝えるのは恥ずかしかったので、エラーメッセージに仕込んでおきました。
エンジニアは、同僚のいたずらに気づいて、思わず笑ってしまいました。
そして、同僚に感謝の気持ちを伝えました。
このギャグは、システムエンジニアの苦労と、同僚の優しさを描いたものです。
システムエンジニアは、深夜まで残業することも多く、大変な仕事です。
しかし、同僚の優しさに支えられて、今日も頑張っています。
このギャグが、システムエンジニアの皆さんに、少しでも癒しを与えられたら幸いです。

</details>


# おわりに

皆さんも、複数の LLM をブラウザの別タブで似たようなことをやったことがあるのではないでしょうか？

**Mosaic AI Model Serving Endpoint**で色々なLLMと接続し、**Mosaic AI Playground**から各 LLM の回答を簡単に比較することができます。

この機能により、**新しい LLM が出てきた時に前のバージョンと動作を比較したり、得たい回答に対してどの LLM が適していそうか見極めることができます**。
<br>

一方で、**複数の LLM の回答を人の目で見極めていくのは大変であること**も感じたのではないかと思います。
そこで、次回は同じユースケースで、[**MLflow LLM Evaluate**](https://mlflow.org/docs/latest/llms/llm-evaluate/index.html) を使って**回答の比較**を実施してみようと思います！

<br>

以下に続きを書きましたのでご覧ください！
[MLflow LLM Evaluate で Claude 3.5 Sonnet、GPT-4o、Gemini 1.5 Pro との QA を評価する](https://qiita.com/nttd-saitouyun/items/5b4014f9326bd3997736)


# 仲間募集
NTTデータ デザイン＆テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary> 1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア) </summary>
クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。

https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary> 2. データサイエンス領域（データサイエンティスト／データアナリスト） </summary>
データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。

https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary> 3.お客様のAI活用の成功を推進するAIサクセスマネージャー </summary>
DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary> 4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》 </summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>

# ソリューション紹介
<details><summary> Trusted Data Foundationについて </summary>
～データ資産を分析活用するための環境をオールインワンで提供するソリューション～

https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</details>

<details><summary> NTTデータとDatabricksについて </summary>
NTTデータは、お客様企業のデジタル変革・DXの成功に向けて、「databricks」のソリューションの提供に加え、情報活用戦略の立案から、AI技術の活用も含めたアナリティクス、分析基盤構築・運用、分析業務のアウトソースまで、ワンストップの支援を提供いたします。

 https://enterprise-aiiot.nttdata.com/service/databricks

</details>

<details><summary> TDF-AM（Trusted Data Foundation - Analytics Managed Service）について </summary>
～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～

https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDF-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</details>

</details>

<details><summary> NTTデータとSnowflakeについて </summary>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。
NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</details>

</details>

<details><summary> NTTデータとInformaticaについて </summary>
データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。

https://enterprise-aiiot.nttdata.com/service/informatica

</details>

</details>

<details><summary> NTTデータとTableauについて </summary>
ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。

https://enterprise-aiiot.nttdata.com/service/tableau

</details>

</details>

<details><summary> NTTデータとAlteryxについて </summary>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。
Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</details>

</details>

<details><summary> NTTデータとDataRobotについて </summary>
DataRobotは、包括的なAIライフサイクルプラットフォームです。
NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</details>