启动和停止智能体
更新时间不可用
使用 Agents SDK 或 RESTful API 建立实时语音交互,并控制智能体的启动和停止。
本文介绍如何通过 Agora Agents SDK 或对话式 AI 引擎 RESTful API 启动和停止一个智能体。
前提条件
开始前,请确保你已经准备好:
使用 Agora CLI 创建项目,开启 RTC 和对话式 AI 引擎,检查项目状态,并导出本地凭据:
agora login --region cn
agora project create <project-name> --feature rtc --feature convoai --rtm-data-center CN
agora project use <project-name>
agora project doctor --feature convoai
agora project env --format shell --with-secrets你还需要准备一个能够加入声网 RTC 频道的客户端应用,例如已完成基础实时音视频互动的应用。
安装 SDK
如果你使用 Agents SDK 启动和停止智能体,请选择你的开发语言并安装对应 SDK。
pip install agora-agentsnpm install agora-agentsgo get github.com/AgoraIO/agora-agents-go/v2@v2.0.0实现方式
启动智能体
调用 SDK 的 start() 方法或 RESTful API 的 join 接口即可创建一个智能体实例,并让它加入指定频道。你需要传入频道名、智能体 UID、远端用户 UID 和模型配置;使用 SDK 且传入 App Certificate 时,SDK 会自动生成所需鉴权。
以下示例使用声网中国区推荐的级联链路配置:凤鸣 ASR、通义千问 LLM 和 MiniMax TTS。如需切换模型,请参考对应的模型文档调整 ASR、LLM 和 TTS 配置。
package main
import (
"context"
"log"
Agora "github.com/AgoraIO/agora-agents-go/v2"
agentkit "github.com/AgoraIO/agora-agents-go/v2/agentkit/cn"
vendors "github.com/AgoraIO/agora-agents-go/v2/agentkit/cn/vendors"
)
func main() {
ctx := context.Background()
client := agentkit.NewAgoraClient(agentkit.ClientOptions{
AppID: "<your_app_id>",
AppCertificate: "<your_app_certificate>",
})
agent := agentkit.NewAgent(client,
agentkit.WithName("support-assistant"),
).WithStt(
vendors.NewFengmingSTT(),
).WithLlm(
vendors.NewAliyun(vendors.AliyunOptions{
BaseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
Model: "qwen-plus",
APIKey: "<your_llm_api_key>",
SystemMessages: []map[string]interface{}{
{"role": "system", "content": "You are a helpful chatbot."},
},
GreetingMessage: "你好,有什么可以帮你?",
FailureMessage: "抱歉,我暂时无法回答这个问题。",
MaxHistory: Agora.Int(10),
}),
).WithTts(
vendors.NewMiniMaxTTS(vendors.MiniMaxTTSOptions{
Key: "<your_tts_api_key>",
Model: "speech-01-turbo",
VoiceSetting: &vendors.MiniMaxVoiceSetting{
VoiceID: "female-shaonv",
},
}),
)
session := agent.CreateSession(agentkit.CreateSessionOptions{
Channel: "<your_channel_name>",
AgentUID: "0",
RemoteUIDs: []string{"1002"},
IdleTimeout: Agora.Int(120),
})
agentID, err := session.Start(ctx)
if err != nil {
log.Fatal(err)
}
log.Println("Agent started:", agentID)
}import {
Agent,
AgoraClient,
AliyunLLM,
Area,
FengmingSTT,
MiniMaxCNTTS,
} from 'agora-agents';
const client = new AgoraClient({
area: Area.CN,
appId: '<your_app_id>',
appCertificate: '<your_app_certificate>',
});
const agent = new Agent({ client })
.withStt(new FengmingSTT())
.withLlm(new AliyunLLM({
url: 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',
model: 'qwen-plus',
apiKey: '<your_llm_api_key>',
systemMessages: [
{ role: 'system', content: 'You are a helpful chatbot.' },
],
greetingMessage: '你好,有什么可以帮你?',
failureMessage: '抱歉,我暂时无法回答这个问题。',
maxHistory: 10,
}))
.withTts(new MiniMaxCNTTS({
key: '<your_tts_api_key>',
model: 'speech-01-turbo',
voiceSetting: { voice_id: 'female-shaonv' },
}));
const session = agent.createSession({
name: 'support-assistant',
channel: '<your_channel_name>',
agentUid: '0',
remoteUids: ['1002'],
idleTimeout: 120,
});
const agentId = await session.start();
console.log('Agent started:', agentId);from agora_agent import (
Agent,
Agora,
AliyunLLM,
Area,
FengmingSTT,
MiniMaxCNTTS,
)
client = Agora(
area=Area.CN,
app_id='<your_app_id>',
app_certificate='<your_app_certificate>',
)
agent = (
Agent(client=client)
.with_stt(FengmingSTT())
.with_llm(AliyunLLM(
base_url='https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',
model='qwen-plus',
api_key='<your_llm_api_key>',
system_messages=[
{'role': 'system', 'content': 'You are a helpful chatbot.'},
],
greeting_message='你好,有什么可以帮你?',
failure_message='抱歉,我暂时无法回答这个问题。',
max_history=10,
))
.with_tts(MiniMaxCNTTS(
key='<your_tts_api_key>',
model='speech-01-turbo',
voice_id='female-shaonv',
))
)
session = agent.create_session(
name='support-assistant',
channel='<your_channel_name>',
agent_uid='0',
remote_uids=['1002'],
idle_timeout=120,
)
agent_id = session.start()
print('Agent started:', agent_id)curl --request POST \
--url https://api.agora.io/cn/api/conversational-ai-agent/v2/projects/:appid/join \
--header 'Authorization: Basic <your_base64_encoded_credentials>' \
--header 'Content-Type: application/json' \
--data '{
"name": "support-assistant",
"properties": {
"channel": "<your_channel_name>",
"token": "<your_rtc_token>",
"agent_rtc_uid": "0",
"remote_rtc_uids": ["1002"],
"enable_string_uid": false,
"idle_timeout": 120,
"llm": {
"vendor": "aliyun",
"url": "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
"api_key": "<your_aliyun_api_key>",
"system_messages": [
{
"role": "system",
"content": "You are a helpful chatbot."
}
],
"greeting_message": "你好,有什么可以帮你?",
"failure_message": "抱歉,我暂时无法回答这个问题。",
"max_history": 10,
"params": {
"model": "qwen-plus"
}
},
"asr": {
"language": "zh-CN",
"vendor": "fengming"
},
"tts": {
"vendor": "minimax",
"params": {
"group_id": "<your_minimax_group_id>",
"key": "<your_tts_api_key>",
"model": "speech-01-turbo",
"voice_setting": {
"voice_id": "female-shaonv",
"speed": 1,
"vol": 1,
"pitch": 0
},
"audio_setting": {
"sample_rate": 16000
}
}
}
}
}'如果通过 REST API 创建智能体,请求成功时返回 200 状态码,响应体如下:
{
"agent_id": "1NT29X10YHxxxxxWJOXLYHNYB",
"create_ts": 1737111452,
"status": "RUNNING"
}停止智能体
当用户结束会话时,你的业务后端应调用 SDK 的 stop() 方法或 RESTful API 的 leave 接口,让智能体离开频道:
if err := session.Stop(ctx); err != nil {
log.Fatal(err)
}await session.stop();session.stop()curl --request POST \
--url https://api.agora.io/cn/api/conversational-ai-agent/v2/projects/:appid/agents/:agentId/leave \
--header 'Authorization: Basic <your_base64_encoded_credentials>' \
--data '{}'如果通过 REST API 停止智能体,请求成功时返回 200 状态码和空 JSON 对象:
// 200 OK
{}