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

## はじめに

前回の記事では、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](https://console.cloud.google.com)にアクセス
2. 新しいプロジェクトを作成
3. Vertex AI APIを有効化
4. サービスアカウントキーを作成・ダウンロード

### 2. LiteLLMサーバーの構築

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

1. `.env`ファイルの作成：
```plaintext
# 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"
```

2. `docker-compose.yml`の設定：
```yaml
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
```

3. `config.yaml`でGeminiモデルを設定：
```yaml
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. サーバーの起動

```bash
docker-compose up -d
```

## テストスクリプトの実装

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

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

## 参考リンク

- [AMATERASU GitHub](https://github.com/Sunwood-ai-labs/AMATERASU)
- [LiteLLM Documentation](https://docs.litellm.ai/)
- [Vertex AI Documentation](https://cloud.google.com/vertex-ai)
- [Google Cloud Free Credits](https://cloud.google.com/free)