社内ChatBot (h1-slack-bot)にClaude 3を追加した話(+α)

Sreake事業部

2024.3.29

1. はじめに

はじめまして、Sreake事業部インターン生の井上です。私はSreake事業部にてSRE技術の調査と研究を行う目的で2023年3月6日から長期インターン生として参加しています。

この記事では、Anthropic社のLLMモデル「Claude 3」が社内ChatBot (h1-slack-bot)で利用可能になった話と最近のアップデートに、ついて報告します。

2. 社内ChatBot (h1-slack-bot)とは?

社内ChatBot (h1-slack-bot)は、ChatOpsという概念に基づき開発した、LLMと対話できるアプリケーションです。ここで、ChatOpsとは、チャットツールを活用して業務を行う、一連の手法を指します。社内ChatBot (h1-slack-bot)を利用する事で、全チームメンバーがお互いの作業進捗や課題の内容をリアルタイムで把握する事で、問題解決の迅速化、作業の一貫性確保、透明性の向上などを通じて全体の生産性と効率が向上します。

また、本アプリケーションでは、ChatGPT、Gemini Pro、Claude 2等の基本的なLLMから、社内ナレッジを元に回答するVertex AI Search and Conversationsも利用できます。本アプリケーションの詳細については「ChatGPT × Slack = ChatOpsを実現する「h1-slack-bot」の紹介」をご覧ください。

3. アップデート: Claude 3追加

Claude 3とは?

Claude 3は、2024年3月に発表されたLLMモデルで、anthropic社が提供しています。公式によれば、Claude 3モデルは、分析・予測、ニュアンスが関わるコンテンツの作成、コード生成、およびスペイン語、日本語、フランス語などの英語以外の言語での会話における機能の向上を示しています。また、Claude 3には、次の三種類があります。

  1. Claude 3 Opus:
    • 非常に複雑なタスクにおいて市場最高のパフォーマンスを発揮する、当社の最もインテリジェントなモデルです。無制限のプロンプトや目に見えないシナリオを、驚くべき流暢さと人間のような理解力でナビゲートできます。 Opus は、生成 AI で可能なことの限界を示しています。
  2. Claude 3 Sonnet:
    • 特にエンタープライズ ワークロードにおいて、インテリジェンスとスピードの理想的なバランスを実現します。他の製品と比較して低コストで強力なパフォーマンスを実現し、大規模な AI 導入で高い耐久性を実現できるように設計されています。
  3. Claude 3 Haiku:
    • ほぼ瞬時の応答性を実現する最速かつ最もコンパクトなモデルです。単純なクエリやリクエストに比類のない速度で応答します。ユーザーは、人間の対話を模倣したシームレスな AI エクスペリエンスを構築できるようになります。

以下は各モデルのスペックを要約した表になります。コストやコンテキストウィンドウの比較としてOpenAIのGPT-4 Turboも掲載しています。

LLM名Claude 3 OpusClaude 3 SonnetClaude 3 HaikuGPT-4 Turbo
性能
入力コスト$15.00 / 1000K Tokens$3.00 / 1000K Tokens$0.25 / 1000K Tokens$10.00 / 1000K Tokens
出力コスト$75.00 / 1000K Tokens$15.00 / 1000K Tokens$1.25 / 1000K Tokens$30.00 / 1000K Tokens
コンテキスト
ウィンドウ
200K
※1000K
200K200K128k

公式によれば、性能・コスト共に、Claude 3 Opusが一番高く、Claude 3 Sonnetは二番目、Claude 3 Haikuが三番目と示されています。Claude 3 Opusに関しては、入力コストがChatGPTより50%、出力コストは150%も高い事が示されています。また、Claude 3 Opusのコンテキストウィンドウで※1000Kとなっていますが、ユースケース次第では1000Kを提供すると記載されています。

その他のClaude3以外のレガシーモデルとして、Claude Instant、Claude 2.0、Claude 2.1があります。既存の社内ChatBot (h1-slack-bot)では、Claude 2.0が利用可能ですが、本記事では、Claude 3 Sonnetを新たに追加します。

Claude 3 Sonnetの利用方法

