LangChainでGemini 1.5 ProとClaude 3 Opusを試してみた

2024/04/23 22:45

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

導入

近年、大規模言語モデル(LLM)の進化が目覚ましく、さまざまな分野での活用が期待されています。LangChainは、Python(とTypeScript)向けのLLMライブラリで、複数のLLMを組み合わせて使用できるのが大きな特徴です。今回は、LangChainを使ってGoogle GeminiとClaude 3 Opusを試そうとした記録です。

Google GeminiはGoogleのLLMで、Google Cloud Vertex AIで利用できます。自然言語処理タスクに優れた性能を発揮します。Gemini自身によれば、詩、コード、台本、音楽作品、メール、手紙などは得意としているようです。

一方、Claude 3 OpusはAnthropicが開発したLLMで、高度な推論能力と柔軟性に長けています。Google Cloud Vertex AIやAWS Bedrockで利用できます。

環境構築

クラウドの選択では、Google CloudのVertex AIとAWSのBedrockを検討しました。Claude 3はどちらでも利用可能ですが、GeminiはGoogle Cloudでしか使えないため、Google Cloudを利用することにしました。

複数のLLMを使ったり、将来的にRAG(Retrieval Augmented Generation)を活用することを想定し、LangChainを導入しました。Python 3.12の仮想環境(venv)を新たに作成し、jupyterlabとlangchainをインストールしました。

  $ pip install jupyterlab
  $ pip install langchain

また、LangSmithというサービスを利用すると、トレースができて便利とのことでしたので、アカウントを作成しました。LangSmithの指定の環境変数をセットすれば、自動でトレースができるようになり、input/outputのtoken数も分かるため、料金の不安が和らぎました。

Google Cloudの認証は手抜きをしてgcloud auth loginしています。

Google Geminiの活用

Geminiの使用は比較的簡単でした。langchain_google_vertexaiライブラリをインストールし、以下のようにコードを記述しました。Chainはしていません。

  $ pip install langchain_google_vertexai
  import os

  os.environ['LANGCHAIN_TRACING_V2'] = 'true'
  os.environ['LANGCHAIN_API_KEY'] = "this is your key"

  from langchain_google_vertexai import (
      ChatVertexAI,
  )
  from langchain.schema import (
      AIMessage,
      HumanMessage,
      SystemMessage,
  )

  chat_model = ChatVertexAI(
      model_name="gemini-1.5-pro-preview-0409",
      streaming=False,
      # Geminiは2024年4月からシステムプロンプトに対応したというワーニングが出るが、langchain_google_vertexaiがまだ対応してないと思われ、そのまま
      # あまり読んでいないが https://github.com/langchain-ai/langchainjs/issues/5069 が関係しているかもしれない
      convert_system_message_to_human=True,
  )

  messages = [
      SystemMessage(
          content="あなたは技術記事をわかりやすく、また、読み手を惹きつける書き方ができる十分に経験を積んだテクニカルライターです。日本語の能力に長けており、日本語で文章を書きます。"
      ),
      HumanMessage(content='''私はインターネット系のソフトウェアエンジニアで、特にWeb系に関しての知見を多く持っています。技術系の出版社からプログラミングに関する書籍を複数冊商業出版した経験があります。その私になり変わってブログ記事を書いてもらいたいです。

      今回は、LangChainを使って、Google GeminiとClaude 3 Opusを使ってみた記事を書きたいと思います。

      書くにあたってうまくいかず確認したことは、以下の点でした

      - Google Cloud Vertex AIとAmazon Web Service Bedrockで、GeminiとAntropic Claude 3のどのモデルが使えるか
      - 両モデルが利用できるVertex AIで記事の構成をどう考えてくれるか
      - Vertex AIでClaude 3 Opusを使うには限定されたリージョン(us-east-5)を使う必要があること
      - Vertex AIでClaude 3 Opusのus-east-5のクォータが0に設定されていて、クォータを増やす必要があること
      - Vertex AIでGeminiを使う場合はChatVertexAIでモデルを指定すれば良かったが、Claude 3のモデルを使うためにはAnthropicVertexクラスを使う必要があったこと

      どのような構成にするか意図を含めて説明してください。記事はまだ書かないで良いです。

      意図も含めて全体を reStructuredText 形式で、1行の長さは100文字までにして折り返して、出力してください。
      '''),
  ]
  response = chat_model.invoke(messages)
  print(response)

