对话接口使用示例

本文档为您介绍如何通过阿里云SDK(JavaPython),调用云数据库RDS AI能力的ChatMessages接口。您将学习到如何实现单次对话、多轮对话,以及如何创建和使用专属Agent进行定制化交互。

前提条件

  • 已开通阿里云RDS AI助手专业版

  • 已创建并获取AccessKey IDAccessKey Secret。为安全起见,建议使用RAM用户的AccessKey。具体操作,请参见查看RAM用户的AccessKey信息

准备工作

开发环境配置

准备好开发环境和SDK(JavaPython任选其一),并完成相应配置。

Java 开发环境

  • 环境要求:JDK 8或更高版本。

  • SDK安装:下载并解压缩示例代码下载项目,找到Java代码的pom.xml文件中,控制台执行以下命令安装相应的依赖。

    mvn clean install

Python 开发环境

  • 环境要求:Python 3.7或更高版本。

  • SDK安装:下载并解压缩示例代码下载项目,找到Python代码的requirements.txt文件,控制台执行以下命令安装依赖:

    pip install -r requirements.txt

环境变量配置

为了访问密钥(AccessKey)安全,执行以下脚本,将AccessKey IDAccessKey Secret配置为环境变量(ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET),避免在代码中硬编码。

export ALIBABA_CLOUD_ACCESS_KEY_ID="your_aliyun_access_key_id"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_aliyun_access_key_secret"

操作步骤

场景一:执行单次对话

单次对话适用于一次性问答场景,发送一个问题并接收完整的流式回答。

核心逻辑

  1. 初始化SDK客户端,配置地域(Region)、认证信息(Credentials)和服务入口(Endpoint)。

  2. 构建ChatMessagesRequest请求,设置query(您的问题)和inputs(上下文参数,如regionIdlanguage等)。

  3. 发起流式调用(chatMessagesWithResponseIterablechatMessages_with_sse)。

  4. 遍历响应迭代器,逐片打印收到的回答。

代码示例

Java示例

package com.aliyun.test;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.rdsai20250507.AsyncClient;
import com.aliyun.sdk.service.rdsai20250507.models.ChatMessagesRequest;
import com.aliyun.sdk.service.rdsai20250507.models.ChatMessagesResponseBody;
import darabonba.core.ResponseIterable;
import darabonba.core.ResponseIterator;
import darabonba.core.client.ClientOverrideConfiguration;
import org.apache.commons.lang3.StringUtils;

public class ChatMessagesSingleTurnDemo {
    public static void main(String[] args) {
        StaticCredentialProvider provider = StaticCredentialProvider.create(
                Credential.builder()
                        // 请确保已设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                        .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                        .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                        //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // 使用STS token
                        .build());
        AsyncClient client = AsyncClient.builder()
                .region("cn-hangzhou")
                .credentialsProvider(provider)
                .serviceConfiguration(Configuration.create()
                        .setSignatureVersion(SignatureVersion.V3)
                ).overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setProtocol("HTTPS")
                                // Endpoint 请参考 https://api.aliyun.com/product/RdsAi
                                .setEndpointOverride("rdsai.aliyuncs.com")
                ).build();

        //指定专属Agent对话则传入专属AgentID,专属AgentID在调用CreateCustomAgent接口成功后会返回,也可以通过接口ListCustomAgent获取当前创建的专属Agent列表中查询,详情查看ListCustomAgent接口文档
        //传入专属AgentID的Inputs: ChatMessagesRequest.Inputs.builder().timezone("Asia/Shanghai").regionId("cn-hangzhou").language("zh-CN").customAgentId("5f1bbe8a-88d8-4a72-81e5-2a5d9d43****").build();
        ChatMessagesRequest.Inputs inputs = ChatMessagesRequest.Inputs.builder()
                .timezone("Asia/Shanghai")
                .regionId("cn-hangzhou")
                .language("zh-CN")
                .build();

