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

自作AIエージェントフレームワーク 「Shikigami (式神 )」を 5分でMCP対応させた話

自作AIエージェントフレームワーク 「Shikigami (式神 )」を 5分でMCP対応させた話

自作AIエージェントを作った話は下記のURLで公開しています!
https://speakerdeck.com/masachaco/zi-zuo-noezientohuremuwaku-shikigami-framework-to-sonomcpsabahua-nituite-huru

Transcript

  1. Clineが便利だけど。。。 • 家に居すぎてしまう • 進捗がバンバン出るので家でつきっきり になってしまう • 外に出たい • 季節的にちょうどいいので公園でお花見

    をしながらプログラミングしたい • 競馬場で興味ないレース中は 暇だからプログラミングしたい • Clineはリモートでは使いづらい
  2. 「こんなことしてほしいんだけど」 LLMに「こんなツールあるんですけど 次何したらいいですかね? 今の状況はこれです」と聞く LLMが「これ実行して~。ツールを実行すると きの引数はこれね」と返してくる 言われた通り機能を実行する 作業完了 Agentって? LLMに利用可能なツールと、

    そのツールを実行するために 必要な、引数の説明を渡し 解決してほしい課題を伝える LLMは使いたいツールと そのツールを実行するときの 引数を返す その内容に基づいて ツールを実行する 問題が解決するか、 ユーザに判断を仰ぐまで それを繰り返すことで 課題を解決する 言われた機能を 実行 即実行可能な 機能 処理完了機能 or ユーザの判断を仰ぐ機能
  3. デコレータ? Python組み込みの 「@(好きな名前)」で関数を デコレーションできる機能。 デコレータをつけた 関数が読み込まれたときに 1度だけデコレータで定義した 処理が実行される この機能をつかって、 「@function_calling」がついた関数は

    「LLMが呼び出せるツール」として マーキングできる。 ※ 具体的には「function_calling」 デコレータが実行される際に その関数に、LLMに渡すツールであるというフラグの パラメータを追加している。
  4. 関数一覧の作成 Pythonでは 「inspect.signature」を使用して メソッドの引数の名前や型を取得できる。 また、「__doc__」プロパティを参照すると その関数に定義されている pydocコメントを取得できる↓↓ これらの仕組みをつかって マーキングされた関数の情報を整理し Function

    Calling用のJSONを自動作成する。 メソッドの参照も控えておいて、 LLMがこれ呼んで~。と言ってきたときに 実行できるように保持しておく。 FunctionCallingの JSONを組み立てる pydocコメント
  5. Shikigami Agentを起動 Team の持っている Function Callingを集約 LLMに「こんな機能あるんですけど次何したらいいですかね? 今の状況はこれです」と聞く LLMが「これ実行して~」と返してくる 言われた機能を実行する

    処理終了 ここまでのまとめ Agentのインスタンスはそれぞれ 「私こんな関数を実行できます」 「その関数の参照はこれです!」 という情報をもっており Shikigamiは、それぞれのAgentの情報を 集約する。 その後、ShikigamiはLLMに 「すんません、私こんな機能実行できるんです けど、次何したらいいですかね!」 と聞きに行く LLMは「それならら、次この機能実行して~」 と言うので、それを実行する その繰り返しで、自律的に与えられた問題を解 決するのがAgentの大まかな仕組み 次やるべきこと を考える 処理完了 or ユーザに問い合わせが必要
  6. Shikigami Agent Framework User Interface Adapter LLMのAPI User User Interface

    ShikigamiAgent LLM Client Shikigamiの構造 LLMをAPI経由で呼び出して いるので、使えば使うほどお金が かかる Agent Team Agent Agent Agent
  7. MCP Claude DesktopなどMCPに対応した クライアントに 使えるツールの定義を教えてあげると 必要なタイミングでClaude Desktopから ツールの実行指示が飛んでくる 指示に応じて、ツールを実行して 結果を返すと、Claude

    Desktopが 実行できることを拡張することができる MCPはこの仕組みを実現するための プロトコル MCPサーバ こんなツールが 使えるよ このツール この引数で実行して 実行したよ。 結果はこの通り
  8. MCPの実装例 FastMCPを使った、MCPサーバの実装例 「@mcp.tool」というデコレータをつけると FastMCPが その関数定義とpydocを読み取って MCPのクライアント(Claude Desktop)に 「こんな関数実行できまっせ!」と 伝えてくれる この例では

    指定したユーザ名にマッチしたら そのユーザが好きな、キャラを返す という処理を例として実装している ローカルで動くのでClaudeとは標準 入出力でやりとりをする 「@mcp.tool」デコレータ
  9. ShikigamiのMCPサーバ化 Shikigamiがすでに 「こういう機能があって!」 「必要な引数はこれで!」 「この機能を実行する参照はこれ!」 とまとめてくれているので それを持ってきて、mcpに登録するだけ。 関数の型の指定と、Pydocのコメントが 書いてあれば、実行できるツールを Claude

    Desktopに伝えてくれる デコレータは関数として 手動実行させることもできるので デコレータに関数の参照を引数にして 実行するだけで 利用可能なMCPとして登録できる 「@mcp.tool」 デコレータを関数として 手動実行してMCPに 登録していく。 LLMが呼び出せる関数や 関数の説明はShikigamigaすでに 集めているので