Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Zennへのスパム投稿が急増したのでLLMでなんとかした話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for dyoshikawa dyoshikawa
September 19, 2024
1.3k

 Zennへのスパム投稿が急増したのでLLMでなんとかした話

Avatar for dyoshikawa

dyoshikawa

September 19, 2024
Tweet

Transcript

  1. 自己紹介 フロントエンド: Next.js, React, Vue2など バックエンド: Ruby on Rails, Node.js+Express,

    PHP+Laravelなど インフラ: Google Cloud, AWS 資格: 応用情報技術者、AWS Specialty Securityなど
  2. リージョン Claude Sonnet: us-central1 (Iowa), asia-southeast1 (Singapore) Haiku: us-central1 (Iowa),

    europe-west4 (Netherlands) Geminiは東京リージョン(asia-northeast1)が使える
  3. JSON出力(Gemini) Gemini API を使用して JSON 出力を生成する | Google AI for

    Developers generation_config に {"response_mime_type": "application/json"} を指定することでJSON形式の出力になる
  4. JSON出力(Gemini) 構造はプロンプトで下記のように指示する 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を渡す方法もある こちらの方が精度良さそう
  5. 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の一文字目を入力しておく }, ], } ],
  6. 回答精度 判定結果よりスコア付けすると、おおむね次の結果になった Gemini 1.5 Flash < Claude 3 Haiku =

    Claude 3 Sonnet = Claude 3.5 Sonnet < Gemini 1.5 Pro Gemini 1.5 Proでベースのプロンプトを作成したので、必ずしもフェ アではないかも LLMの定量的な評価は難しい 🤔 でも取れた結果を材料にするしかない
  7. Gemini独自の機能(補足) Claudeもキャッシュによる最適化機能を発表 Prompt caching with Claude \ Anthropic is now

    available on the Anthropic API. 上記のため、AWSのBedrockやGoogle Cloud Vertex AIではまだ使え ないと思われる 参考: https://github.com/boto/boto3/issues/4262
  8. Gemini vs Claudeのまとめ ※あくまでVertex AI上で動かす場合の比較 項目 結果 価格 ほぼ同等。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(あくまで今回の検証において)
  9. RubyからGeminiを利用する Geminiを呼び出すコード 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) 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
  10. RubyからGeminiを利用する ちなみに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