注
2023 年 3 月の元の BabyAGI は、自律エージェント開発の手法としてタスク計画を導入しました。このプロジェクトはアーカイブされ、babyagi_archive リポジトリに移動されました(2024 年 9 月スナップショット)。
注意
このフレームワークは、開発者として仕事をしたことのない Yohei によって構築されました。このリポジトリの目的は、アイデアを共有し、議論を刺激し、経験豊富な開発者が試験的に使用することです。本番環境での使用を想定していません。注意して使用してください。
この最新の BabyAGI は、自己構築する自律エージェント用の実験的フレームワークです。BabyAGI を拡張する以前の取り組みにより、汎用自律エージェントを構築する最適な方法は、自分自身を構築できる最もシンプルなものを構築することが明確になりました。
簡潔な概要については、こちらの X/Twitter スレッドをご覧ください。
コアは、データベースから関数を保存、管理、実行するための新しい関数フレームワーク(functionz)です。インポート、依存関数、認証シークレットを追跡するためのグラフベースの構造を提供し、自動ロードと包括的なロギング機能を備えています。さらに、関数を管理し、更新を実行し、ログを表示するためのダッシュボードが付属しています。
ダッシュボードをすぐに確認して、その動作を見るには:
-
BabyAGI をインストール:
pip install babyagi
-
BabyAGI をインポートしてダッシュボードをロード:
import babyagi if __name__ == "__main__": app = babyagi.create_app('/dashboard') app.run(host='0.0.0.0', port=8080)
-
ダッシュボードに移動:
ブラウザを開いて
http://localhost:8080/dashboardにアクセスして、BabyAGI ダッシュボードにアクセスしてください。
babyagi をインポートして、関数を登録することから始めます。ここでは、一方が他方に依存する 2 つの関数を登録する方法を示しています。
import babyagi
# Register a simple function
@babyagi.register_function()
def world():
return "world"
# Register a function that depends on 'world'
@babyagi.register_function(dependencies=["world"])
def hello_world():
x = world()
return f"Hello {x}!"
# Execute the function
print(babyagi.hello_world()) # Output: Hello world!
if __name__ == "__main__":
app = babyagi.create_app('/dashboard')
app.run(host='0.0.0.0', port=8080)関数は、メタデータを使用して登録でき、その機能を強化し、関係を管理することができます。以下は、関数メタデータのより包括的な例で、すべてのフィールドの論理的な使用方法を示しています:
import babyagi
@babyagi.register_function(
imports=["math"],
dependencies=["circle_area"],
key_dependencies=["openai_api_key"],
metadata={
"description": "Calculates the volume of a cylinder using the circle_area function."
}
)
def cylinder_volume(radius, height):
import math
area = circle_area(radius)
return area * height利用可能なメタデータフィールド:
imports:関数が依存する外部ライブラリのリスト。dependencies:この関数が依存する他の関数のリスト。key_dependencies:関数に必要なシークレットキーのリスト。metadata["description"]:関数が何をするかの説明。
register_function を使用する以外に、load_function を使用して、プラグインや関数のドラフトパックを読み込むことができます。BabyAGI にはビルトイン関数パックが付属しており、ファイルパスを指定することで独自のパックを読み込むことができます。
利用可能な関数パックは babyagi/functionz/packs にあります。
カスタム関数パックの読み込み:
import babyagi
# カスタム関数パックの読み込み
babyagi.load_functions("path/to/your/custom_functions.py")このアプローチにより、関連する関数をパックに整理することで、関数の構築と管理が容易になります。
key_dependencies をコードから直接保存するか、ダッシュボード経由で管理できます。
コードからキー依存関係を保存する:
import babyagi
# シークレットキーを追加
babyagi.add_key_wrapper('openai_api_key', 'your_openai_api_key')ダッシュボード経由でキー依存関係を追加する:
ダッシュボードに移動し、add_key_wrapper 機能を使用してシークレットキーを安全に追加します。
BabyAGI は、必須の関数パックを自動的に読み込み、その依存関係を管理し、シームレスな実行環境を確保します。さらに、関数間の関係を含む、すべてのアクティビティを記録して、関数実行と依存関係の包括的な追跡を提供します。
BabyAGI は、すべての関数実行とその相互作用を追跡するための包括的なログシステムを実装しています。ログメカニズムにより、関数呼び出し(入力、出力、実行時間、エラーを含む)がすべて記録され、監視とデバッグの目的で利用できます。
主要なログ機能:
-
実行追跡: 関数の開始と終了時刻、関数名、引数、キーワード引数、実行時間を記録します。
-
エラーログ: 関数実行中に発生するエラーをキャプチャして記録し、トラブルシューティング用の詳細なエラーメッセージを提供します。
-
依存関係管理: 関数間の依存関係を自動的に解決して記録し、実行前に必要なすべての関数とライブラリが読み込まれていることを確認します。
-
トリガーログ: トリガーされた関数の実行を記録し、どの関数が他の関数によってトリガーされたか、およびそれぞれの実行結果の詳細を示します。
-
包括的なレコード: すべての関数実行の履歴を保持し、ユーザーが過去のアクティビティを確認し、関数の関係を理解し、パフォーマンスメトリクスを分析できるようにします。
トリガーの仕組み:
トリガーは、システム内の特定のイベントやアクションに応答して、特定の関数を自動的に実行するメカニズムです。たとえば、関数が追加または更新されたときに、トリガーはその関数の説明の生成を開始できます。
トリガーは、BabyAGI の自律性を高め、自動化されたワークフローを実現し、手動操作の必要性を軽減します。ただし、意図しない再帰的実行や依存関数間の競合を避けるために、トリガーを慎重に管理することが重要です。
BabyAGI ダッシュボードは、関数の管理、実行の監視、設定の処理を行うためのユーザーフレンドリーなインターフェースを提供します。主な機能は以下の通りです:
-
関数管理: ダッシュボードから直接関数の登録、登録解除、および更新を行うことができます。
-
依存関係の可視化: 関数間の依存関係を表示および管理して、それらの関係を理解することができます。
-
シークレットキー管理: ダッシュボードインターフェースを通じてシークレットキーを安全に追加および管理します。
-
ログと監視: 入力、出力、実行時間を含む関数実行の包括的なログにアクセスします。
-
トリガー管理: 特定のイベントまたは条件に基づいて関数の実行を自動化するトリガーを設定します。
ダッシュボードへのアクセス:
アプリケーションを実行した後、http://localhost:8080/dashboard にアクセスして、BabyAGI ダッシュボードにアクセスしてください。
BabyAGI には 2 つのプリロード関数パックが含まれています:
-
デフォルト関数(
packs/default_functions.py):- 関数実行: 関数とバージョンを実行、追加、更新、または取得します。
- キー管理: シークレットキーを追加および取得します。
- トリガー: 他の関数に基づいて関数を実行するトリガーを追加します。
- ログ: オプションのフィルターを使用してログを取得します。
-
AI 関数(
packs/ai_generator.py):- AI の説明と埋め込み: 関数の説明と埋め込みを自動生成します。
- 関数選択: プロンプトに基づいて類似の関数を検索または選択します。
BabyAGI には 2 つの実験的な自己構築エージェントが含まれており、フレームワークが自己構築コーディングエージェントに対して、既存の関数を活用して新しい関数を書くのにどのように役立つかを示しています。
この関数はまず、既存の関数を使用するか新しい関数を生成するかを判断します。新しい関数が必要な場合、それらを小さな再利用可能なコンポーネントに分割し、最終的な関数に組み合わせます。
以下を試してください:
import babyagi
babyagi.add_key_wrapper('openai_api_key', os.environ['OPENAI_API_KEY'])
babyagi.load_functions("drafts/code_writing_functions")
babyagi.process_user_input("Grab today's score from ESPN and email it to test@test.com")これを実行すると、シェルで生成される関数を見ることができ、完了すると新しい関数がダッシュボードで利用可能になります。
この関数はユーザーの説明を取得し、ユーザーが AI アシスタントに尋ねるかもしれない X 個の異なるタスクを生成します。各タスクは process_user_input によって処理され、既存の関数で十分でない場合は新しい関数を作成します。
以下を試してください:
import babyagi
babyagi.add_key_wrapper('openai_api_key', os.environ['OPENAI_API_KEY'])
babyagi.load_functions("drafts/code_writing_functions")
babyagi.load_functions("drafts/self_build")
babyagi.self_build("A sales person at an enterprise SaaS company.", 3)これにより、営業担当者が AI アシスタントに尋ねるかもしれない 3 つの異なるタスクが生成され、それらを処理するための関数が作成されます。
*関数はダッシュボードで生成されて保存されますが、生成されたコードは最小限であり、改善が必要な場合があることに注意してください。
警告: これらのドラフト機能は実験的な概念であり、意図したとおりに機能しない場合があります。大幅な改善が必要であり、慎重に使用する必要があります。
貢献は大いに歓迎されていますが、正直なところ、私は PR の管理が得意ではありません。夜間と週末に一人で作業しているため、進みが遅くなることをご了承ください。より大きなグループと協力する前に、小さなコアチームを構築することから始めるかもしれません。
開発者、投資家、オープンソースの支援者、または私が行っている興味深い AI の仕事に関心がある場合は、こちらのフォームに記入してください(今後いくつか楽しいイニシアチブが予定されています!)
BabyAGI は MIT ライセンスの下で公開されています。詳細については、LICENSE ファイルを参照してください。