社内ChatBot (h1-slack-bot)では、既にAmazon Bedrockを経由してClaude 2を利用しているため、Claude 3 Sonnetも同様の方法で利用します。2024年3月9日現在、Claude 3 Sonnetは、AWSの一部リージョンでしか利用できないことに留意してください。本記事では、us-west-2 (オレゴン)にて、以下の手法を用いてClaude 3 Sonnetを使用します。

  1. Amazon Bedrock(リージョンX)からモデルを有効化
  2. IAMでユーザ作成
  3. 作成したユーザの設定の「許可ポリシー」でBedrockに関する権限を付与する
  4. アクセスキーを作成する
  5. 以下のサンプルコードでClaude 3 Sonnetを利用できます Langchainとboto3のインストールが必要です
import os, boto3
from botocore.client import BaseClient
from langchain_community.chat_models import BedrockChat
from langchain_core.messages import HumanMessage


class Claude3:
    def __init__(self) -> None:
        self.add_env()
        self.bedrock_runtime = self.auth()

    def add_env(self) -> None:
        # 環境変数を設定する
        os.environ["AWS_ACCESS_KEY_ID"] = "YOUR KEY"
        os.environ["AWS_SECRET_ACCESS_KEY"] = "YOUR KEY"

    def auth(self) -> BaseClient:
        # AWSの認証情報を設定.
        # "AWS_ACCESS_KEY_ID"と"AWS_SECRET_ACCESS_KEY"が環境変数に追加されている必要があります。
        return boto3.client(service_name="bedrock-runtime", region_name="us-west-2")

    def __call__(self, input_message: str) -> str:
        # Chatモデルを用意する
        chat = BedrockChat(
            model_id="anthropic.claude-3-sonnet-20240229-v1:0",
            client=self.bedrock_runtime,
        )

        # メッセージの作成
        messages = [HumanMessage(content=input_message)]

        # 送信&レスポンス取得
        response = chat.invoke(messages)

        return response.content

if __name__ == "__main__":
    claude3 = Claude3()

    print(claude3("こんにちは"))

4. アップデート: モデル選択UIを追加

本アプリケーションにおけるLLMモデルの切り替え

社内ChatBot (h1-slack-bot)では、GPT4、Claude 2、Gemini Pro、Vertex AI Search and Conversationa等、様々なLLMモデルをサポートしています。モデル間の切り替え方法として、以下の二つがあります。

1.入力されたコンテキストを基に、Function Callで、適切なモデルに自動で切り替える

# Function Callによる自動切換え
Input:
 他でKubernetesを使ってる案件とかありますか?
Output:
 VertexAI_Search_and_Conversation-XXXXに切り替えました。
 ○○社ではGKE...

2.切り替えコマンドをコンテキストに含ませる事で、手動で切り替える

# コマンドで切り替え
Input:
 SET llm "VertexAI_Search_and_Conversation-XXXX"
 他でKubernetesを使ってる案件とかありますか?

問題点

Function Callによる自動切換えは、入力されるコンテキストに依存するため、時折、任意のモデルに切り替わらない事が多々報告されています。コマンドで手動で切り替える事もできますが、コマンドを利用したLLMモデルの手動切り替えは、非エンジニアにとって、親しみづらいという問題がありました。

解決策

  • この問題を解決するため、社内ChatBot (h1-slack-bot)のメンション時に、「GET LLM」というキーワードをコンテキストに含ませる事で、直感的に切り替えられる機能を追加しました。このUIの作成には、Block Kit Builderを利用しています。
  • 実際にLLMモデルを選択して、Doneを押す事で、モデルが切り替わります。以下の画像は、モデルの切り替えとClaude 3 Sonnetとの対話例です。

5. おわりに

本記事では、社内ChatBot (h1-slack-bot)で利用可能になったClaude 3 Sonnetと、LLMモデルの切り替えメニューについて説明しました。引き続き、LLMに関するR&Dを進めていきたいと思います。

ブログ一覧へ戻る

お気軽にお問い合わせください

SREの設計・技術支援から、
SRE運用内で使用する
ツールの導入など、
SRE全般についてご支援しています。

資料請求・お問い合わせ