I want a range life...

エージェント考

昨今のAIエコシステムはミリしら勢なんだけど、ちょっとずつGeminiで遊んでいて。

Geminiである背景は、もともとGoogle CloudのAPIに慣れていること、雑にザクザク天然知能で書く場合(まあ流石にCopilotぐらい使うけど)にはGoが一番馴染むよね、というぐらいで、とはいえ別に他のプラットフォームのAIでもそんな変わらないとは思うが。 とにかくGeminiでエージェントのようなものを作っていて、色々気づきがあった。 ・まず、そもそもエージェントを作る上ではMCPの知識は必須ではない  ・汎用的にしたい、もっと疎結合にしたい、吊るしのMCPサーバで外部の力を借りたいならサポートすればいい ・Geminiの場合、関数呼び出しという機構があり、設定で関数のスキーマを渡してあげると、特定の行動をするときに「この関数を呼んでください!」っていう特殊なレスポンスを返す ・エージェント実装はそのレスポンスをバリデートして外部の機能を呼び出す。例えば `get_time` という関数呼び出しのレスポンスが来たら、ローカルで `time.Now()` でも発行してあげてそのレスポンスをまたGeminiに送り返す。そうするとGeminiは現在時刻を知ることができ、後続のレスポンスで活用してくれる  ・ここで言語のランタイム関数を素朴に呼ぶ、としても普通に動く  ・汎用的なエージェントは、ちゃんと関数名とパラメータをパースして対応する機能をMCPで呼び出している ・あとは、プロンプト送る、関数呼び出しが来る、呼び出す、返却する、それを使ったレスポンスがくる、を繰り返す エージェントとしてのキモは、計算部分の外の世界について何にアクセスできるか、どういうCapabilityを持たせるかってことで、例えばカレンダーの予約を取得したり登録できればスケジュール管理エージェントだし、コードを書いて実行したりファイルを編集したりできるならコーディングエージェントになる。 この辺の「どこを外部の境界にするか」「どこに穴を開けてアクセスさせるか」の感覚って、OSや言語ランタイムを自作した人なら、システムコールじゃん、ってわかると思う。 なのでOSや言語ランタイムを自作すると便利(?)。

とまあ色々書いたが、関数呼び出しに関しては公式チュートリアルの通りではあるが(関数呼び出しの模式図もある)。 しかし、Googleの公式サンプルコードはなんか頭に入りづらい...。のでZennとかに何か自分で書くのは需要があるのかもしれん...。