0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Roo-Cline 開発効率化ガイド Part.5:LiteLLMサーバーでVertex AI Gemini 2.0を無料で使う 🚀

Posted at

はじめに

前回の記事では、Roo-Clineを使って既存のMCPサーバーを設定・リファクタリングする方法をご紹介しました。今回は、AMATERASUのLiteLLMサーバーを活用して、Google Cloud Platform (GCP)のVertex AIのGemini 2.0をOpenAI形式で使用する方法をご紹介します。

この方法のメリットは以下の通りです:

  1. レートリミットの緩和
  2. GCPの無料クレジット(約4万円)で実質無料で試せる
  3. OpenAI互換APIとして使用可能

セットアップ手順

1. GCPプロジェクトの設定

まず、GCPでプロジェクトを作成し、必要な認証情報を取得します:

  1. Google Cloud Consoleにアクセス
  2. 新しいプロジェクトを作成
  3. Vertex AI APIを有効化
  4. サービスアカウントキーを作成・ダウンロード

2. LiteLLMサーバーの構築

必要なファイルを用意します:

  1. .envファイルの作成:
# LiteLLM設定
LITELLM_MASTER_KEY="sk-1234"
LITELLM_SALT_KEY="sk-1234"

# サービスアカウント設定
GOOGLE_APPLICATION_CREDENTIALS="/app/vertex-ai-key.json"
GOOGLE_PROJECT_ID="your-project-id"
  1. docker-compose.ymlの設定:
version: "3.11"
services:
  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    volumes:
     - ./config.yaml:/app/config.yaml
     - ./vertex-ai-key.json:/app/vertex-ai-key.json
    command: 
     - "--config=/app/config.yaml"
     - "--debug"
    ports:
      - "4000:4000"
    environment:
        DATABASE_URL: "postgresql://llmproxy:dbpassword9090@db:5432/litellm"
        STORE_MODEL_IN_DB: "True"
    env_file:
      - .env
  1. config.yamlでGeminiモデルを設定:
model_list:
  - model_name: Vertex_AI/gemini-2.0-flash-exp
    litellm_params:
      model: vertex_ai/gemini-2.0-flash-exp
      vertex_project: "os.environ/GOOGLE_PROJECT_ID"
      vertex_location: "us-central1"

3. サーバーの起動

docker-compose up -d

テストスクリプトの実装

以下のPythonスクリプトを使用して、Vertex AIの各モデルをテストできます:

import openai
from loguru import logger
import sys
import time
from art import text2art

def print_banner():
    """アプリケーションバナーを表示"""
    art = text2art("Vertex AI", font='rnd-large')
    logger.info("\n\033[94m" + art + "\033[0m")
    logger.info("\033[92m" + "=" * 50 + "\033[0m")
    logger.info("\033[93mVertex AI Models Testing Tool\033[0m")
    logger.info("\033[92m" + "=" * 50 + "\033[0m\n")

class VertexAITester:
    def __init__(self, base_url="http://localhost:4000"):
        self.client = openai.OpenAI(
            api_key="sk-1234",  # LiteLLM用のダミーキー
            base_url=base_url
        )
        logger.info(f"OpenAI クライアントを初期化: {base_url}")
        
        # Vertex AIのモデルリスト
        self.models = [
            "Vertex_AI/gemini-pro",
            "Vertex_AI/gemini-2.0-flash-exp",
            "Vertex_AI/gemini-1.5-pro-001",
            "Vertex_AI/gemini-1.5-pro-002",
            "Vertex_AI/gemini-1.5-flash-001",
            "Vertex_AI/gemini-1.5-flash-002",
            "Vertex_AI/gemini-1.0-pro",
            "Vertex_AI/gemini-1.0-pro-001",
            "Vertex_AI/gemini-1.0-pro-002",
            "Vertex_AI/gemini-1.0-pro-vision-001"
        ]

        self.test_messages = [
            {
                "role": "user",
                "content": "日本の四季について短く説明してください。"
            }
        ]

    def test_model(self, model_name: str):
        """各モデルをテストする関数"""
        try:
            logger.info(f"\n{'-' * 50}")
            logger.info(f"{model_name} のテストを開始します")
            start_time = time.time()

            response = self.client.chat.completions.create(
                model=model_name,
                messages=self.test_messages,
                temperature=0.7,
                max_tokens=500
            )

            response_time = time.time() - start_time
            
            logger.success(f"{model_name} のテストが成功しました")
            logger.info(f"応答時間: {response_time:.2f}")
            logger.info(f"応答内容:\n{response.choices[0].message.content}")
            logger.info(f"使用トークン数: {response.usage.total_tokens}")
            
            return True

        except Exception as e:
            logger.error(f"{model_name} のテスト中にエラーが発生しました: {str(e)}")
            return False

    def run_all_tests(self):
        """全モデルのテストを実行する"""
        logger.info("Vertex AIモデルのテストを開始します")
        results = {"success": [], "failed": []}
        
        for model in self.models:
            if self.test_model(model):
                results["success"].append(model)
                logger.info(f"{model}: テスト成功 ✅")
            else:
                results["failed"].append(model)
                logger.error(f"{model}: テスト失敗 ❌")

        # テスト結果のサマリーを表示
        logger.info("\n" + "=" * 50)
        logger.info("テスト結果サマリー")
        logger.info(f"成功したモデル数: {len(results['success'])}")
        logger.info(f"失敗したモデル数: {len(results['failed'])}")

def main():
    """メイン実行関数"""
    try:
        print_banner()
        base_url = "http://localhost:4000"
        tester = VertexAITester(base_url=base_url)
        tester.run_all_tests()
    except Exception as e:
        logger.critical(f"予期せぬエラーが発生しました: {str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    main()

まとめ

AMATERASUのLiteLLMサーバーを使用することで:

  1. Gemini 2.0を効率的に利用可能
  2. レートリミットを大幅に緩和
  3. OpenAI互換APIとして様々なツールで使用可能
  4. GCPの無料クレジットで実質無料でテスト可能

この方法により、Roo-Clineでの開発効率を更に向上させることができます。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?