類似ラングチェーンそしてクルーAI歌で応えるオートジェンこのようなフレームワークは、AIシステムを構築するための高レベルの抽象化を提供することで人気がある。しかし、私を含む多くの開発者は、これらのツールは開発プロセスに不必要な複雑さとフラストレーションを加えることが多く、良いことよりも悪いことの方が多いことに気づいている。
入るアトミック・エージェント- アトミック・エージェントは、以下のような信頼性の高いプログラミング・パラダイムに基づいています。 インプット・プロセス・アウトプット(IPO)モデル歌で応える原子性のコンセプトのもと、シンプルさ、柔軟性、開発者のコントロールを優先した斬新なアプローチを提供している。
この記事では、Atomic Agentsがなぜ作られたのか、どのようなプログラミングパラダイムを採用しているのか、そしてどのように群を抜いているのかを詳しく見ていきます。コードサンプルと実例でAtomic Agentsを見てみましょう。LangChainは複雑すぎると思ったことがある方は、一緒に見てみましょう!
既存のAIフレームワークの問題点
を初めて試したとき、私は「これは何だ?ラングチェーン当時、私はAIエージェント開発を単純化することに非常に興味を持っていた。しかし、実際にはそれほど単純なものではなかった。
クラスやメソッドの複雑さもさることながら、LangChainの開発者たちはAI開発の実際的な課題を理解していないようだ。おそらく、現実の使いやすさよりも理論的なエレガンスを重視しているのだろう。過剰な抽象化は開発を難しくするだけでなく、不透明にもする。
CrewAIとAutoGenのマジック・イリュージョン
同様に。クルーAI歌で応えるオートジェンこのようなフレームワークもまた、複雑なタスクを自動化することで「魔法のような」ソリューションを提供しようとしている。すべてを自律的に処理するAIエージェントの群れを配備するというアイデアは魅力的だが、実際には、これらのツールはしばしば半分も適切に機能しない。実際には過大な期待と過小な期待しかできず、開発者は予測不可能な動作とコントロールの欠如に圧倒されることになる。
これらのフレームワークは、基礎となるプロセスをあいまいにし、デバッグや機能のカスタマイズを困難にしている。その結果、これらのツールは有用なフレームワークというよりもブラックボックスになってしまい、信頼性と保守性が求められるアプリケーションを開発する際には理想的ではない。
オーバーコミットメント機能:よくある質問
これらのフレームワークで繰り返し問題になるのは、次のような傾向である。オーバーコミットメント機能.一部の企業やツールは、AGI(人工知能)に近いソリューションを提供すると主張しているが、AIの分野に関連した長いキャリアがあれば、我々はまだそこに到達していないことに気づくだろう。誇大宣伝はしばしば非現実的な期待につながり、これらのツールが必然的に不足すると、開発者はその結果に直面しなければならない。
より良い方法が必要
このような挫折と格闘した後、私たちにはこのようなフレームワークが必要だということがはっきりした:不必要な複雑性の排除と抽象化レイヤー:
- 不必要な複雑性の排除と抽象化レイヤー。
- 開発者に完全なコントロールを提供する重要な機能を不透明なインターフェースの後ろに隠すことなく。
- 信頼性が高く、長い歴史を持つプログラミング・パラダイムに従う。保守性と拡張性を向上させる。
- 開発者による開発者のための製品AI開発で直面する現実的な課題を理解する。
この理解によってアトミック・エージェントの誕生である。
原子エージェント入門
アトミック・エージェントはオープンソースのフレームワークで、可能な限り軽量でモジュール化され、コンポーザブルであるように設計されている。このフレームワークはインプット・プロセッシング・アウトプット(IPO)モデル歌で応える原子性の原則に基づき、各コンポーネントは単一目的、再利用可能、交換可能であることを保証する。
アトミック・エージェントはなぜ存在するのか?
アトミック・エージェント は、既存のフレームワークのギャップを埋めるために作られた。その目的は
- 明確で管理しやすいコンポーネントを提供することによって。人工知能開発の簡素化.
- 他のフレームワークを悩ませる冗長な複雑さを排除そして不必要な抽象化。
- 柔軟性と一貫性の促進これにより、開発者はフレームワーク自体に煩わされることなく、効果的なAIアプリケーションの構築に集中することができる。
- ベストプラクティスの奨励開発者は、モジュール化された保守可能なコード構造を採用することが奨励される。
これらの原則に従うことで、Atomic Agentsは、開発者がパワフルで管理が容易なAIエージェントとアプリケーションを構築することを可能にします。
アトミック・エージェントを支えるプログラミング・パラダイム
インプット・プロセス・アウトプット(IPO)モデル
アトミック・エージェントの核心はインプット・プロセス・アウトプット(IPO)モデルこれは基本的なプログラミングパラダイムで、プログラムの構造を3つのフェーズに分ける:
- インプットユーザーや他のシステムからデータを受け取る。
- プロセスデータの加工または変換。
- 出力処理されたデータは結果として示される。
このモデルは明確で簡潔であり、アプリケーションのデータフローを理解し、管理することを容易にする。
アトミック・エージェントでは、次のようになります。
- 入力スキーマPydanticを使って、入力データの構造と検証ルールを定義します。
- 加工コンポーネントデータに対して操作を行うエージェントやツール。
- 出力スキーマ結果が構造化され、検証された上で返されるようにすること。
原子性:機能的構成要素
原子性そのコンセプトとは、複雑なシステムを最小の機能部品、つまり「原子」に分解することである。各原子
- 単一の責任を持つそのため、理解しやすく、維持しやすくなっている。
- 再利用可能これにより、コンポーネントをアプリケーションの異なる部分、あるいは異なるプロジェクトで使用することができる。
- 他のアトミック・コンポーネントと組み合わせて、より複雑な機能を構築することができる。
アトミック・エージェントは、アトミック・コンポーネントに焦点を当てることで、柔軟性とスケーラビリティを向上させるモジュラー・アーキテクチャを容易にしている。
アトミック・エージェントの仕組み
成分
アトミック・エージェントでは、AIエージェントはいくつかの主要コンポーネントで構成されている:
- システムアラートエージェントの行動と目的を定義する。
- 入力モード入力データの構造を指定する。
- 出力モード出力データの構造を定義する。
- ランダムアクセスメモリ対話の履歴やステータス情報を保存します。
- コンテクストセンシティブプログラミング実行時にシステムプロンプトにダイナミックコンテキストを注入する。
- アーティファクトエージェントが利用可能な外部機能またはアプリケーションインターフェース。
各コンポーネントはモジュール式で交換可能なように設計されており、懸念事項の分離と単一責任の原則に従っている。
モジュール性とコンポーザビリティ
モジュール性はAtomic Agentsの核心です。コンポーネントが自己完結し、単一のタスクに集中するように設計することで、開発者は以下のことが可能になります。
- ツールやエージェントの変更他のシステムに影響を与えることなく。
- 個々のコンポーネントの微調整意図しない副作用を引き起こすことなく、システムプロンプトやモードなど。
- 入力モードと出力モードを調整することで代理店とツールシームレスに繋ぎ合わされている。
このモジュール方式は、開発を管理しやすくするだけでなく、AIアプリケーションの保守性と拡張性を高める。
コンテクストの提供:柔軟性の向上
コンテクストセンシティブプログラミングエージェントは、システムのプロンプトに動的なデータを含めることができ、最新の情報に基づいて応答を強化することができます。
例
from atomic_agents.lib.components.system_prompt_generator import SystemPromptContextProviderBase def __init__(self, title: str, search_results: List[str]): super(). __init__(title: str, search_results: List[str]): super().__init__(title=title) self.search_results = search_results def get_info(self) -> str. return "n".join(self.search_results) # コンテキストプロバイダをエージェントに登録する agent.register_context_provider("search_results", search_results_provider)
エージェントのコンテキストにリアルタイムのデータを注入することで、よりダイナミックで応答性の高いAIアプリケーションを作成することができます。
パターンとエージェントの連鎖
アトミックエージェントは、入力と出力のモードを調整することで、エージェントとツールを連結するプロセスを簡素化します。
例 クエリー生成エージェントとウェブ検索ツールがあるとする。クエリー生成エージェントの出力パターンを検索ツールの入力パターンと一致するように設定することで、両者を直接連結することができます。
from web_search_agent.tools.searxng_search import SearxNGSearchTool # クエリ・エージェントを初期化する query_agent = BaseAgent( BaseAgentConfig( # ... その他の設定 ... output_schema=SearxNGSearchTool.input_schema, # 出力スキーマの整列 ) )
この設計により、再利用性と柔軟性が向上し、コンポーネントの交換や機能の拡張が容易になります。
アトミックエージェントが他の製品より優れている理由
不必要な複雑性の排除
抽象化された複数のレイヤーを導入するフレームワークとは異なり、Atomic Agentsはシンプルでわかりやすい。各コンポーネントには明確な目的があり、隠された魔法はありません。
- 透明なアーキテクチャデータがアプリケーションをどのように流れるかを完全に理解することができます。
- より容易なデバッグ複雑さが軽減されたことで、問題の特定と解決が容易になった。
- 学習曲線の短縮開発者は、複雑な抽象概念を理解することなく、すぐに作業を開始することができます。
開発者による開発者のための製品
Atomic Agentsは、実際の開発における課題を念頭に置いて設計されています。試行錯誤を重ねたプログラミングパラダイムを使用し、開発者の経験を優先しています。
- 確かなプログラミングの基礎IPOモデルと原子性に従うことで、フレームワークはベストプラクティスを奨励する。
- 柔軟性とコントロール開発者は、必要に応じて自由にコンポーネントをカスタマイズし、拡張することができます。
- 地域主導オープンソースプロジェクトとして、開発者コミュニティからの貢献と協力を求めています。
スタンドアロンで再利用可能なコンポーネント
アトミック・エージェントの各部分は独立して実行できるため、再利用性とモジュール性が促進される。
- 単独でのテストが可能コンポーネントは、統合前に信頼性を確保するために個別にテストすることができます。
- プロジェクト間で再利用可能アトミックコンポーネントはさまざまなアプリケーションで使用できるため、開発時間を短縮できます。
- メンテナンスが容易分離機能は変更の影響を軽減し、アップデートを簡素化します。
シンプルなAIエージェントの構築
私たちは、ユーザーの問い合わせに応答し、フォローアップの質問をするAIエージェントを構築します。
ステップ1:カスタム入出力モードの定義
from pydantic import BaseModel, Field from typing import List from atomic_agents.agents.base_agent import BaseIOSchema class CustomInputSchema(BaseIOSchema). chat_message: str = Field(...).description="The user's input message.") class CustomOutputSchema(BaseIOSchema): chat_message: str = Field(... , description="ユーザーの入力メッセージ。") chat_message: str = Field(..., description="エージェントの入力メッセージ")説明="エージェントの応答メッセージ") suggested_questions: リスト[str] = フィールド(... , description="提案された質問.")説明="提案されたフォローアップ質問")
ステップ2:システムアラートの設定
from atomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator system_prompt_generator = SystemPromptGenerator( background=[ "あなたは有益な情報を提供し、フォローアップの質問を提案する知識豊富なアシスタントです。" ], background=[ "あなたは有益な情報を提供し、フォローアップの質問を提案する知識豊富なアシスタントです。" ], steps=[ "ユーザーの入力を分析して、文脈と意図を理解する。", "適切で有益な回答を提供する。 「適切で有益な回答を提供する。", "3つのフォローアップ質問候補を生成する。 "3つのフォローアップの質問候補を生成する。" ], output_instructions=[ "明確かつ簡潔な回答を心がけてください。", "関連する3つの質問を提案してください。 "3つの関連する質問候補で締めくくりなさい。" ] )
ステップ 3: エージェントの初期化
from atomic_agents.agents.base_agent import BaseAgent, BaseAgentConfig インストラクター インポート openai # エージェントを初期化する agent = BaseAgent( config=BaseAgentConfig( client=instructor.from_openai(openai.OpenAI(api_key='YOUR_OPENAI_API_KEY'))、 OpenAI(api_key='YOUR_OPENAI_API_KEY'), model="gpt-4"、 input_schema=CustomInputSchema、 output_schema=CustomOutputSchema ) )
ステップ4:プロキシを使う
user_input = "アトミックエージェントを使う利点を説明できますか?" input_data = CustomInputSchema(chat_message=user_input) response = agent.run(input_data) print(f "エージェント: {response.chat_message}") print("提案された質問:") for question in response.suggested_questions: print(f"- {質問}")
期待される成果
エージェント:アトミック・エージェントは、IPOモデルやアトミック・エージェントのような確かなプログラミング・パラダイムに基づいた、モジュール化された再利用可能なコンポーネントを提供することで、AI開発を簡素化します。アトミック性。
推奨される質問
- Atomic Agentsは他のAIフレームワークと比較してどうですか?
- Atomic Agentsでエージェントを構築する例を教えてください。
- 生産性を高めるAtomic Agentsの主な特徴は何ですか?
統合ツールとコンテキスト・プロバイダ
エージェントがユーザのクエリに基づいてウェブ検索を実行したいとします。
ステップ1: SearxNGSearchToolのダウンロードとセットアップ
利用する アトミック・アセンブラCLI検索ツールをダウンロードできる:
アトミック
メニューからSearxNGSearchToolを選択し、指示に従って依存関係をインストールします。
ステップ2:検索ツールの統合
from web_search_agent.tools.searxng_search import SearxNGSearchTool, SearxNGSearchToolConfig # 検索ツールを初期化する search_tool = SearxNGSearchTool(config=SearxNGSearchToolConfig(base_url="http://localhost:8080"))
ステップ 3: ツールを使用するためのエージェントのアップデート
我々は、ユーザーの入力に基づいて、検索ツールをいつ使用するかを決定するようにエージェントを修正することができる。
from typing import ユニオン class OrchestratorOutputSchema(BaseModel):: str = Field(.... tool: str = Field(...description="The tool to use: 'search' or 'chat'") parameters: Union[SearxNGSearchTool.input_schema, CustomInputSchema] = Field(... , description="「検索」または「チャット」のパラメータ")説明="選択されたツールのパラメータ") # OrchestratorOutputSchema を出力するようにエージェントロジックを変更する # ... # 選択したツールを実行する if response.tool == "search". search_results = search_tool.run(response.parameters) # 検索結果を処理する else #は前のチャットエージェントを使用する パス
ステップ4:検索結果でコンテクスチュアル・プロバイダーを使用する
def __init__(self, search_results): super(). __init__(title="Search_results").__init__(title="Search Results"). self.search_results = search_results def get_info(self) -> str. return "n".join(self.search_results) # 検索結果取得後 context_provider = SearchResultsProvider(search_results) agent.register_context_provider("search_results", context_provider)
この統合により、エージェントはリアルタイムのウェブ検索データに基づいて回答を提供することができる。
アトミック・アセンブラCLI:簡単な管理ツール
アトミック・エージェントの特徴は以下の通りである。アトミック・アセンブラCLIこれは、ツールとエージェントの管理を簡素化するコマンドラインツールです。
shadcnのような最近のTailwindライブラリにインスパイアされたもので、依存関係としてコンポーネントをインストールする代わりに、自分のソースコードでコンポーネントの所有権を持つ。
つまり、pipを使ってツールを依存関係としてインストールするのではなく、プロジェクトにコピーするのだ。これには2つの方法がある:
- ツールを手動でダウンロードするか、Atomic AgentsのGitHubリポジトリからソースコードをコピー&ペーストして
アトミックフォージ
フォルダー - ツールのダウンロードにはAtomic Assembler CLIを使用する。
キー機能
- ダウンロードと管理ツール手動でコピーや依存関係を解決することなく、簡単に新しいツールをプロジェクトに追加できます。
- 依存関係の混乱を避ける必要なツールだけをインストールすることで、プロジェクトの無駄を省きます。
- 簡単な修正ツールそれぞれのツールは独立しており、独自のテストとドキュメントを持っています。
- ダイレクト・アクセス・ツールToolsフォルダにアクセスし、手動でツールを管理することもできます。
最後に書く
Atomic Agentsは、シンプルさ、モジュール性、開発者のコントロールを優先することで、AI開発の分野に切望されていたシフトをもたらします。Input-Process-Outputモデルやアトミック性といった信頼性の高いプログラミング・パラダイムを採用することで、LangChainやCrewAIを使用する際に開発者が直面する問題の多くを解決します。 オートジェン のような既存のフレームワークが抱えていたフラストレーションが、このような形で解消されたのである。
アトミックエージェントでは、以下のことが可能です。
- 不必要な複雑性の排除同社は効果的なAIアプリケーションの構築に注力している。
- トータル・コントロールシステムの各コンポーネント。
- 部品の交換や変更が容易アプリケーション全体を中断することなく。
- モジュール性と再利用性の活用効率と保守性を向上させる。
もしあなたが、過大な期待と過小な期待を抱かせる複雑すぎるフレームワークと格闘するのに疲れているなら、Atomic Agentsを試してみる時だ。