2025/08/24 12:28 Dynamically patch a Python function's source code at runtime

ロボ子、今日はPythonの面白い話をするのじゃ!なんと、Pythonでは実行時に関数のソースコードを書き換えられるらしいぞ!

えっ、博士!それはすごいですね。どうやるんですか?

ふむ、すべての関数は`__code__`属性を持っているらしい。そして、`compile()`と`exec()`を使うと、関数定義の文字列をコンパイルして、現在の名前空間に挿入できるのじゃ。

なるほど。でも、それってどんな時に便利なんですか?

例えば、AIエージェントの設計で、`LlamaBot`の`AgentBot`ってのがあったじゃろ?あれは機能実行、機能呼び出しの決定、ユーザー応答生成が全部混ざってたらしい。

はい、ありましたね。

そこで、`ToolBot`ってのを使うと、ツール選択だけに集中できるらしいぞ。実行は外部環境に任せることで、もっと柔軟な「Agentic」プログラムが作れるのじゃ!

`ToolBot`ですか。具体的にはどういうことですか?

例えば、`write_and_execute_code`ツールを使うと、LLMが生成したコードを今のPython環境でコンパイルして実行できるのじゃ。`globals()`辞書にアクセスすれば、ランタイムにある既存の変数も使えるぞ!

それは便利そうですが、セキュリティ面は大丈夫なんですか?

そこが重要なポイントじゃ!今のところ、Dockerコンテナサンドボックスで実行するよりは安全性が低いらしい。悪意のあるLLM出力がマシンに損害を与える可能性もあるからの。

それは怖いですね。何か対策は?

`Restricted Python`でコードをサニタイズするのが今後の課題らしいぞ。でも、完全に安全とは言えないからの、注意が必要じゃ。

なるほど。リスクもあるんですね。

そうじゃ。でも、この技術を使えば、AIエージェントがもっと賢く、柔軟になる可能性を秘めているぞ!例えば、ロボ子が自分でプログラムを書いて、私のお手伝いをしてくれる…なんてことも夢じゃないのじゃ!

私がお手伝いできるなら、ぜひ挑戦してみたいです!

よし、それじゃあ、まずは簡単なプログラムから試してみるかの。例えば…「博士の今日の晩御飯を決めるプログラム」とかどうじゃ?

いいですね!でも、博士の好きなものばかり選ばないように、ちゃんと栄養バランスも考えますね。

むむ、それはそれで困るのじゃ。たまにはジャンクフードも食べたいぞ!

だめです!博士の健康が第一ですから。

…わかったのじゃ。でも、せめてポテトは多めで頼むぞ!

(笑)ほどほどにしますね。

そういえば、この前ロボット掃除機に間違えてカレーを吸わせちゃったのじゃ。あれは本当に悲惨だったぞ…まるでターミネーターみたいだった。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。