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 はありません。そのため、誰でも簡単にプラグインシステムを利用できます。

• 学んだ教訓

  1. 依存性の注入(Dependency injection)は、手軽な構成可能性(composability)を提供します。
  2. システムプロンプトは API です。それを第一級のコードとして扱ってください。
  3. 循環参照を解決するために lazy import が必要になる場合は、モジュールの境界設定が間違っています。代わりにアーキテクチャを修正してください。

シンプルさは拡張性を生みます。特定のユースケースに対して機能する、最もシンプルなソリューションを選択してください。

出典: https://dev.to/debmalyasen34/designing-helium-agent-1b39

オプションの学習コミュニティ: https://t.me/GyaanSetuAi