Google ColabでGemini APIを使用したFunction Callingの実装

## はじめに

この記事では、Google ColabでGemini APIを使用してFunction Callingを実装する方法を学びます。Function Callingは、AIモデルが特定の関数を呼び出すことができる機能で、より柔軟で高度な対話を可能にします。

## 必要なライブラリのインストール

まずは、必要なライブラリをインストールします。

```python
!pip install litellm loguru
```

このコマンドは、以下のライブラリをインストールします：
- `litellm`: 大規模言語モデルのAPIを簡単に使用するためのライブラリ
- `loguru`: Pythonのロギングを簡単に行うためのライブラリ

## 必要なモジュールのインポート

次に、必要なモジュールをインポートします。

```python
import os
import json
from litellm import completion
from google.colab import userdata
```

これらのモジュールは、環境変数の設定、JSON処理、AIモデルとの対話、Google Colabのユーザーデータへのアクセスに使用されます。

## APIキーの設定

Gemini APIを使用するために、APIキーを環境変数に設定します。

```python
# Gemini APIキーを環境変数に設定
os.environ["GEMINI_API_KEY"] = userdata.get('GEMINI_API_KEY')
```

この行は、Google Colabのユーザーデータから'GEMINI_API_KEY'を取得し、環境変数に設定しています。

## ツール（関数）の定義

AIモデルが使用できる関数（ツール）を定義します。

```python
tools = [{
    "type": "function",
    "function": {
        "name": "get_current_weather",
        "description": "指定された場所の現在の天気を取得する",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "都市と州、例：San Francisco, CA"
                },
                "unit": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"]
                }
            },
            "required": ["location"]
        }
    }
}]
```

この`tools`変数は、AIモデルが使用できる関数（ここでは天気情報を取得する関数）を定義しています。

## プロンプトの設定

AIモデルに対する指示（プロンプト）を設定します。

```python
prompt = """
あなたは関数を呼び出して情報を取得できる有能なアシスタントです。関数が利用可能な場合は、それを使用して正確かつ最新の情報を提供してください。

あなたの応答は常に以下の構造のJSON形式でなければなりません：
{
    "thought": "ユーザーのリクエストに関するあなたの推論",
    "function_call": {
        "name": "関数名",
        "arguments": {
            "arg1": "値1",
            "arg2": "値2"
        }
    },
    "response": "ユーザーへの応答"
}

# 応答例は省略...

ユーザーの質問が直接天気情報に関係しない場合でも、常にこのJSON形式で応答してください。

## 関数定義：

"""
```

このプロンプトは、AIモデルに対して応答の形式や関数の使用方法を指示しています。

## メッセージの設定

システムプロンプトとユーザーからの質問を含むメッセージを設定します。

```python
messages = [
    {"role": "system", "content": f"{prompt}\n{tools}"},
    {"role": "user", "content": "ボストン（MA）の現在の天気はどうですか？"}
]
```

この`messages`リストには、システムプロンプトとユーザーの質問が含まれています。

## AIモデルへのリクエスト送信

設定したメッセージを使用して、AIモデルにリクエストを送信します。

```python
response = completion(
    model="gemini/gemini-1.5-pro-latest",
    messages=messages,
    tools=tools,
    tool_choice="auto",
)
```

この`completion`関数は、Gemini APIを使用してリクエストを送信し、応答を取得します。

## 応答の処理と関数呼び出しのシミュレーション

AIモデルからの応答を処理し、関数呼び出しをシミュレートします。

```python
# AIモデルからの応答を取得
ai_response = response.choices[0].message.content

# 応答を表示
print("AI Assistant Response:")
print(ai_response)

# JSON形式の応答をPythonの辞書に変換
response_dict = json.loads(ai_response)

# 関数呼び出しのシミュレーション
def mock_get_current_weather(location, unit="celsius"):
    return f"{location}の現在の天気は22°{unit[0].upper()}で、部分的に曇りです。"

# 関数呼び出しの結果を取得
if response_dict['function_call']['name'] == 'get_current_weather':
    result = mock_get_current_weather(**response_dict['function_call']['arguments'])
    print(f"\n関数の結果: {result}")
else:
    print("\n一致する関数が呼び出されませんでした。")
```

このコードブロックでは、AIモデルの応答を処理し、模擬的な天気情報取得関数を呼び出しています。

## 📒ノートブック

https://colab.research.google.com/drive/10etZ8_5zK_sTVd150BU8k8pr-4D0y_Jl?usp=sharing

## まとめ

この記事では、Google ColabでGemini APIを使用してFunction Callingを実装する方法を学びました。AIモデルとの対話、関数の定義、応答の処理など、Function Callingの基本的な仕組みを理解することができました。この知識を活用して、より高度なAIアプリケーションの開発に取り組むことができるでしょう。