Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Google Cloud Vertex AIにおけるGemini vs Claude
Search
dyoshikawa
August 14, 2024
0
100
Google Cloud Vertex AIにおけるGemini vs Claude
dyoshikawa
August 14, 2024
Tweet
Share
More Decks by dyoshikawa
See All by dyoshikawa
エンジニア向けコミュニティZennの開発チームを支える自動化の仕組み.pdf
dyoshikawa1993
0
1.7k
生PHPで学ぶSSRF.pdf
dyoshikawa1993
0
95
Zennへのスパム投稿が急増したのでLLMでなんとかした話
dyoshikawa1993
0
710
OSSコミットしてZennの課題を解決した話
dyoshikawa1993
0
320
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Language of Interfaces
destraynor
154
24k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
27
2.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Making Projects Easy
brettharned
115
5.9k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
A Philosophy of Restraint
colly
203
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Navigating Team Friction
lara
183
14k
What's new in Ruby 2.0
geeforr
343
31k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Testing 201, or: Great Expectations
jmmastey
39
7.1k
Transcript
Google Cloud Vertex AIにおける Gemini vs Claude おもにクラウドの話してます - 広島
#3(2024.8.16) クラスメソッド株式会社 Zennチーム dyoshikawa
自己紹介 2020年10月クラスメソッド入社(今年で4年目) 2023年よりZennチーム ソフトウェアエンジニア フロントエンド Next.js バックエンド Ruby on Rails
インフラ Google Cloud
Zennについて https://zenn.dev/ エンジニアのための情報共有コミュニティサービス 2023年12月に会員数10万|月間PV数1000万突破を発表 🎉
最近、LLMを活用して課題に取り組む機会があった Zennにスパム投稿が急増 1日あたり数十件〜数百件 LLMを使用してスパム投稿の検出を自動化した プラットフォームはVertex AI ZennがGoogle Cloudインフラなので LLMはAnthropic Claude
選定にあまり強い理由はない
最近、LLMを活用して課題に取り組む機会があった Zennへのスパム投稿が急増したのでLLMでなんとかした話
本当にClaude(on Vertex AI)でいいんだっけ? Claudeは特にAWSのBedrockを採用する場合においてファーストチ ョイス感があり、かつ評判も良い印象 しかしGoogleといえばGemini 真面目にGemini vs Claudeを比較検討してみる
前提 Google Cloud Vertex AI越しに叩く Rubyから叩く ZennがRuby on Railsなので
価格(Gemini) https://cloud.google.com/vertex-ai/generative-ai/pricing? hl=ja#gemini-models 文字数あたりの表記 モデル 入力コスト(1,000文字あたり) 出力コスト(1,000文字あたり) Gemini 1.5 Pro
$0.00125 $0.00375 Gemini 1.5 Flash $0.000125 $0.000375
価格(Claude) https://cloud.google.com/vertex-ai/generative-ai/pricing? hl=ja#partner-models トークン数あたりの表記 モデル 入力コスト (1,000トークンあたり) 出力コスト (1,000トークンあたり) Claude
3/3.5 Sonnet $0.003 $0.015 Claude 3 Haiku $0.00025 $0.00125
価格 1トークン≒1文字(日本語のマルチバイト文字換算で)と仮定すれ ば、Geminiの方が単価は安そう? Gemini 1.5 Pro 入力: $0.00125 / 1000文字あたり
Claude 3/3.5 Sonnet 入力: $0.003 / 1000トークンあたり
リージョン Claude Sonnet: us-central1 (Iowa), asia-southeast1 (Singapore) Haiku: us-central1 (Iowa),
europe-west4 (Netherlands) Geminiは東京リージョン(asia-northeast1)が使える
Rubyから呼び出す Ruby on RailsアプリケーションからLLMを使いたい SDK対応状況 Gemini: Python, Node.js, Go, Dart,
Android(Java, Kotlin), Swift Claude: Python, Node.js
Rubyから呼び出す Rubyの場合、SDKはないので自分で net/http でHTTP(S)リクエス トを組み立ててAPIを叩く必要がある # アクセストークンの取得にADC(アプリケーションデフォルトクレデンシャル)を使用 credentials = Google::Auth.get_application_default
access_token = credentials.fetch_access_token!["access_token"] uri = URI(API_URL) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri.request_uri) # 〜〜リクエストヘッダとボディのセット〜〜 response = http.request(request) parsed_body = JSON.parse(response.body) puts parsed_body["candidates"][0]["content"]["parts"][0]["text"]
Rubyから呼び出す(Gemini) Gemini request["Authorization"] = "Bearer #{access_token}" request["Content-Type"] = "application/json" request.body
= { contents: { role: "user", parts: [ { text: "こんにちは" } ], }, generation_config: { temperature: TEMPERATURE, max_output_tokens: MAX_TOKENS } }.to_json
Rubyから呼び出す(Claude) Claude request["Authorization"] = "Bearer #{access_token}" request["Content-Type"] = "application/json" request.body
= { anthropic_version: "vertex-2023-10-16", messages: [ { role: "user", content: [ { type: "text", text: "こんにちは" } ], } ], temperature: TEMPERATURE, max_tokens: MAX_TOKENS, stream: false }.to_json
JSONで出力させる LLMをシステムに組み込む際は返答をJSONで出力してくれた方が何 かと都合がいい LLMによってJSON出力指示のベストプラクティスが異なる
JSONで出力させる(Gemini) Gemini API を使用して JSON 出力を生成する | Google AI for
Developers generation_config に {"response_mime_type": "application/json"} を指定することでJSON形式の出力になる
JSONで出力させる(Gemini) JSONの内容はプロンプトで下記のように指示する PythonのType Hints風の記法 List 5 popQular cookie recipes. Using
this JSON schema: Recipe = {"recipe_name": str} Return a `list[Recipe]` 実際、手元の検証ではJSON Schemaで指示するよりJSONパース エラーが少なかったので上記がベスプラっぽい response_schema にJSON Schemaを渡す方法もある こちらの方が精度良さそう
JSONで出力させる(Claude) 出力フォーマットの制御 (JSONモード) - Anthropic LLM(assistant)の出力の一文字目に { を指定する messages: [
{ role: "user", content: [ { type: "text", text: "猫についての俳句を書いてください。“first_line”、“second_line”、“third_line”をキーとするJSON形式を使用してください。" }, ], role: "assistant", content: [ { type: "text", text: "{" # JSONの一文字目を入力しておく }, ], } ],
JSONで出力させる(Claude) JSONの内容の指定はどうする? ドキュメントの例はプロンプト内において 猫についての俳句を書いて ください。“first_line”、“second_line”、“third_line”をキーとす るJSON形式を使用してください。 JSON形式でチョコレートチップクッキ ーのレシピを生成してください。 といったややざっくりした指定 手元の検証ではPython風、JSON
Schemaいずれでもおおむね期待通 りの出力が得られた
回答精度 モデルごとの回答精度を評価したい 以下を100件程度用意し、各モデルに判定させる スパムでない投稿と判定されることを期待するコンテンツ スパム投稿と判定されることを期待するコンテンツ モデルごとにプロンプトは多少カスタマイズ
回答精度 判定結果よりスコア付けすると、おおむね次の結果になった Gemini 1.5 Flash < Claude 3 Haiku =
Claude 3 Sonnet = Claude 3.5 Sonnet < Gemini 1.5 Pro Gemini 1.5 Proでベースのプロンプトを作成したので、必ずしもフェ アではないかも LLMの定量的な評価は難しい・・・
その他(Geminiのみ使える機能) Geminiのみ使える機能がある Context Caching 同じプロンプトを繰り返し使用する場合、コンテキストをキャッ シュしてコストの最適化ができる Batch Prediction リアルタイムな応答を必要としない用途の場合、バッチ処理でコ ストの最適化ができる
まとめ ざっくりまとめる 項目 結果 価格 ほぼ同等。Context CachingやBatch Predictionの存在を考えるとコストはGemini優位か リージョン Geminiは東京リージョンが使える
JSON出力 両方できる。Gemini 1.5 Proはパラメータから厳密な指定が可能 SDK Gemini: Python, Node.js, Go, Dart, Android(Java, Kotlin), Swift Claude: Python, Node.js 回答精度 Gemini 1.5 Flash < Claudeの各モデル < Gemini 1.5 Pro(あくまで今回の検証において)
結論 Vertex AIのLLMとしてはまずはGeminiの選定を検討するのが無難 東京リージョンを選択可 Context Caching、Batch Predictionなど将来取れるオプションが 多い Claude含む、特定モデルにしか回答できないようなタスクを扱う場 合はそれを使う
ご清聴ありがとうございました 選定の参考になれば幸いです 質問やフィードバックをお待ちしています
最後に宣伝(その1) ZennのPublication機能により企業などの単位でテックメディアを立 ち上げられます
最後に宣伝(その2) We are hiring 🔧 広島のエンジニア募集中です! 募集職種 https://careers.classmethod.jp/requirements/
参考 https://cloud.google.com/vertex-ai/generative-ai/pricing?hl=ja https://ai.google.dev/gemini-api/docs/quickstart?hl=ja https://console.cloud.google.com/vertex- ai/publishers/anthropic/model-garden/claude-3-haiku https://ai.google.dev/gemini-api/docs/json-mode https://docs.anthropic.com/ja/docs/control-output-format https://ai.google.dev/gemini-api/docs/caching
参考 https://cloud.google.com/vertex-ai/generative- ai/docs/multimodal/batch-prediction-gemini