本文档为您介绍如何通过阿里云SDK(Java和Python),调用云数据库RDS AI能力的ChatMessages接口。您将学习到如何实现单次对话、多轮对话,以及如何创建和使用专属Agent进行定制化交互。
前提条件
已开通阿里云RDS AI助手专业版。
已创建并获取AccessKey ID和AccessKey Secret。为安全起见,建议使用RAM用户的AccessKey。具体操作,请参见查看RAM用户的AccessKey信息。
准备工作
开发环境配置
准备好开发环境和SDK(Java或Python任选其一),并完成相应配置。
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 ID和AccessKey Secret配置为环境变量(ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_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"操作步骤
场景一:执行单次对话
单次对话适用于一次性问答场景,发送一个问题并接收完整的流式回答。
核心逻辑
初始化SDK客户端,配置地域(Region)、认证信息(Credentials)和服务入口(Endpoint)。
构建
ChatMessagesRequest请求,设置query(您的问题)和inputs(上下文参数,如regionId、language等)。发起流式调用(
chatMessagesWithResponseIterable或chatMessages_with_sse)。遍历响应迭代器,逐片打印收到的回答。
代码示例
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)来实现。
核心逻辑
首次对话:同单次对话,但不传递
conversationId。获取会话ID:从首次对话的响应中,获取
conversationId。此ID唯一标识了当前的对话会话。后续对话:构建新的
ChatMessagesRequest请求,除了新的query外,还必须传入上一步获取的conversationId。查询历史(可选):使用
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助手,以完成更专业的任务。
核心逻辑
创建Agent:调用
CreateCustomAgent接口,定义Agent的名称(name)、系统提示(systemPrompt)和可用工具(tools)。成功后返回customAgentId。(可选)管理Agent:
ListCustomAgent:列出您已创建的Agent。UpdateCustomAgent:更新指定Agent的配置。DeleteCustomAgent:删除不再需要的Agent。
使用Agent对话:在调用
ChatMessages接口时,在inputs参数中传入您创建的customAgentId。发起对话:后续的对话流程与单次或多轮对话相同,但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()
示例代码下载
为了方便您快速上手,我们提供了包含以上所有场景的完整可运行示例代码。