Re:ゼロから始めるML生活

どちらかといえばエミリア派です

LlamaIndexでGemini 1.5 Flashを使う

最近諸事情がありまして、プライベートでLLMをガチャガチャいじっていたんですがChatGPTの請求がとんでもないことになっていました。 流石にコストかかり過ぎだということで、コストが安いGemini 1.5 Flashを使うことを検討しています。

LlamaIndexでGemini 1.5 Flashを使うという文献があまり見つからなかったので、今回はLlamaIndexでGemini 1.5 Flashを使ってみたやり方の備忘録です。

Geminiを使えるようにする

Geminiを使うには、Google AI StudioとVertex AIを使う方法の2種類(?)やり方があります。

デベロッパー向けには、個人開発者向けツール「Google AI Studio」、企業向け AI プラットフォーム「Vertex AI」があり、無料ベースの Google AI Studio からプロトタイプを開発し、いつでも Vertex AI へ移行できます。また、入力データは、Google が利用することはないと、規約とアーキテクチャ両面で保証されています。 Gemini について全部解説! 使い方やモデル、プランまで|Gemini - Google の AI

個人で使用する分にはGoogle AI Studioが適切っぽいので今回はそっちを使ってやっていきます。

Google AI Studio

Google AI Studioはこちらから使用できます。

ai.google.dev

リンク先からGoogleアカウントにログインして利用開始します。

画面のAPIキーを作成ってボタンか、右上のログインボタンを押すとログイン画面が表示されると思うので、お持ちのGoogle アカウントでログインします。 ログインボタンを押してログインするとこんな画面が表示されて、ChatGPTみたいに対話形式で使うこともできたりします。

料金

料金はいくらくらいかというとこんな感じです。

ai.google.dev

無料枠

従量課金

だいたい、100万トークンで$0.075 = 10円くらいだと思ってもらえれば大丈夫です。 GPT-4o-miniだと100万トークンで$0.15 = 20円なんで、ChatGPTの半分くらいでしょうか。 長いトークンを使う人は料金が上がるみたいなのでそうなるとGPT-4o-miniとあんまり変わらなくなりますが、自分はそんなに使わないので半額になりそうです。

APIのレートを気にしないのであれば、無料枠もあるのでそちらで良ければ無料で使えるらしいです。

Pricing | OpenAI

API キーを作る

さてログインしたらAPIキーを作成します。先ほどの画面からAPIキーのタブへ遷移します。 APIキーの作成画面に行くとこんな感じになっているはずなので、APIキーを作成ってボタンからキーを作成して準備完了です。

動作確認

下記のようなコマンドがテストコードとして書かれているので、ここにAPIキーを当てはめて応答が返ってくるとちゃんと動作しています。

curl \
  -H 'Content-Type: application/json' \
  -d '{"contents":[{"parts":[{"text":"Explain how AI works"}]}]}' \
  -X POST 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=<ここに発行したAPIキーを入れる>
'
{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "## How AI Works: A Simplified Explanation\n\nArtificial intelligence (AI) is a broad field, but the core idea is to **create machines that can perform tasks that typically require human intelligence.** Think of it like building a machine that can learn, reason, problem-solve, and even understand and respond to language.\n\nHere's a simplified breakdown of how AI works, focusing on the most common techniques:\n\n**1. Machine Learning:**\n\n* **The Core:**  Instead of explicitly programming instructions, we feed machines vast amounts of data and let them learn patterns and relationships on their own. \n* **Example:**  Training a machine to recognize cats in pictures. We show it countless images of cats and non-cats, labeled accordingly. The machine learns to identify features that define a cat (whiskers, pointy ears, etc.), and eventually, it can distinguish between cat and non-cat images with high accuracy.\n\n**2. Types of Machine Learning:**\n\n* **Supervised Learning:**  We provide labeled data (like cat/non-cat images), and the machine learns to predict labels for new data.\n* **Unsupervised Learning:**  We give the machine unlabeled data and let it discover hidden patterns and structures. Think of grouping similar news articles together based on content.\n* **Reinforcement Learning:**  The machine learns through trial and error, receiving rewards for desired actions and penalties for undesired ones. This is how many game-playing AIs are trained.\n\n**3. Neural Networks:**\n\n* **The Inspiration:**  Inspired by the human brain, neural networks are interconnected nodes (neurons) that process and transmit information.\n* **How it Works:**  They learn by adjusting the strength of connections between neurons, enabling them to recognize complex patterns in data.\n* **Example:**  Image recognition, natural language processing, self-driving cars, and many other AI applications rely on neural networks.\n\n**4. Deep Learning:**\n\n* **A Powerful Subset:** Deep learning is a type of machine learning that uses artificial neural networks with many layers.\n* **The Benefits:** This allows for the processing of extremely complex data, leading to significant advances in areas like image recognition, language translation, and speech synthesis.\n\n**5. Beyond the Basics:**\n\n* **AI is evolving rapidly:**  New techniques and approaches are constantly emerging, expanding the capabilities of AI in diverse fields.\n* **It's about more than just algorithms:**  AI development also involves data engineering, hardware optimization, and ethical considerations.\n\n**Remember:** AI is not just about mimicking human intelligence, it's about leveraging the power of computers to solve problems in ways that were previously impossible. As AI continues to advance, it promises to transform many aspects of our lives.\n"
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 4,
    "candidatesTokenCount": 569,
    "totalTokenCount": 573
  }
}

LlamaIndexでの使い方

Geminiを使う準備ができたので、今度はLlamaIndexで使う準備をしていきます。

とりあえずLlamaIndexからGeminiを呼び出す

とりあえず、LlamaIndexからGemini 1.5 Flashが呼べているか確認します。

import os
from google.colab import userdata
from llama_index.llms.gemini import Gemini

os.environ["GOOGLE_API_KEY"] = userdata.get('MY_GEMINI_API_KEY')

llm = Gemini(
  model="models/gemini-1.5-flash",
  temperatue=0.0
)

resp = llm.complete("こんにちは")

print(resp)

応答としてはこんな感じでした。

こんにちは! 何かお困りですか? 

ちゃんと動いてそうですね。

Gemini 1.5 Flashを使ってRAGを作る

あとはこれまで作ってきたRAGで、OpenAIを使っていた箇所をGeminiに置き換えていきます。

www.nogawanogawa.com

llmの設定は先程のところでやったんで、あとはembeddingの設定もする必要があります。 (ここをOpenAIなど別の埋込モデルを使っても問題ありませんが、ここではGeminiのembeddingが使えるか確認します)

使うときはこんな感じにすると使用できます。

# imports
from llama_index.embeddings.gemini import GeminiEmbedding

# get API key and create embeddings

model_name = "models/text-embedding-004"

embed_model = GeminiEmbedding(
    model_name=model_name, title="this is a document"
)

embeddings = embed_model.get_text_embedding("Google Gemini Embeddings.")

最終的なnotebook

最終的にはこんな感じになりました。

参考文献

感想

LLMの利用にちょっと流石にお金がかかりすぎていたので、Gemini 1.5 Flashを使うように変えてみました。 安く使えることに越したことはないので、今後は基本的にGemini 1.5 Flashを使っていこうと思います。