Helium Agent の設計
Helium Agent は Python で構築された軽量な AI エージェントです。ターミナル上で動作し、複雑さを最小限に抑えるよう設計されています。
開発における主要な設計上の決定事項は以下の通りです。
• アーキテクチャ
システムはフラットなアーキテクチャを採用しています。重厚なフレームワークや深い依存関係ツリーは避けています。OpenAI の function calling の代わりに <action> のような XML タグを使用しています。これにより、エージェントはモデルに依存しなくなります(model agnostic)。あらゆる LLM を使用可能です。
• 依存性の注入による構成可能性 AgenticLoop と呼ばれるシンプルなループを使用しています。これには、モデル呼び出し(model caller)とツール実行(tool executor)の 2 つの入力が渡されます。この一つの選択により、4 つの異なるモードが可能になります。
- 一般的なチャット
- コーディングワークフロー
- サブエージェント
- カスタムスキル サブクラスや複雑なパターンは使用せず、単に 2 つのシンプルな関数のみを使用しています。
• 状態管理 Helium はシングルユーザー向けのツールです。会話履歴とメモリには、モジュールレベルのシングルトンを使用しています。グローバルな状態管理は、単一のユーザーセッションを表現する最もシンプルな方法であり、オーバーエンジニアリングを防ぎます。
• セーフティゲート ツール実行には 3 層のシステムを採用しています。
- Safe(安全): ファイルの読み込みや検索などのタスクを自動実行します。
- Risky(リスクあり): ファイルの書き込みなどのタスクにはユーザーの許可が必要です。
- Conditional(条件付き): bash スクリプトなどのコマンドを検査し、危険性をチェックします。 これにより、モデルのハルシネーション(幻覚)によってファイルが削除されるのを防ぎます。
• 通信 OpenAI SDK の代わりに生の HTTP リクエストを使用しています。これにより依存関係が減り、コードの透明性が保たれます。API に何が送られているかを正確に把握できます。
• スキルシステム スキルは単なる Markdown ファイルです。YAML フロントマターを含むテキストファイルを作成するだけで、新しいスキルを追加できます。複雑な登録用 API はありません。そのため、誰でも簡単にプラグインシステムを利用できます。
• 学んだ教訓
- 依存性の注入(Dependency injection)は、手軽な構成可能性(composability)を提供します。
- システムプロンプトは API です。それを第一級のコードとして扱ってください。
- 循環参照を解決するために lazy import が必要になる場合は、モジュールの境界設定が間違っています。代わりにアーキテクチャを修正してください。
シンプルさは拡張性を生みます。特定のユースケースに対して機能する、最もシンプルなソリューションを選択してください。
出典: https://dev.to/debmalyasen34/designing-helium-agent-1b39
オプションの学習コミュニティ: https://t.me/GyaanSetuAi
