概要
function callingに特化した超軽量モデルfunctiongemmaで遊んでみた。
背景と目的
たまたま、ollamaのモデルを見ていたら、 functiongemma なる270MBという非常に小さなサイズのモデルがあった。今年前半にローカルで動くモデルでfunction callingを試したりしていたのだが、PCの性能の問題もあり大きなサイズの性能の良いモデルが使えずその後放置していた。今回、非常に軽量なモデルを見つけることができたので、ちょっとだけ試してみる。
詳細
環境
- CPU: Core-i5 14400F
- GPU: RTX4060 8GB
- RAM: DDR5-4800 16GB
- Windows11
モデルの概要
モデルのページを見ると、説明文がある。Google Geminiに要約を依頼した結果、以下のようになった。
-「関数呼び出し」に特化した超軽量モデル - GoogleのGemma 3 270Mをベースに、ファンクションコーリング(関数呼び出し)専用にトレーニングされたオープンモデルです。 - 場所を選ばないデプロイが可能 極めてサイズが小さいため、ノートPCやデスクトップなどのローカル環境でも最先端のAI機能を動かすことができ、開発の幅を広げます。 - ファインチューニング前提の「基盤」 直接の対話用ではなく、特定の用途に合わせて微調整(ファインチューニング)することで真価を発揮する、特化型モデル構築のためのベースとして設計されています。
インストール
ollama run functiongemma
サンプルスクリプトを動かす
pip install ollama rich
モデルの説明ページにあるサンプルスクリプトを実行。サンプルのプロンプトは英語で、パリの天気を聞くものになっていたが、
「東京の天気はどうですか?」
と日本語に変更して動かしてみたところ、英語の返答だがとりあえずちゃんと呼び出せている模様。
Prompt: 東京の天気はどうですか?
Calling: get_weather({'city': '東京'})
Result: {"city": "\u6771\u4eac", "temperature": 22, "unit": "celsius", "condition": "sunny"}
Response: The weather in Tokyo is currently sunny with a temperature of 22.0 degrees Celsius.
ちなみに、応答速度は非常に速い。体感的にはほぼ一瞬である。
functionを追加してみる
以下のfunctionを追加。
def get_sensor_data(sensor_id: str) -> str: """ Get the current data from a sensor. Args: sensor_id: The ID of the sensor Returns: A string describing the sensor data """ return json.dumps({'sensor_id': sensor_id, 'value': 42, 'unit': 'units'})
モデルに与えるfunctionに2つ目を追加。
response = chat(model, messages=messages, tools=[get_weather, get_sensor_data])
応答に応じて、呼び出し対象のfunctionを切り替えるように変更。
if tool.function.name == "get_sensor_data": result = get_sensor_data(**tool.function.arguments) else: result = get_weather(**tool.function.arguments)
プロンプトを変更して実行したところ、以下のようにセンサーの値を答えられた。
Prompt: センサーID 12345 のデータを取得してください。
Calling: get_sensor_data({'sensor_id': '12345'})
Result: {"sensor_id": "12345", "value": 42, "unit": "units"}
Response: The sensor ID 12345 has been retrieved. The value is 42.
まとめと今後の課題
シングルターンのやりとりであれば、まずまず動きそうな気配がするのと、とにかく軽量で非常に高速に応答が返ってくる。270MBだと、シングルボードコンピュータの類でも十分に実行可能と思われる。今回使用したPCではGPUは使用されているようなので、GPUが使用できない状況での応答も試してみたい。