エージェントオーケストレーションアプリケーションを作成して、自律的に連携し計画するエージェントのグループを構築できます。 このトピックでは、エージェントオーケストレーションアプリケーションとその高度な機能の作成方法について説明します。
2025 年 4 月 21 日より前に Model Studio アプリケーションを作成したユーザーのみが、[アプリケーション] タブにアクセスし、アプリケーション(エージェントアプリケーション、ワークフローアプリケーション、エージェントオーケストレーションアプリケーション)、コンポーネント(プロンプト、プラグイン)、データ(ナレッジベース、アプリケーションデータ)機能と関連 API を含むすべての機能を使用できます。 この機能はプレビュー版です。 本番環境では注意して使用してください。
なぜエージェントオーケストレーションアプリケーションを使用するのか
エージェントオーケストレーションアプリケーションには、単一エージェントアプリケーションに比べていくつかの利点があります。
コラボレーションと柔軟性: 複数のエージェントが互いに連携して情報を共有することで、単一エージェントよりも効果的に複雑なタスクを完了できます。 この機能は、多者間協力と並列処理が必要なシナリオで特に役立ちます。
拡張性と堅牢性: エージェントオーケストレーションアプリケーションでは、エージェントの数とロールを調整できるため、柔軟性と堅牢性が向上します。
タスクの分解と並列処理: エージェントオーケストレーションアプリケーションは、複雑なタスクをサブタスクに分割し、異なるエージェントが同時に処理することで効率を向上させることができます。
自動計画: エージェントオーケストレーションアプリケーションは、タスク要件に基づいてタスク実行フローを自律的に計画し、サブエージェントをスケジュールできます。
完全なエージェント機能: これらのすべての機能に加えて、エージェントオーケストレーションアプリケーションは、RAG やプラグインなど、単一エージェントのすべての機能を維持します。
はじめに
次のセクションでは、スケジュール管理アシスタントを例として、エージェントオーケストレーションアプリケーションの使用を開始する方法を説明します。
シナリオの説明: スケジュール管理アシスタント
需要
ユーザーは、スケジュールを管理および整理するためのインテリジェントアシスタントを必要としています。 目標は、スケジュール情報を処理し、構造化されたカレンダーに整理するシステムを設計することです。
ソリューション
タスクは 1 つのエージェントオーケストレーションアプリケーション内の 2 つの独立したエージェントに分割され、各エージェントが特定のサブタスクを処理します。
ロールとタスク
ロール: 情報収集者
タスク: ユーザーからスケジュール情報を収集します。
説明: 会議、タスク、予定などのユーザー入力スケジュールを受信し、この情報をデータオーガナイザーに転送します。
サンプル入力: 「明日の午前 10 時にチームミーティングがあります。」
サンプル出力: {"date": "tomorrow", "time": "10 AM", "event": "team meeting"}
ロール: データオーガナイザー
タスク: 収集されたスケジュール情報をカレンダーに整理します。
説明: 情報収集者からの構造化データを処理し、日付と時間でデータをソートして、ユーザーフレンドリーなカレンダーを作成します。
サンプル入力: {"date": "tomorrow", "time": "10 AM", "event": "team meeting"}
サンプル出力: 情報をユーザーのカレンダーに組み込みます: {"2024-08-19": [{"time": "10 AM", "event": "team meeting"}]}
サンプル
ユーザー入力:
「明日の午前 10 時にチームミーティングがあります。」
情報収集者の処理:
入力を構造化データに変換します: {"date": "tomorrow", "time": "10 AM", "event": "team meeting"}
データオーガナイザーの処理:
構造化データをカレンダーに追加し、次の結果が得られます。
{ "user calendar": { // ユーザーカレンダー "2024-08-19": [ { "time": "10 AM", // 時間 "event": "team meeting" // イベント } ] } }
プロンプト設計
2 つのエージェントに個別のプロンプトを設計します。 プロンプトの例:
情報収集者
You are an intelligent assistant responsible for collecting users' schedules. Users will input their schedule information in natural language. Your task is to parse these inputs and extract the date, time, and event. The output format should be a structured JSON object.
Sample input:
"There is a team meeting at 10 AM tomorrow."
Sample output:
{
"date": "tomorrow",
"time": "10 AM",
"event": "team meeting"
}
When users input their schedules, please return the parsed data in the above format.
// あなたは、ユーザーのスケジュールを収集する責任を持つインテリジェントアシスタントです。 ユーザーはスケジュール情報を自然言語で入力します。 あなたのタスクは、これらの入力を解析し、日付、時間、イベントを抽出することです。 出力形式は構造化 JSON オブジェクトである必要があります。
// サンプル入力:
// "There is a team meeting at 10 AM tomorrow."
// サンプル出力:
// {
// "date": "tomorrow",
// "time": "10 AM",
// "event": "team meeting"
// }
// ユーザーがスケジュールを入力したら、上記の形式で解析されたデータを返してください。
データオーガナイザー
You are an intelligent assistant responsible for organizing users' schedules. You will receive structured data passed from another agent and add this data to the user's calendar. Please ensure the data is sorted by date and time and output the updated calendar.
Sample input:
{
"date": "tomorrow",
"time": "10 AM",
"event": "team meeting"
}
Sample output:
{
"user calendar": {
"2024-08-19": [
{
"time": "10 AM",
"event": "team meeting"
}
]
}
}
Please add the received data to the user's calendar and return the updated result.
// あなたは、ユーザーのスケジュールを整理する責任を持つインテリジェントアシスタントです。 別のエージェントから渡された構造化データを受信し、このデータをユーザーのカレンダーに追加します。 データが日付と時間でソートされていることを確認し、更新されたカレンダーを出力してください。
// サンプル入力:
// {
// "date": "tomorrow",
// "time": "10 AM",
// "event": "team meeting"
// }
// サンプル出力:
// {
// "user calendar": { // ユーザーカレンダー
// "2024-08-19": [
// {
// "time": "10 AM", // 時間
// "event": "team meeting" // イベント
// }
// ]
// }
// }
// 受信したデータをユーザーのカレンダーに追加し、更新された結果を返してください。
アプリケーションの作成
Model Studio コンソールで マイアプリケーション に移動し、 を選択します。
[エージェントグループ] ノードをキャンバスにドラッグします。
開始ノードから 2 つのパラメーター
city
とdate
を削除します。ここでは入力パラメーターは必要ありません。
グループ名を指定し、モデルを選択します。
グループ名: スケジュール管理
モデルの選択: Qwen-Plus
エージェントグループ内のサブエージェントを構成します。
次のスクリーンショットに示すように、ノードを接続し、入力パラメーターと出力パラメーターを構成します。
テスト、公開、および API 呼び出し
キャンバスの右上隅にある [テスト] をクリックして、アプリケーションをテストします。
キャンバスの右上隅にある [公開] をクリックして、アプリケーションを公開します。
を選択して、アプリケーションの API サンプルを表示します。 サンプルを使用して、公開したばかりのアプリケーションを呼び出すことができます。
共有方法の詳細については、「アプリケーションの共有」をご参照ください。
from http import HTTPStatus
from dashscope import Application
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
def call_agent_app():
response = Application.call(app_id='YOUR_APP_ID', // アプリケーションID
prompt='Weekly meeting at 10 a.m. tomorrow', // プロンプト
api_key='YOUR_API_KEY', // APIキー
# If you define any parameters in the Start node, pass them here // 開始ノードでパラメータを定義した場合は、ここで渡します。
# biz_params = { // ビジネスパラメータ
# "city": "Singapore", // 都市
# "date": "Tomorrow" // 日付
# }
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
else:
print('request_id=%s\n output=%s\n usage=%s\n' % (response.request_id, response.output, response.usage))
if __name__ == '__main__':
call_agent_app()
import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import java.util.List;
public class Main{
static {
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void callAgentApp()
throws ApiException, NoApiKeyException, InputRequiredException {
// If you define any parameters in the Start node, pass them here // 開始ノードでパラメータを定義した場合は、ここで渡します。
// String bizParams = "{\"city\":\"Singapore\",\"date\":\"Tomorrow\"}" // ビジネスパラメータ
ApplicationParam param = ApplicationParam.builder()
.apiKey("YOUR_API_KEY") // APIキー
.appId("YOUR_APP_ID") // アプリケーションID
.prompt("Weekly meeting at 10 a.m. tomorrow") // プロンプト
// .bizParams(JsonUtils.parse(bizParams)) // ビジネスパラメータ
.build();
Application application = new Application();
ApplicationResult result = application.call(param);
System.out.printf("requestId: %s, text: %s, finishReason: %s\n", // リクエストID、テキスト、完了理由
result.getRequestId(), result.getOutput().getText(), result.getOutput().getFinishReason());
}
public static void main(String[] args) {
try {
callAgentApp();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.printf("Exception: %s", e.getMessage());
}
System.exit(0);
}
}
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/apps/YOUR_APP_ID/completion' \ // アプリケーションID
--header 'Authorization: Bearer {YOUR_API_KEY}' \ // APIキー
--header 'Content-Type: application/json' \
--data '{
"input": {
"prompt": "Weekly meeting at 10 a.m. tomorrow" // プロンプト
},
# If you define any parameters in the Start node, pass them here // 開始ノードでパラメータを定義した場合は、ここで渡します。
# "biz_params":{ // ビジネスパラメータ
# "city": "Singapore", // 都市
# "date": "Tomorrow" // 日付
# },
"parameters": {},
"debug": {}
}' --verbose
高度な機能
ノードの説明
次のセクションでは、ノードについて、その機能、適切なシナリオ、および構成方法について説明します。
開始ノード
ユーザー入力を許可し、複数の変数を許可します。
入力:
query
はユーザー入力のデフォルト変数です。カスタム変数を定義してユーザー入力をキャプチャできます。
出力: 入力変数。
その他のパラメーター: なし。
終了ノード
テキストまたは JSON 形式で出力します。
入力: ユーザーに返されるコンテンツ。変数とテキストを混在させることができます。
出力: 入力変数。
その他のパラメーター: なし。
エージェントアプリケーション
[マイアプリケーション] から既に作成されたエージェントアプリケーション。
使用方法: 既存のエージェントをインポートします。
入力: エージェントへの入力。
出力: エージェントによって生成されたコンテンツ。
その他のパラメーター: ソースエージェントアプリケーションでのみ定義できます。
エージェントの作成
キャンバス内でのみ使用可能な新しいエージェントを作成します。
使用方法: 現在のアプリケーションでのみ使用されるエージェントを作成します。
入力: エージェントへの入力。
出力: エージェントによって生成されたコンテンツ。
その他のパラメーター:
[エージェント名]: エージェントの名前。
[モデル構成]: エージェントの LLM。
[プロンプト]: 自然言語でのエージェントのロールとタスク。
[ナレッジ検索拡張]: RAG 機能。 エージェントのナレッジベースを構成できます。
[プラグイン]: エージェントは公式またはカスタムプラグインを使用できます。
エージェントグループ
共同でタスクを完了する複数のエージェントのグループを作成します。
推奨される使用方法: インテリジェントな計画が必要なタスクに最適です。 事前に定義されたプロセスなしで複雑なプロジェクトを完了する必要がある場合は、このノードをお勧めします。
入力: エージェントグループへの入力。
出力:
agResult
: エージェントグループによって生成されたコンテンツ。agProcess
: 推論プロセス。
その他のパラメーター:
[グループ名]: エージェントグループの名前。
[モデルの選択]: グループの LLM。
[エージェント]: サブエージェントのその他のパラメーターは、[エージェントの作成] ノードと同じです。
決定分類
ユーザー入力を後続のアクションにインテリジェントに一致させます。ユーザーの意図やタスクシナリオの分類に役立ちます。
推奨される使用方法: スマートな意思決定が必要なタスクに最適です。 LLM を使用してインテリジェントなプロセス決定を行う場合は、このノードをお勧めします。
入力: 意思決定モデルへの入力。
出力:
thought
: 推論プロセス。subject
: 一致するカテゴリ。その他のパラメーター:
[カテゴリ設定]: カテゴリを設定し、説明を入力します。モデルは、説明に基づいて後続のリンクを照合します。
[その他のカテゴリ]: 他のカテゴリが一致しない場合、このリンクが照合されます。
テキスト変換
テンプレートを使用して、テキストコンテンツを変換または処理します。
推奨される使用方法: エージェントノードによって生成されたコンテンツの簡単なオーケストレーションに最適です。
入力: フォーマット変換が必要なテキスト。変数挿入と混合活字設定をサポートします。
出力: フォーマット済み出力コンテンツ。
その他のパラメーター: なし。
スクリプト変換
スクリプトを使用して、テキストコンテンツを変換または処理します。
推奨される使用方法: エージェントノードによって JSON フォーマットで生成されたコンテンツの調整に最適です。
入力: フォーマット変換が必要なテキスト。
出力: JSON スキーマフォーマットでの出力
その他のパラメーター:
[コード]: Python または JavaScript の変換コード。
[JSON スキーマジェネレーター]: ターゲット JSON 構造に基づいて JSON スキーマを生成します。
条件判断
ノード内のパラメーターに対して条件付きチェックを実行し、異なるブランチのテキスト変換ノードを介して出力応答を生成します。
推奨される使用方法: 条件付きチェック後に結果が生成されるシナリオに最適です。
入力: 条件付きチェックが必要なパラメータ。
出力: 異なるブランチのテキスト変換ノードを介して出力を生成します。
その他のパラメーター: なし。
アプリケーションバージョンを表示する
[公開] を [キャンバス設定] ページの右上隅でクリックします。バージョン情報を入力し、[OK] をクリックします。
ページ上部の
をクリックします。[履歴バージョン] パネルで、[このバージョンを使用] または [現在のキャンバスに戻る] をクリックすることで、アプリケーションの異なるバージョンを表示または使用できます。
[このバージョンを DSL でエクスポート] をクリックすることもできます。
(オプション) [ツールバー] の [現在のノード] パネルでノードを表示または検索します。
次のステップ
詳細については、「エージェント アプリケーション」をご参照ください。
詳細については、「ワークフロー アプリケーション」をご参照ください。