Claude 3 Opusの活用

次に、Claude 3 Opusを試してみました。modelをclaude-3-opus@20240229に指定してみると404エラーになりました。

ChatVertexAI でいけちゃうんじゃないかという淡い期待でしたがダメでした。

続いて、anthropic.AnthropicVertex で試してみましたが、同様に404エラーになってしまいました。

そのまま claude-3-sonnet@20240229 も試してみましたが、やはり404エラーに。まだ東京では使えないのかなと思い確認してみると、us-central1でなら使えるようでした。

ChatVertexAI クラスをchat_modelにして、regionをus-central1に、model_nameをclaude-3-sonnet@20240229に変更して再度試してみると、正常に動作しました。

同様に調べてみるとOpusはus-east-5で利用できるようです。が、us-east5ではクォータを超えていると言われ、us-central1では500エラーになりました。Opusも同様にus-east5のQuotaをなんとかすれば動きそうな予感です。

vertexaiでanthoropicを使うためにライブラリをインストールします。

  $ pip install -U 'anthropic[vertex]'

chat_modelの生成を変えれば動作します。

  from langchain_google_vertexai.model_garden import (
      ChatAnthropicVertex,
  )

  # claude-3-sonnet@20240229 の場合
  chat_model = ChatAnthropicVertex(
      project="your_project_id",
      location='us-central1',
      model_name="claude-3-sonnet@20240229",
  )

  # claude-3-opus@20240229 の場合
  chat_model = ChatAnthropicVertex(
      project="your_project_id",
      location='us-east5',
      model_name="claude-3-opus@20240229",
  )

Opusの クォータを確認 してみたところ、 region:us-east5 での base_model:anthoropic-claude-3-opus-20240229 の クォータが0でした。1分あたりのリクエスト数なので、10にしてクォータの変更申請を行いました。

申請から2営業日目にはクォータが変更され、正常に動作するようになりました。

生成されたブログの構成案

GeminiはなぜかreStructuredText形式で出力してくれませんでした。

OpusのreStructuredTextは思ったよりしっかりしたものを生成してくれました。

gemini-1.5-pro-preview-0409

  ## 構成案:LangChain x 大規模言語モデル体験記

  **意図:**

  -  LangChainを用いてGoogle GeminiとClaude 3 Opusを実際に使用した体験を共有する。
  -  各モデルの特徴や利用方法、注意点などを分かりやすく解説する。
  -  読者がLangChainや大規模言語モデルに興味を持ち、活用するきっかけとなるような記事を目指す。

  **記事構成(案):**

  1.  **導入**
      -  LangChainと大規模言語モデルの概要を説明
      -  GeminiとClaude 3 Opusの特徴を簡単に紹介
      -  記事で扱う内容を予告

  2.  **Google Cloud Vertex AI と Amazon Web Services Bedrock**
      -  両プラットフォームにおけるGeminiとClaude 3のモデル提供状況を解説
      -  Vertex AIを選択した理由を説明 (GeminiとClaude 3 Opusの両モデルが利用可能)

  3.  **Vertex AI での環境構築**
      -  Claude 3 Opusの使用におけるリージョン制限(us-east-5)について言及
      -  Claude 3 Opusのクォータ申請方法を解説
      -  ChatVertexAIとAnthropicVertexクラスの違いと使い分けを説明

  4.  **LangChain でのモデル活用**
      -  LangChainを用いたGeminiとClaude 3 Opusの具体的な使用方法をコード例とともに紹介
      -  各モデルの出力結果を比較し、特徴を考察

  5.  **まとめと今後の展望**
      -  LangChainと大規模言語モデルの活用可能性について言及
      -  読者へのメッセージ

  **記事のポイント:**

  -  技術的な内容を分かりやすく解説し、読者の理解を促進する。
  -  実際に使用した経験を基に、具体的なコード例や出力結果を提示する。
  -  読者がLangChainや大規模言語モデルに興味を持ち、自ら試してみたくなるような内容にする。

  **reStructuredText 形式での出力は技術的な制約により対応できかねます。ご了承ください。**

