🏆

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

2024/12/19に公開

はじめに

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

https://hamaruki.com/roo-cline-mcp-refactoring/

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

  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での開発効率を更に向上させることができます。

参考リンク

Discussion