智能体编排应用

智能体编排应用可以帮助您构建具备自动规划协同能力的多智能体群组,让各智能体高效协作处理复杂任务。本文将引导您快速上手构建智能体编排应用,并了解更多进阶功能。

为什么选择智能体编排

与单个智能体应用相比,智能体编排有以下优势:

  • 协作与灵活性:智能体编排应用由多个具有自治能力的智能体组成,这些智能体可以相互通信、信息共享和协作,能够完成单个智能体难以完成的复杂任务。这种协作性使得智能体编排应用在需要多方协作和多路径并行处理任务的环境中表现出色。

  • 可扩展性与健壮性:智能体编排应用具有更高的可扩展性和健壮性。您可以调整智能体的数量和角色,以适应不同的任务需求,从而提高应用的灵活性和适应性。

  • 任务分解与并行处理:智能体编排应用可以将复杂任务分解为多个子任务,由不同的智能体并行处理,从而提高任务执行的效率和速度。

  • 自动规划能力:智能体编排应用可以根据任务需求自动规划任务执行流程,灵活调度子智能体。

  • 完整的智能体功能:即使具备上述流程功能,智能体节点依然支持RAG、插件和流程编排等功能,与单个智能体的功能保持一致。

快速入门

我们将以日程管理助手为例,帮助您快速上手智能体编排应用。

场景描述:日程管理助手

问题

用户需要一个智能助手帮助他们收集和整理日程安排。我们的目标是设计一个系统,能够接收用户的日程信息,并将其整理成一个结构化的日历格式。

解决方案

我们使用智能体编排应用,将任务分解为两个独立的智能体,每个智能体负责不同的子任务。

角色和任务

角色

任务

功能描述

示例输入

示例输出

信息收集智能体

从用户侧收集日程信息。

接收用户输入的日程安排,如会议、任务、约会等。然后将这些信息传递给数据整理智能体。

用户输入“明天上午10点有个团队会议”。

将输入转换为结构化数据,如 {"日期": "明天", "时间": "上午10点", "事件": "团队会议"}。

数据整理智能体

将收集到的日程信息整理成日历格式。

接收信息收集智能体传来的结构化数据,并将这些信息按照日期和时间进行排序,最终输出一个用户友好、易于查看的日历。

{"日期": "明天", "时间": "上午10点", "事件": "团队会议"}

将信息添加到用户日历中,例如 用户日历:{"2024-08-19": [{"时间": "上午10点", "事件": "团队会议"}]}

示例

  • 用户输入

    “明天上午10点有个团队会议”

  • 信息收集智能体处理:

    将输入解析为 {"日期": "明天", "时间": "上午10点", "事件": "团队会议"}

  • 数据整理智能体处理:

    将结构化数据添加到日历中,生成结果:

    {
      "用户日历": {
        "2024-08-19": [
          {
            "时间": "上午10点",
            "事件": "团队会议"
          }
        ]
      }
    }

提示词设计

您需要为两个智能体分别设计提示词,我们提供了样例提示词供您选择:

信息收集智能体

你是一个智能助手,负责收集用户的日程安排。用户会以自然语言输入他们的日程信息。你的任务是解析这些输入,并提取出日期、时间和事件。输出格式应该是结构化的JSON对象。
示例输入:
"明天上午10点有个团队会议"
示例输出:
{
  "日期": "明天",
  "时间": "上午10点",
  "事件": "团队会议"
}
当用户输入日程安排时,请按照上述格式返回解析后的数据。

数据整理智能体

你是一个智能助手,负责整理用户的日程安排。你将接收来自另一个Agent传递的结构化数据,并将这些数据添加到用户的日历中。请确保数据按照日期和时间排序,并输出更新后的日历。

示例输入:
{
  "日期": "明天",
  "时间": "上午10点",
  "事件": "团队会议"
}

示例输出:
{
  "用户日历": {
    "2024-08-19": [
      {
        "时间": "上午10点",
        "事件": "团队会议"
      }
    ]
  }
}

请将接收的数据添加到用户的日历中,并返回更新后的结果。

创建应用

  1. 访问我的应用,点击新增应用,创建智能体编排应用

image

  1. 从左侧节点列表中拖动一个智能体群组节点到画布中。

image

  1. 删除开始节点的两个输入参数。

    在这里无需预置的输入参数。

bailian

  1. 配置智能体群组节点的群组名称和群组模型。

    群组名称:日程管理助手
    模型选择:通义千问-Plus

image

  1. 配置智能体群组的子智能体。

    • 信息收集智能体

      智能体名称:信息收集
      描述:接收用户输入的日程安排,如会议、任务、约会等。然后将这些信息传递给数据整理智能体。
      模型配置:通义千问-Plus
      Prompt:请参考示例
    • 数据整理智能体

      智能体名称:数据整理
      描述:接收信息收集智能体传来的结构化数据,并将这些信息按照日期和时间进行排序,最终输出一个用户友好、易于查看的日历。
      模型配置:通义千问-Plus
      Prompt:示例

image

image

  1. 按照图示连接各节点,并配置节点的输入输出参数。

image

image

