Daprは最近、大規模言語モデル(LLM)を使用してスケーラブルでレジリエントなAIエージェントを構築するためのフレームワークDapr Agentsを発表した。Dapr Agentsは、Daprのセキュリティ、オブザーバビリティ、クラウドニュートラルなアーキテクチャを活用し、構造化されたワークフロー、マルチエージェント連携、イベント駆動型の実行が可能だ。企業向けに設計されており、数千のエージェントをサポートし、データベースと統合し、堅牢なオーケストレーションとメッセージングによって信頼性を確保する。
DaprをベースにしたDapr Agentsは、LLMを使用して推論、行動、コラボレーションができるAIエージェントを開発するためのフレームワークを提供する。Dapr Agentsは信頼性、スケーラビリティ、オブザーバビリティを提供し、シングルコアで数千のエージェントをサポートし、Kubernetes上でネイティブに実行される。著者のMark Fussel氏、Yaron Schneider氏、Roberto Rodriguez氏は、Dapr Agentsが他のフレームワークとどのように異なるかを説明している。
Dapr Agentsは、Daprのフル機能のワークフローエンジンの上に構築されています。他の多くのエージェントやLLMフレームワークは、自作のワークフローシステムを使用していますが、プロダクションユースケースには信頼できません。Dapr Agentsは、Daprの実績あるワークフローシステムを使用しており、障害、再試行、スケーリングを処理する設計がされています。
import loggingimport asyncioimport requestsfrom dotenv import load_dotenvfrom dapr_agents.llm.dapr import DaprChatClientfrom dapr_agents import AssistantAgent, tool# Load environment variablesload_dotenv()logging.basicConfig(level=logging.INFO)@tooldef get_pr_code(repository: str, pr: str) -> str: """Get the code for a given PR""" response = requests.get(f"https://api.github.com/repos/{repository}/pulls/{pr}/files") files = response.json() code = {file["filename"]: requests.get(file["raw_url"]).text for file in files} return code@tooldef perform_review(code: str) -> str: """Review code""" response = DaprChatClient().generate(f"Review the following code: {code}") return response.get_content()# Define Code Review Agentcode_review_agent = AssistantAgent( name="CodeReviewAgent", role="Review PRs", instructions=["Review code in a pull request, then return comments and/or suggestions"], tools=[get_pr_code, perform_review], message_bus_name="messagepubsub", state_store_name="workflowstatestore", agents_registry_store_name="agentstatestore", service_port=8001,)# Start Agent Workflow Serviceawait code_review_agent.start()
Dapr Agentsによるコードレビューエージェントの構築例(出典)
Distributed Application Runtime(Dapr)は、サービス呼び出し、状態管理、pub/subメッセージング、オブザーバビリティのためのビルディングブロックを提供することで、クラウドネイティブアプリケーションの開発を簡素化するために設計されたオープンソースのフレームワークだ。インフラストラクチャの複雑さを抽象化し、開発者がビジネスロジックに集中可能にする一方で、Kubernetesやその他の環境とシームレスに統合できる。
Agentic AIとは、自律的に情報を処理し、意思決定を行い、タスクを実行できるAI駆動型システムを指す。この分野には、LangChain、AutoGen、CrewAIなどのフレームワークを含む様々なソリューションが存在し、開発者はエージェントベースのアプリケーションを構築できる。
Dapr Agentsは、推論エンジンとしてLLMを使用し、拡張機能のために外部ツールと統合する。開発者は、事前に定義された役割、目標、指示を持つエージェントを作成し、推論機能とツールベースのアクションを装備できる。また、LLM推論を組み込んだ関数を使用して、構造化された決定論的ワークフローを定義できる。これらのワークフローは、ツール統合の柔軟性を維持しながら、事前に定義された順序で制御されたタスクの実行を保証する。
エージェントワークフローの例(出典)
Dapr Agentsはマルチエージェントワークフローをサポートしており、エージェントはDaprのpub/subメッセージングを使用して共同作業ができる。調整モデルには、LLMベースの意思決定、ランダム選択、ラウンドロビンタスク分配が含まれ、適応的で自己推論的なワークフローを可能にする。著者はこの件について詳しく述べている。
エージェントは、イベントに動的に応答する自律的なエンティティとして動作し、ワークフローと協調したリアルタイムの相互作用とコラボレーションを可能にする必要があります。これらのイベント駆動型エージェントワークフローは、Daprのpub/subメッセージングシステムを活用します。これにより、エージェントはコミュニケーションし、タスクを共有し、環境によってトリガーされるイベントを通じて推論できます。
エージェントはメッセージブローカーを介して他のエージェントと通信できる。(出典)
データベースやメッセージブローカーとの統合を抽象化した設計により、開発者はコードを大幅に変更することなくインフラストラクチャプロバイダを切り替えられる。PrometheusやOpenTelemetryなどの監視ツールともシームレスに統合され、オブザーバビリティを提供する。CNCFのプロジェクトとして、安全な通信とフォールトトレランスを確保しながら、ベンダーロックインを回避する。
開発者は、GitHubリポジトリでDapr Agentsの機能を調べたり、Discordコミュニティに参加したりすることでディスカッションやサポートを受けられる。
InfoQは、DiagridのCTOでありDaprのメインテナーであるYaron Schneider氏に、Dapr Agentsとその実装、今後の計画について話を聞いた。
InfoQ: Dapr Agentsは、シングルコアで数千のエージェントを実行可能に設計されていると述べました。この効率レベルを可能にする最適化やアーキテクチャの選択は何ですか。また、アーキテクチャはKubernetes環境でのスケーリングをどのように考慮すべきですか?
Yaron Schneider氏: Dapr Agentsは、エージェントとそれに続くタスクをアクターとして表現しており、非常に軽量で耐久性のあるオブジェクトで、非常に低いレイテンシーで数百万規模にスケールできます。これにより、Dapr Agentsは最小限のCPUとメモリ要件で大量のエージェントを実行できます。DaprはKubernetesとネイティブに動作し統合されるため、このプラットフォームの既存ユーザーは、Dapr Agentsが障害に非常に強く、Kubernetesポッドのエフェメラルな性質を考慮していることを知っておく必要があります。
InfoQ: 非同期で相互作用する分散AIエージェントでは、デバッグとオブザーバビリティが重要になります。Dapr Agentsは、エージェントの動作を監視、ログ記録、トラブルシューティングするために、どのような組み込み機能を提供していますか?
Schneider氏: Daprの上に構築されたDapr Agentsは、1秒あたりのリクエスト数、エラー率、レイテンシーなど、エージェント型ワークフローに関するメトリクスを出力する。さらに、Dapr Workflowsは分散トレーシングをサポートしているため、開発者はOTel準拠のツールを使ってエージェントのコールグラフを視覚化できる。我々は今後、エージェントのオブザーバビリティにさらに投資していくつもりだ。
InfoQ: Dapr Agentsの次の予定は何ですか?LLM統合の強化、新しいワークフロープリミティブ、より広範なマルチクラウド機能など、計画されている機能や改善点はありますか?
Schneider氏: データ合成はエージェント型ワークロードの重要な側面となりつつあるので、開発者がステートストアとバインディングAPIを介してDapr Agentsを様々なデータソースやDaprのネイティブ機能に接続できるように、Model Context Protocol(MCP)との統合を計画している。また、DaprのConversation APIを通じて、LLMプロバイダーのサポートも追加する予定だ。もっとも重要なこととして、Dapr Agentsは現在Pythonで利用可能であり、DotnetとJavaのサポート追加に取り組んでいる。