claude-3-sonnet@20240229

  こちらが reStructuredText 形式でまとめた記事の構成と意図となります。1行の長さは100文字以内に折り返してあります。

  .. リード
    この記事では、最新のLarge Language Model (LLM)であるGoogle GeminiとClaude 3 Opusを、Google Cloud Vertex
    AIやAmazon Web Service Bedrockを使って試してみたことをレポートする。構築時に直面した課題や対処方法を
    整理することで、同様の試行をする読者の参考になることを意図している。

  .. 背景
    Google GeminiやAntropic Claude 3などのLLMが話題になっているが、一般ユーザーが簡単に試せる環境があまり
    ない。そこで、Google Cloud Vertex AIやAWS Bedrockなどのクラウドサービスを利用して実際に試してみた。

  .. 課題1: クラウドサービスが提供するLLMの確認
    Google Cloud Vertex AIとAWS Bedrockで、Google GeminiとAntropic Claude 3のどのモデルが利用可能か
    を確認する必要があった。ドキュメントを参照しながら利用可能なモデルをリストアップした。

  .. 課題2: LLMを使ったコンテンツ生成の試行
    Google Cloud Vertex AIでGeminiとClaude 3を使って記事の構成案を生成させてみた。それぞれのLLMの
    出力の特徴や違いを確認し、良い点や改善点を洗い出した。

  .. 課題3: リージョンとクォータ
    Claude 3 Opusの利用にはus-east-5リージョンを使う必要があり、さらに当初クォータが0に設定されていた
    ため、クォータの増加が必要だった。リージョンの制約やクォータの設定を適切に行う重要性を認識した。

  .. 課題4: クラウドサービスでのLLM利用の違い
    Vertex AIでGeminiを使う場合はChatVertexAIを使えば良かったが、Claude 3を使うには
    AnthropicVertexクラスを使う必要があった。各クラウドサービスでのLLM利用方法の違いを把握した。

  .. まとめ
    今回の試行では、LLMの活用とクラウドサービスの利用の両面で多くの学びがあった。最新のLLMを実際に
    試すことで、それらのポテンシャルを実感すると共に、本格活用に向けての課題も明確になった。

claude-3-opus@20240229

  .. article::
    :title: LangChainでGoogle GeminiとAnthropicのClaude 3 Opusを使ってみる
    :author: あなた
    :date: 2023-07-04
    :category: プログラミング, 機械学習, LLM

    .. contents::
        :depth: 3

    はじめに
    ========

    近年の大規模言語モデル(LLM)の発展により、多様なモデルが利用可能になりました。本記事で
    は、LangChainを使ってGoogle GeminiとAnthropicのClaude 3 Opusを利用する方法を紹介しま
    す。特に、各モデルの利用可能なプラットフォームや、実際に使用する上での注意点などを解説しま
    す。

    本記事の目的は、読者がLangChainを使ってこれらのモデルを活用できるようになることです。ま
    た、プラットフォームごとの違いや、モデル利用時の注意点を理解することで、スムーズに開発を進
    められるようになることを目指します。

    Google GeminiとClaude 3 Opusについて
    ====================================

    - Google Geminiについて
    - Claude 3 Opusについて
    - 両モデルの特徴と性能比較

    利用可能なプラットフォーム
    ==========================

    - Google Cloud Vertex AIとAmazon Web Service Bedrockでの利用可能性
    - Vertex AIでの両モデルの利用方法

    Vertex AIでClaude 3 Opusを使う際の注意点
    ========================================

    - 限定されたリージョン(us-east-5)の使用
    - クォータの設定と増量方法

    LangChainでのモデル利用方法
    ===========================

    - ChatVertexAIを使ったGeminiの利用方法
    - AnthropicVertexクラスを使ったClaude 3 Opusの利用方法
    - コード例と説明

    まとめ
    ======

    - 本記事のまとめ
    - LangChainを使ったLLMの活用の可能性
    - 今後の展望

    本記事では、LangChainを使ってGoogle GeminiとAnthropicのClaude 3 Opusを利用する方法を
    紹介しました。プラットフォームごとの違いや、モデル利用時の注意点を理解することで、効果的に
    これらのモデルを活用できるようになります。今後も、LangChainを使ったLLMの活用方法を探求し
    ていきたいと思います。

