エージェント考
昨今の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とかに何か自分で書くのは需要があるのかもしれん...。
赤酒
卵焼きを作ったが、料理酒に赤酒を使ったらすげー旨い…。
またも…日記が…
5月までは忙しかったからな〜。6月になっても色々あるが…。
下期も色々あるし、適宜次の次を見据えたアクションも取りつつやっていくしかない。
うどん、それは
萬田うどんで、とうもろこしかき揚げぶっかけうどんが始まった。夏じゃん。
萬田うどん、温うどん頼まないがちで、野菜天ぷらかかき揚げを頼んでしまう。仕方ないね。
ソフトウェアエンジニアリングに就いて
ソフトウェアエンジニアリングに関して最近、これは経験上だいたい正しそうで自分の判断の軸にしているけど、背景をうまく説明できないことが2つほどある。
一つは、「普通にどう考えても正しそうなことが間違っていることがある」ということで、論理的整合性だけでシステムを設計しても全然使えなかったりスケールしなかったり長続きしないということが、驚くべきことにしばしば起こるということを経験上僕は知っている。でもなぜそうなるのか、上手に説明できないでいる。
最近読んでいる本で、正岡子規が「写生」といってるのは実は間違っているよ、本当は想像力が追加で必要なんだよ、という評があって、このことを思い出した。コンテクスト(コンテクストって何?)、歴史的経緯、人間の感情、人間自体の非合理性などにヒントがあるのかなって思う。
もう一つが「ありのままに受け入れるのは難しい」ということで、思い出すのはベタベタかもしれないがスピノザの「嘲笑せず、嘆かず、呪わず、ただ理解する」と、ソシュールの「共時言語学を優先せよ」というやつである。
ソフトウェアエンジニアをしていると「正しい」とか「あるべき」とか「ベストプラクティス」とかいう言葉に敏感になってしまうので、一度色々な背景を取っ払って、事実と効用にだけ向き合って現在のシステムを眺めてみるといいのではということを常々思っている。そりゃあ、経済的合理性からあるべきシステムというのが存在するのは、そうなのだが、その合理性を見極めるにしてもものすごくいろんなことを考えて慎重にしたいという気持ちがある。
一度僕自身が根っからの文化相対主義者(ソシュールのせいです笑)なのはあるが、ベストプラクティスと聞いてまずベストプラクティス()と思うぐらいで実はちょうどいいのかもしれない。いやもちろん、正しさの側についてもフラットに理解しないとダメなのだが。特定のoverwhelmingな技術を小馬鹿にして全然手を動かさないとかそういうのもそれはそれで全然ダメ。
ここまで書いて、思っていることその1とその2の根にあるものは通底してるのでわ、という気にもなってきた。
そしてあの國分功一郎さんんがスピノザの新書を書いてることを知った。読もう...。