        // 多轮对话需要指定conversationId(会话ID),会话ID在调用ChatMessages接口成功后会返回,详情查看ChatMessages接口文档
        ChatMessagesRequest request = ChatMessagesRequest.builder()
                .inputs(inputs)
                .query("查询杭州地域实例列表")
                .build();
        try {
            ResponseIterable<ChatMessagesResponseBody> iterable = client.chatMessagesWithResponseIterable(request);
            ResponseIterator<ChatMessagesResponseBody> iterator = iterable.iterator();
            while (iterator.hasNext()) {
                ChatMessagesResponseBody chunk = iterator.next();
                if (StringUtils.equals(chunk.getEvent(), "message")) {
                    System.out.print(chunk.getAnswer());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 关闭客户端
        client.close();
    }
}

Python示例

# -*- coding: utf-8 -*-
import os
import sys
from typing import List

from alibabacloud_rdsai20250507.client import Client as RdsAi20250507Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_rdsai20250507 import models as rds_ai_20250507_models
from alibabacloud_tea_util import models as util_models

class ChatMessagesSingleTurnDemo:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> RdsAi20250507Client:

        # 请确保已设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET
        config = open_api_models.Config(
            access_key_id=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        )
        # Endpoint 请参考 https://api.aliyun.com/product/RdsAi
        config.endpoint = 'rdsai.aliyuncs.com'
        return RdsAi20250507Client(config)

    @staticmethod
    def main() -> None:
        client = ChatMessagesSingleTurnDemo.create_client()
        # 指定专属Agent对话则传入专属AgentID,专属AgentID在调用CreateCustomAgent接口成功后会返回,也可以通过接口ListCustomAgent获取当前创建的专属Agent列表中查询,详情查看ListCustomAgent接口文档
        # inputs = rds_ai_models.ChatMessagesRequestInputs(language="zh-CN", region_id="cn-hangzhou", timezone="Asia/Shanghai",
        #                                                  custom_agent_id="5f1bbe8a-88d8-4a72-81e5-2a5d9d43****")
        inputs = rds_ai_20250507_models.ChatMessagesRequestInputs(
            language="zh-CN",
            region_id="cn-hangzhou",
            timezone="Asia/Shanghai"
        )
        # 多轮对话需要指定conversationId(会话ID),会话ID在调用ChatMessages接口成功后会返回,详情查看ChatMessages接口文档
        chat_messages_request = rds_ai_20250507_models.ChatMessagesRequest(
            query="查询杭州地域实例列表",
            inputs=inputs
        )

        runtime = util_models.RuntimeOptions()
        chat_messages_response = client.chat_messages_with_sse(tmp_req=chat_messages_request, runtime=runtime)
        for chunk in chat_messages_response:
            body = chunk.body
            if body is not None and body.event == 'message':
                print(f"{body.answer}", end="")

if __name__ == '__main__':
    ChatMessagesSingleTurnDemo.main()

场景二:执行多轮对话

多轮对话允许您在同一上下文中进行连续问答。这通过conversationId(会话ID)来实现。

核心逻辑

  1. 首次对话:同单次对话,但不传递conversationId

  2. 获取会话ID:从首次对话的响应中,获取conversationId。此ID唯一标识了当前的对话会话。

  3. 后续对话:构建新的ChatMessagesRequest请求,除了新的query外,还必须传入上一步获取的conversationId

  4. 查询历史(可选):使用GetMessages接口和conversationId,可以获取该会话的完整历史记录。

代码示例

Java示例

package com.aliyun.test;

import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.rdsai20250507.AsyncClient;
import com.aliyun.sdk.service.rdsai20250507.models.*;
import darabonba.core.ResponseIterable;
import darabonba.core.client.ClientOverrideConfiguration;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicReference;

public class ChatMessagesMultiTurnDemo {
    public interface AnswerCallback {
        void onAnswerChunk(ChatMessagesResponseBody chunk);
    }

    private AsyncClient createClient() throws Exception {
        StaticCredentialProvider provider = StaticCredentialProvider.create(
                Credential.builder()
                        // 请确保已设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                        .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                        .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                        //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // 使用STS token
                        .build());
        AsyncClient client = AsyncClient.builder()
                .region("cn-hangzhou")
                .credentialsProvider(provider)
                .serviceConfiguration(Configuration.create()
                        .setSignatureVersion(SignatureVersion.V3)
                ).overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setProtocol("HTTPS")
                                // Endpoint 请参考 https://api.aliyun.com/product/RdsAi
                                .setEndpointOverride("rdsai.aliyuncs.com")
                ).build();
        return client;
    }

    /**
     * 发送对话消息
     */
    public void chatMessages(String query, String conversationId, ChatMessagesRequest.Inputs inputs, ChatMessagesMultiTurnDemo.AnswerCallback callback) throws Exception {
        try (AsyncClient client = createClient()) {
            ChatMessagesRequest request = ChatMessagesRequest.builder()
                    .conversationId(conversationId)
                    .inputs(inputs)
                    .query(query)
                    .build();
            ;
            ResponseIterable<ChatMessagesResponseBody> iterable = client.chatMessagesWithResponseIterable(request);
            for (ChatMessagesResponseBody event : iterable) {
                callback.onAnswerChunk(event);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 查看具体对话消息
     */
    public GetMessagesResponseBody getMessages(String conversationId) {
        try (AsyncClient client = createClient()) {
            GetMessagesRequest request = GetMessagesRequest.builder()
                    .conversationId(conversationId)
                    .build();
            CompletableFuture<GetMessagesResponse> messages = client.getMessages(request);
            return messages.get().getBody();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) throws Exception {
        ChatMessagesMultiTurnDemo messagesMultiTurnDemo = new ChatMessagesMultiTurnDemo();
        final AtomicReference<String> conversationId = new AtomicReference<>();

        ChatMessagesRequest.Inputs inputs = ChatMessagesRequest.Inputs.builder()
                .timezone("Asia/Shanghai")
                .regionId("cn-hangzhou")
                .language("zh-CN")
                .build();
        // 从初次对话中获取会话ID
        messagesMultiTurnDemo.chatMessages("查询杭州地域的实例列表", null, inputs, new ChatMessagesMultiTurnDemo.AnswerCallback() {
            @Override
            public void onAnswerChunk(ChatMessagesResponseBody event) {
                if ("message".equals(event.getEvent())) {
                    String answer = event.getAnswer();
                    if (answer != null) {
                        System.out.print(answer);
                    }
                    conversationId.set(event.getConversationId());
                }
            }
        });
        System.out.println(System.lineSeparator() + "conversationId:" + conversationId.get());
        // 发起二次对话,使用获取到的会话ID
        messagesMultiTurnDemo.chatMessages("查询第一个实例的详细信息", conversationId.get(), inputs, new ChatMessagesMultiTurnDemo.AnswerCallback() {
            @Override
            public void onAnswerChunk(ChatMessagesResponseBody event) {
                if ("message".equals(event.getEvent())) {
                    String answer = event.getAnswer();
                    if (answer != null) {
                        System.out.print(answer);
                    }
                }
            }
        });

        GetMessagesResponseBody messagesResponseBody = messagesMultiTurnDemo.getMessages(conversationId.get());
        System.out.println(System.lineSeparator() + "messagesResponseBody:" + JSON.toJSONString(messagesResponseBody));

    }
}

Python示例

# -*- coding: utf-8 -*-
import os
import sys
from typing import List

from alibabacloud_rdsai20250507.client import Client as RdsAi20250507Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_rdsai20250507 import models as rds_ai_20250507_models
from alibabacloud_tea_util import models as util_models


class ChatMessagesMultiTurnDemo:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> RdsAi20250507Client:

        # 请确保已设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET
        config = open_api_models.Config(
            access_key_id=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        )
        # Endpoint 请参考 https://api.aliyun.com/product/RdsAi
        config.endpoint = 'rdsai.aliyuncs.com'
        return RdsAi20250507Client(config)

    # 发送对话消息
    def do_chatMessages(self, search_query: str, conversation_id: str):
        runtime = util_models.RuntimeOptions(read_timeout=1000 * 100)
        # 指定专属Agent对话则传入专属AgentID,专属AgentID在调用CreateCustomAgent接口成功后会返回,也可以通过接口ListCustomAgent获取当前创建的专属Agent列表中查询,详情查看ListCustomAgent接口文档
        # inputs = rds_ai_models.ChatMessagesRequestInputs(language="zh-CN", region_id="cn-hangzhou", timezone="Asia/Shanghai",
        #                                                  custom_agent_id="5f1bbe8a-88d8-4a72-81e5-2a5d9d43****")
        inputs = rds_ai_20250507_models.ChatMessagesRequestInputs(
            language="zh-CN",
            region_id="cn-hangzhou",
            timezone="Asia/Shanghai"
        )
        # 多轮对话需要指定conversationId(会话ID),会话ID在调用ChatMessages接口成功后会返回,详情查看ChatMessages接口文档
        request = rds_ai_20250507_models.ChatMessagesRequest(
            query=search_query,
            inputs=inputs,
            conversation_id=conversation_id
        )
        sse_response = self.create_client().chat_messages_with_sse(tmp_req=request, runtime=runtime)
        return sse_response

    # 查看具体对话消息
    def do_getMessages(self, conversation_id: str):
        request = rds_ai_20250507_models.GetMessagesRequest(conversation_id=conversation_id)
        messages = self.create_client().get_messages(request)
        if messages and messages.body:
            return messages.body
        return None

    @staticmethod
    def main() -> None:
        chat_message = ChatMessagesMultiTurnDemo()
        conversation_id = None

        # 从初次对话中获取会话ID
        chat_messages_response = chat_message.do_chatMessages(search_query="查询杭州地域的实例列表", conversation_id=None)
        for chunk in chat_messages_response:
            body = chunk.body
            if body is not None and body.event == 'message':
                print(f"{body.answer}", end="")
                conversation_id = body.conversation_id

        assert conversation_id is not None

        # 发起二次对话,使用获取到的会话ID
        chat_messages_response = chat_message.do_chatMessages(search_query="查询第一个实例的详细信息", conversation_id=conversation_id)
        for chunk in chat_messages_response:
            body = chunk.body
            if body is not None and body.event == 'message':
                print(f"{body.answer}", end="")

        messages_body = chat_message.do_getMessages(conversation_id)
        print("\n" + str(messages_body))


if __name__ == '__main__':
    ChatMessagesMultiTurnDemo.main()

场景三:创建并使用专属Agent

专属Agent允许您定义一个具有特定角色、指令和工具集的AI助手,以完成更专业的任务。

核心逻辑

  1. 创建Agent:调用CreateCustomAgent接口,定义Agent的名称(name)、系统提示(systemPrompt)和可用工具(tools)。成功后返回customAgentId

  2. (可选)管理Agent:

    • ListCustomAgent:列出您已创建的Agent。

    • UpdateCustomAgent:更新指定Agent的配置。

    • DeleteCustomAgent:删除不再需要的Agent。

  3. 使用Agent对话:在调用ChatMessages接口时,在inputs参数中传入您创建的customAgentId

  4. 发起对话:后续的对话流程与单次或多轮对话相同,但AI的行为将遵循Agent的设定。

代码示例

Java示例

package com.aliyun.test;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.rdsai20250507.AsyncClient;
import com.aliyun.sdk.service.rdsai20250507.models.*;
import darabonba.core.ResponseIterable;
import darabonba.core.client.ClientOverrideConfiguration;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;

public class CustomAgentDemo {
    public interface AnswerCallback {
        void onAnswerChunk(ChatMessagesResponseBody chunk);
    }

    private AsyncClient createClient() throws Exception {
        StaticCredentialProvider provider = StaticCredentialProvider.create(
                Credential.builder()
                        // 请确保已设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                        .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                        .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                        //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // 使用STS token
                        .build());
        AsyncClient client = AsyncClient.builder()
                .region("cn-hangzhou")
                .credentialsProvider(provider)
                .serviceConfiguration(Configuration.create()
                        .setSignatureVersion(SignatureVersion.V3)
                ).overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setProtocol("HTTPS")
                                // Endpoint 请参考 https://api.aliyun.com/product/RdsAi
                                .setEndpointOverride("rdsai.aliyuncs.com")
                ).build();
        return client;
    }

    /**
     * 发送对话消息
     */
    public void chatMessages(String query, String conversationId, ChatMessagesRequest.Inputs inputs, CustomAgentDemo.AnswerCallback callback) throws Exception {
        try (AsyncClient client = createClient()) {
            ChatMessagesRequest request = ChatMessagesRequest.builder()
                    .conversationId(conversationId)
                    .inputs(inputs)
                    .query(query)
                    .build();
            ;
            ResponseIterable<ChatMessagesResponseBody> iterable = client.chatMessagesWithResponseIterable(request);
            for (ChatMessagesResponseBody event : iterable) {
                callback.onAnswerChunk(event);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 创建专属Agent
     */
    public String createCustomAgent(String agentName, String prompt, boolean enableTools, List<String> tools) throws Exception {
        CompletableFuture<CreateCustomAgentResponse> response;
        try (AsyncClient client = createClient()) {
            CreateCustomAgentRequest request = CreateCustomAgentRequest.builder()
                    .name(agentName)
                    .systemPrompt(prompt)
                    .enableTools(enableTools)
                    .tools(tools)
                    .build();
            response = client.createCustomAgent(request);
            return response.get().getBody().getId();
        }
    }

    /**
     * 通过名称获取专属Agent
     */
    public ListCustomAgentResponseBody.Data getCustomAgent(String agentName) throws Exception {
        CompletableFuture<ListCustomAgentResponse> response;
        try (AsyncClient client = createClient()) {
            ListCustomAgentRequest request = ListCustomAgentRequest.builder()
                    .pageNumber(1L)
                    .pageSize(30L)
                    .build();
            response = client.listCustomAgent(request);
            for (ListCustomAgentResponseBody.Data agent : response.get().getBody().getData()) {
                if (agent.getName().equals(agentName)) {
                    return agent;
                }
            }
        }
        return null;
    }

    /**
     * 更新专属Agent
     */
    public String updateCustomAgent(String agentId, String prompt, boolean enableTools, List<String> tools) throws Exception {
        CompletableFuture<UpdateCustomAgentResponse> response;
        try (AsyncClient client = createClient()) {
            UpdateCustomAgentRequest request = UpdateCustomAgentRequest.builder()
                    .customAgentId(agentId)
                    .systemPrompt(prompt)
                    .enableTools(enableTools)
                    .tools(tools)
                    .build();
            response = client.updateCustomAgent(request);
            return response.get().getBody().getId();
        }
    }

    /**
     * 删除专属Agent
     */
    public String deleteCustomAgent(String agentId) throws Exception {
        CompletableFuture<DeleteCustomAgentResponse> response;
        try (AsyncClient client = createClient()) {
            DeleteCustomAgentRequest request = DeleteCustomAgentRequest.builder()
                    .customAgentId(agentId)
                    .build();
            response = client.deleteCustomAgent(request);
            return response.get().getBody().getResult();
        }
    }

    public static void main(String[] args) throws Exception {
        CustomAgentDemo messagesMultiTurnDemo = new CustomAgentDemo();

        String agentName = "copilot-agent";
        // 创建用户Agent
        String customAgentId = messagesMultiTurnDemo.createCustomAgent(agentName, "copilot-agent-prompt", true, Arrays.asList("describe_db_instances"));

        // 更新用户Agent
        String updateCustomAgentId = messagesMultiTurnDemo.updateCustomAgent(customAgentId, "你是一个专门获取指定地域下实例信息列表的专属agent,你可以调用[describe_db_instances]工具来帮你获取信息,并为我生成详细的信息总结。", true, Arrays.asList("describe_db_instances"));

        // 查询用户Agent
        ListCustomAgentResponseBody.Data customAgent = messagesMultiTurnDemo.getCustomAgent(agentName);
        if (!customAgent.getName().equals(agentName)) {
            throw new RuntimeException("Agent name mismatch: expected " + agentName + ", got " + customAgent.getName());
        }
        if (!customAgent.getSystemPrompt().equals("你是一个专门获取指定地域下实例信息列表的专属agent,你可以调用[describe_db_instances]工具来帮你获取信息,并为我生成详细的信息总结。")) {
            throw new RuntimeException("Agent prompt mismatch: expected '你是一个专门获取指定地域下实例信息列表的专属agent,你可以调用[describe_db_instances]工具来帮你获取信息,并为我生成详细的信息总结。', got " + customAgent.getSystemPrompt());
        }

        ChatMessagesRequest.Inputs inputs = ChatMessagesRequest.Inputs.builder()
                .timezone("Asia/Shanghai")
                .regionId("cn-hangzhou")
                .language("zh-CN")
                .customAgentId(customAgentId)
                .build();

        // 开始发送对话
        messagesMultiTurnDemo.chatMessages("查询杭州地域有哪些实例即将到期", null, inputs, new CustomAgentDemo.AnswerCallback() {
            @Override
            public void onAnswerChunk(ChatMessagesResponseBody event) {
                if ("message".equals(event.getEvent())) {
                    String answer = event.getAnswer();
                    if (answer != null) {
                        System.out.print(answer);
                    }
                }
            }
        });

        //删除用户Agent
        String deleteCustomAgent = messagesMultiTurnDemo.deleteCustomAgent(customAgentId);
        System.out.println(System.lineSeparator() + deleteCustomAgent);
    }
}

Python示例

# -*- coding: utf-8 -*-
import os

from alibabacloud_rdsai20250507.client import Client as RdsAi20250507Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_rdsai20250507 import models as rds_ai_20250507_models
from alibabacloud_tea_util import models as util_models

class CustomAgentDemo:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> RdsAi20250507Client:

        # 请确保已设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET
        config = open_api_models.Config(
            access_key_id=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        )
        # Endpoint 请参考 https://api.aliyun.com/product/RdsAi
        config.endpoint = 'rdsai.aliyuncs.com'
        return RdsAi20250507Client(config)

    # 发送对话消息
    def do_chat_messages(self, search_query: str, custom_agent_id: str, conversation_id: str):
        runtime = util_models.RuntimeOptions(read_timeout=1000 * 100)
        # 指定专属Agent对话则传入专属AgentID,专属AgentID在调用CreateCustomAgent接口成功后会返回,也可以通过接口ListCustomAgent获取当前创建的专属Agent列表中查询,详情查看ListCustomAgent接口文档
        # inputs = rds_ai_20250507_models.ChatMessagesRequestInputs(language="zh-CN", region_id="cn-hangzhou", timezone="Asia/Shanghai",
        #                                                  custom_agent_id="5f1bbe8a-88d8-4a72-81e5-2a5d9d43****")
        inputs = rds_ai_20250507_models.ChatMessagesRequestInputs(
            language="zh-CN",
            region_id="cn-hangzhou",
            timezone="Asia/Shanghai",
            custom_agent_id=custom_agent_id
        )
        # 多轮对话需要指定conversationId(会话ID),会话ID在调用ChatMessages接口成功后会返回,详情查看ChatMessages接口文档
        request = rds_ai_20250507_models.ChatMessagesRequest(
            query=search_query,
            inputs=inputs,
            conversation_id=conversation_id
        )
        sse_response = self.create_client().chat_messages_with_sse(tmp_req=request, runtime=runtime)
        return sse_response

    # 创建专属Agent
    def do_create_custom_agent(self, agent_name: str, prompt: str,
                               enable_tools: bool, tools: list) -> str:
        try:
            req = rds_ai_20250507_models.CreateCustomAgentRequest(name=agent_name, system_prompt=prompt, enable_tools=enable_tools, tools=tools)
            resp = self.create_client().create_custom_agent(req)
            return resp.body.id
        except Exception as e:
            raise RuntimeError(e)

    # 更新专属Agent
    def do_update_custom_agent(self, custom_agent_id: str, system_prompt: str) -> rds_ai_20250507_models.UpdateCustomAgentResponseBody:
        try:
            req = rds_ai_20250507_models.UpdateCustomAgentRequest(custom_agent_id=custom_agent_id, system_prompt=system_prompt)
            resp = self.create_client().update_custom_agent(req)
            return resp.body
        except Exception as e:
            raise RuntimeError(e)

    def do_get_custom_agent(self, agent_name: str, page_number: int, page_size: int):
        try:
            req = rds_ai_20250507_models.ListCustomAgentRequest(page_number=page_number, page_size=page_size)
            resp = self.create_client().list_custom_agent(req)
            body = resp.body
            if not body:
                return None
            data_list = body.data
            if not data_list:
                return None
            for data in data_list:
                if getattr(data, "name", None) == agent_name:
                    return getattr(data, "id", None)
        except Exception as e:
            raise RuntimeError(e)
        return None

    # 删除专属Agent
    def do_delete_custom_agent(self, custom_agent_id: str):
        try:
            req = rds_ai_20250507_models.DeleteCustomAgentRequest(custom_agent_id=custom_agent_id)
            resp = self.create_client().delete_custom_agent(req)
            return resp.body
        except Exception as e:
            raise RuntimeError(e)

    @staticmethod
    def main() -> None:
        custom_agent = CustomAgentDemo()
        agent_name = "copilot-agent-python"
        create_custom_agent_id = custom_agent.do_create_custom_agent(agent_name=agent_name, prompt="copilot-agent-prompt-demo", enable_tools=True,
                                                                     tools=["describe_db_instances"])
        print("custom_agent_id: " + create_custom_agent_id)

        update_agent_body = custom_agent.do_update_custom_agent(custom_agent_id=create_custom_agent_id, system_prompt="你是一个专门获取指定地域下实例信息列表的专属agent,你可以调用[describe_db_instances]工具来帮你获取信息,并为我生成详细的信息总结。")
        print("custom_agent_id_update: " + update_agent_body.id)

        custom_agent_id_by_query = custom_agent.do_get_custom_agent(agent_name, 1, 30)
        print("custom_agent_id: " + custom_agent_id_by_query)

        chat_messages_response = custom_agent.do_chat_messages(search_query="查询杭州地域有哪些实例即将到期", custom_agent_id=create_custom_agent_id,
                                                               conversation_id=None)
        for chunk in chat_messages_response:
            body = chunk.body
            if body is not None and body.event == 'message':
                print(f"{body.answer}", end="")
                conversation_id = body.conversation_id

        del_custom_agent_body = custom_agent.do_delete_custom_agent(custom_agent_id=create_custom_agent_id)
        print("\n" + "delete_agent_result: " + del_custom_agent_body.result)

if __name__ == '__main__':
    CustomAgentDemo.main()

示例代码下载

为了方便您快速上手,我们提供了包含以上所有场景的完整可运行示例代码。

RDS_Copilot_Examples.zip

相关API文档