実際の記事の案

Opusが良さそうだったので、そのまま記事を生成してもらいました。

Opusが出してくれた構成案を AIMessage として追加、HumanMessage として「良いですね。実際に記事を書いてみてもらえますか?かけない部分があったらその部分はどんな内容を書けば良いのかのTODOとしてわかりやすくして残しておいてください」とお願いしました。

ChatAnthropicVertex生成時、max_output_tokensオプションは2048にしました。

コード例は参考にしないほうが良さそうですね。

claude-3-opus@20240229

  .. article::
    :title: LangChainでGoogle GeminiとAnthropicのClaude 3 Opusを使ってみる
    :author: あなた
    :date: 2023-07-04
    :category: プログラミング, 機械学習, LLM

    .. contents::
        :depth: 3

    はじめに
    ========

    近年の大規模言語モデル(LLM)の発展により、多様なモデルが利用可能になりました。本記事で
    は、LangChainを使ってGoogle GeminiとAnthropicのClaude 3 Opusを利用する方法を紹介しま
    す。特に、各モデルの利用可能なプラットフォームや、実際に使用する上での注意点などを解説しま
    す。

    本記事の目的は、読者がLangChainを使ってこれらのモデルを活用できるようになることです。ま
    た、プラットフォームごとの違いや、モデル利用時の注意点を理解することで、スムーズに開発を進
    められるようになることを目指します。

    Google GeminiとClaude 3 Opusについて
    ====================================

    Google Geminiは、Googleが開発した大規模言語モデルです。自然言語処理や会話システムなどの
    タスクで高い性能を示しています。一方、Claude 3 Opusは、Anthropic社が開発したモデルで、
    倫理的配慮や安全性を重視しています。

    TODO: 両モデルの特徴と性能比較について詳細を追記する

    利用可能なプラットフォーム
    ==========================

    Google GeminiはGoogle Cloud Vertex AIで利用可能ですが、Amazon Web Service Bedrockでは
    利用できません。一方、Claude 3 Opusは両プラットフォームで利用可能です。

    Vertex AIでは、ChatVertexAIを使ってGeminiを利用できます。Claude 3 Opusを利用する場合は
    AnthropicVertexクラスを使用します。

    Vertex AIでClaude 3 Opusを使う際の注意点
    ========================================

    Vertex AIでClaude 3 Opusを使用する際は、限定されたリージョン(us-east-5)を使用する必要
    があります。また、初期設定ではクォータが0に設定されているため、クォータの増量が必要です。

    TODO: クォータ増量の具体的な手順を追記する

    LangChainでのモデル利用方法
    ===========================

    LangChainでGeminiを使用する場合は、ChatVertexAIを使います。以下は、Geminiを使用して会話
    を行うコード例です。

    .. code-block:: python

        from langchain.llms import ChatVertexAI

        gemini = ChatVertexAI()
        response = gemini.predict(
            "こんにちは、今日の天気はどうですか?",
            model_name="chat-bison@001"
        )
        print(response)

    Claude 3 Opusを使用する場合は、AnthropicVertexクラスを使います。

    .. code-block:: python

        from langchain.llms import AnthropicVertex

        claude = AnthropicVertex()
        response = claude.predict(
            "こんにちは、今日の天気はどうですか?",
            model_name="claude-v1.3"
        )
        print(response)

    TODO: コード例の説明を追記する

    まとめ
    ======

    本記事では、LangChainを使ってGoogle GeminiとAnthropicのClaude 3 Opusを利用する方法を
    紹介しました。プラットフォームごとの違いや、モデル利用時の注意点を理解することで、効果的に
    これらのモデルを活用できるようになります。今後も、LangChainを使ったLLMの活用方法を探求し
    ていきたいと思います。

    TODO: まとめの内容を充実させる

Prev Entry

Next Entry