测试、发布与 API 调用

  1. 您可以使用画布中的测试功能,测试应用效果。

image

image

  1. 点击画布中的发布按钮,即可发布应用。

image

  1. 点击画布中的API示例,您可以参考这些示例,通过API调用您刚发布的应用。

from http import HTTPStatus
from dashscope import Application


def call_agent_app():
    response = Application.call(app_id='YOUR_APP_ID',
                                prompt='明天早上10点参加周会。',
                                api_key='YOUR_API_KEY',
                                # 如果在开始节点定义了变量,请在这里传参
                                # biz_params = {
                                #    "city": "杭州",
                                #    "date": "明天"
                                # }
                                )

    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{
      public static void callAgentApp()
            throws ApiException, NoApiKeyException, InputRequiredException {
        // 如果在开始节点定义了变量,请在这里传参
        // String bizParams = "{\"city\":\"杭州\",\"date\":\"明天\"}"
        ApplicationParam param = ApplicationParam.builder()
            .apiKey("YOUR_API_KEY")
                .appId("YOUR_APP_ID")
                .prompt("明天早上10点参加周会。")
            //  .bizParams(JsonUtils.parse(bizParams))
                .build();

        Application application = new Application();
        ApplicationResult result = application.call(param);

        System.out.printf("requestId: %s, text: %s, finishReason: %s\n",
                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.aliyuncs.com/api/v1/apps/YOUR_APP_ID/completion' \
--header 'Authorization: Bearer {YOUR_API_KEY}' \
--header 'Content-Type: application/json' \
--data '{
    "input": {
        "prompt": "明天早上10点参加周会。"
    },
# 如果在开始节点定义了变量,请在这里传参
#   "biz_params":{
#       "city": "杭州",
#       "date": "明天"  
#   },
    "parameters":  {},
    "debug": {}
}' --verbose

进阶功能

功能节点

以下是各功能节点的简介,您可以了解节点的功能、适用性,以及详细的参数配置方法,从而掌握创建智能体编排应用的节点用法。

开始节点

简介

参数配置

输入

输出

其他参数

用于接收用户输入,可自定义多个变量。

query默认用于接收用户输入的变量

您可以自定义若干个变量,用于接收用户输入。

与输入变量相同

结束节点

简介

参数配置

输入

输出

其他参数

用于输出内容,支持文本输出和JSON输出。

需要输出给用户的内容。可插入若干变量,支持变量和文本的混合排版

与输入变量相同

智能体应用

简介

用法

参数配置

输入

输出

其他参数

选择我的应用中已经创建好的智能体应用。

导入已有的智能体

用于输入智能体的内容

智能体生成的内容

只能在源智能体中定义

智能体创建

简介

用法

参数配置

输入

输出

其他参数

创建一个新的智能体,仅供在编排画布内使用。

创建只在当前应用中使用的智能体

用于输入智能体的内容

智能体生成的内容

智能体名称:智能体的标识符

模型配置:为智能体配置的大模型

Prompt:使用自然语言定义智能体的角色和任务

知识检索增强:即RAG功能,可为智能体配置知识库

插件:允许智能体调用官方插件或自定义插件

流程:允许智能体调用流程编排

智能体群组

简介

建议用法

参数配置

输入

输出

其他参数

创建一个包含多个智能体的群组,自动协同多个智能体执行任务。

适合需要智能规划的任务。如果您需要完成一个较大的项目,又不知道如何设计具体的流程,那么建议您选择该节点

用于输入智能体群组的内容

智能体群组生成的内容

agResult推理结果

agProcess推理过程

群组名称:智能体群组名称

模型选择:选择决策模型

子智能体:其他参数与智能体创建节点相同

决策分类

简介

建议用法

参数配置

输入

输出

其他参数

根据类别描述智能匹配后续链路,可用于用户意图分类、任务场景分类。

适合需要智能决策的任务。如果您希望借助大模型智能判断流程的下一步走向,那么建议您选择该节点

用于输入决策模型的内容

决策模型生成的内容

thought思考过程

subject命中主题

类别配置:自定义的类别。根据您的类别描述,如果决策模型判断输入内容属于某一类别,工作流将切换到该分支的后续流程。

其他类别:默认决策类别。如果决策模型判断输入内容不属于您规定的任一类别,工作流将切换到该分支的后续流程。

文本转换

简介

建议用法

参数配置

输入

输出

其他参数

使用模板进行转换或处理文本内容。

适合直观的编排智能体节点生成的内容

需要转换格式的文本。可插入若干变量,支持变量和文本的混合排版

排版后的内容

脚本转换

简介

建议用法

参数配置

输入

输出

其他参数

使用脚本进行转换或处理文本内容。

适合按照JSON格式编排智能体节点生成的内容

需要转换格式的文本

JSON Schema格式化输出变量

代码:支持使用PythonJavaScript脚本转换文本

JSON Schema生成器可以根据目标JSON示例生成用于输出的JSON Schema。

更多文章

如果您想了解创建和使用智能体应用的方法,请访问智能体应用

如果您想了解创建和使用工作流应用的方法,请访问工作流应用