Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Function calling機能をPLaMo2に実装するには / PFN LLMセミナー

Function calling機能をPLaMo2に実装するには / PFN LLMセミナー

LLMに外部ツールを使わせる機能「Function calling」は対話アプリケーションを超えてLLMに具体的なタスクをやらせるにはほぼ必須の機能です。本発表ではplamo-2.1-primeでこのFunction calling機能をどのように実現したかを解説します。

イベントサイト: https://preferred-networks.connpass.com/event/368829/

Avatar for Preferred Networks

Preferred Networks PRO

October 01, 2025
Tweet

More Decks by Preferred Networks

Other Decks in Technology

Transcript

  1. 8 Function calling自体は Functionを実行しない 銀行口座から 5000兆円引き 出して
 {“name”: “withdraw_from_ account”,

    “arguments”: {“value”: 500000000000000 0, “unit”: “yen”}} ツール選択 と引数 パラメータの生成 の み
  2. 10 汎用AgentにはFunction callingが不可欠 Function calling対応 LLM推論API • 選択ツール名 • 引数パラメータ

    or 通常メッセージ Agentアプリ • ClaudeDesktop • CodexCLI など ユーザの要求 • 利用可能ツールのリスト • ユーザの要求 Function calling
  3. 11 汎用AgentにはFunction callingが不可欠 Function calling対応 LLM推論API Agentの返信 • 選択ツール名 •

    引数パラメータ or 通常メッセージ Agentアプリ • ClaudeDesktop • CodexCLI など ユーザの要求 • 利用可能ツールのリスト • ユーザの要求 🔨ツール実行! Function calling
  4. 13 Functionの引数は必ず適合するJSONで出す 🔨ツール実行!が成功するには、 • Agentアプリで利用可能なツールを選択 • 引数パラメータは ◦ 選んだツールに適合するデータ ◦

    ✅適正なJSON {“value”: 5000000000000000, “unit”: “yen”}}}}}} {“value”: 5000000000000000} (unitが⽋けている) “withdraw_from_bank” (bankではなくaccount)
  5. 14 “withdraw_from_bank” (bankではなくaccount) Functionの引数は必ず適合するJSONで出す ツール実行!が成功するには、 • Agentアプリが利用可能なツールを選択 • 引数パラメータは ◦

    選んだツールに適合する形式 ◦ 適正なJSON {“value”: 5000000000000000, “unit”: “yen”}} {“value”: 5000000000000000} (unitが⽋けている) “withdraw_from_bank” 確率的にtokenをサンプリングし ているLLMには荷が重い……
  6. 15 Functionの引数は必ず適合するJSONで出す ツール実行!が成功するには、 • Agentアプリが利用可能なツールを選択 • 引数パラメータは ◦ 選んだツールに適合する形式 ◦

    適正なJSON {“value”: 5000000000000000, “unit”: “yen”}} {“value”: 5000000000000000} (unitが⽋けている) “withdraw_from_bank” 確率的にtokenをサンプリングして いるLLMには荷が重い…… Guided decodingで解決!
  7. 17 Guided decodingで必ずJSON(Guided JSON) • PLaMoを動かしている vLLMの機能 • リクエスト時に JSONSchema

    = JSONの文法を指定 • 文法に従った JSON文字 列を確実に LLMから出力 させることができる
  8. 19 tool_choice=autoの難しさ Function calling対応 LLM推論API Agentの返信 Agentアプリ • ClaudeDesktop •

    CodexCLI など Guided decodingすると必ず JSON文字列が出てきてしまう • 選択ツール名 • 引数パラメータ or 通常メッセージ
  9. 20 tool_choice=autoの難しさ Function calling対応 LLM推論API Agentアプリ • ClaudeDesktop • CodexCLI

    など Guided decodingすると必ず JSON文字列が出てきてしまう • 選択ツール名 • 引数パラメータ or 通常メッセージ V.S.
  10. 21 tool_choice=autoの難しさ Function calling対応 LLM推論API Agentアプリ • ClaudeDesktop • CodexCLI

    など Guided decodingすると必ず JSON文字列が出てきてしまう • 選択ツール名 • 引数パラメータ or 通常メッセージ V.S. ツール呼び出しが不要な場合 は 通常のメッセージ を返したい e.g.「ハロー」には「ハロー」
  11. 22 tool_choice=autoの難しさ Function calling対応 LLM推論API Agentアプリ • ClaudeDesktop • CodexCLI

    など Guided decodingすると必ず JSON文字列が出てきてしまう • 選択ツール名 • 引数パラメータ or 通常メッセージ V.S. ツール呼び出しが不要な場合 は 通常のメッセージ を返したい e.g.「ハロー」には「ハロー」
  12. 23 tool_choice=autoの難しさ Function calling対応 LLM推論API Agentアプリ • ClaudeDesktop • CodexCLI

    など Guided decodingすると必ず JSON文字列が出てきてしまう • 選択ツール名 • 引数パラメータ or 通常メッセージ V.S. ツール呼び出しが不要な場合 は 通常のメッセージ を返したい Function calling対応 LLM推論API Agentアプリ • ClaudeDesktop • CodexCLI など Agentアプリは tool_choice=autoが前提
  13. 47 PLaMo-2.1-PrimeのFunction calling実装 • FC用の特製データセット で学習 • Instruction modelとのモデルマージ •

    リバースプロキシで tool_choice=auto対応 リバースプロキシの挙動 に合わせてデータを準備
  14. 48 PLaMo-2.1-PrimeのFunction calling実装 • FC用の特製データセット で学習 • Instruction modelとのモデルマージ •

    リバースプロキシで tool_choice=auto対応 リバースプロキシの挙動に 合わせてデータを準備 特に、Guided decoding有効かモデルが 知るための入力プロンプト が入っている
  15. 49 • FC用の特製データセット で学習 • Instruction modelとのモデルマージ • リバースプロキシで tool_choice=auto対応

    リバースプロキシの挙動に 合わせてデータを準備 PLaMo-2.1-PrimeのFunction calling実装 Guided decoding有効時は JSONを出しやすく! 特に、Guided decoding有効かモデルが 知るための入力プロンプトが入っている
  16. 50 PLaMo-2.1-PrimeのFunction Calling性能 • GPT-5-miniに 勝利 • GPT-5に匹敵 ※GPT-5系はツール呼び出しをせず、 •

    自身の知識を使って答える • ユーザと対話しようとする ため、スコアとしては低くなっている これは対話的なユースケースによって は望ましい場合がある
  17. 51 PLaMo-2.1-PrimeのFunction Calling性能 • GPT-5-miniに 勝利 • GPT-5に匹敵 ※GPT-5系はツール呼び出しをせず、 •

    自身の知識を使って答える • ユーザと対話しようとする ため、スコアとしては低くなっている これは対話的なユースケースによって は望ましい場合がある User: Could you stop the washing machine in the utility room? Ground Truth: { "ControlAppliance.execute": { "command": [ "다용도실, 통돌이, 중지" ] } } Live Multiple • 多言語でワイル ドなベンチ • より難しい
  18. 52 Function calling機能をPLaMo2に実装するには • Function callingはLLMが ◦ ツールを選び ◦ 引数パラメータを生成

    する機能 • Guided decodingで必ずJSONを出せる • ただし、tool_choice=autoではJSONを出すかどうか =Guided decodingするかどうかの切替えが必要 • PLaMo-2.1-Primeでは ◦ FC用の特製データセット で学習 ◦ instruction modelとのモデルマージ ◦ リバースプロキシ でGuided decodingするかどうかを 切り替え
  19. 53 LLM推論最適化チームでは、 PLaMoの性能向上に一緒に取り組む仲間を募集しています! • LLMのコスト効率改善(スループット向上・レイテンシ改善・省GPUメモリ化) ◦ 重み/KV Cache量子化、CUDAカーネル実装、推論フレームワーク の改善など ◦

    最新の手法を実際にサービスとしてデプロイできるようにする • Guided Decodingなど推論レイヤの技術開発 • vLLMのオープンソース開発 ご興味のある方は、ぜひアンケートからカジュアル面談にご応募ください! We’re Hiring!