如何用Node.js集成Amazon Lex QnA机器人实现API交互
用Node.js集成Amazon Lex V2 QnA机器人实现交互
1. 准备依赖与凭证配置
- 安装AWS Lex Runtime V2的SDK包:
npm install @aws-sdk/client-lex-runtime-v2 - 配置AWS访问凭证:
可通过设置环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,或在本地创建~/.aws/credentials文件配置;若代码运行在AWS服务(如ECS、Lambda)上,直接使用IAM角色权限即可。
2. 初始化Lex客户端
导入并初始化Lex Runtime V2客户端,指定你的AWS区域:
const { LexRuntimeV2Client, CreateSessionCommand, RecognizeTextCommand } = require("@aws-sdk/client-lex-runtime-v2"); const client = new LexRuntimeV2Client({ region: "你的AWS区域(例如us-east-1)" });
3. 实现两轮交互流程
第一轮:触发technical_support意图
发送"technical_support"表述,获取机器人的初始引导响应:
async function startSupportSession() { // 创建会话请求参数 const createSessionParams = { botId: "你的Lex机器人ID", botAliasId: "你的Lex机器人别名ID", localeId: "你的机器人语言区域(例如en_US)", sessionId: "自定义会话ID(可随机生成)", requestAttributes: {} }; // 创建会话 const createSessionCommand = new CreateSessionCommand(createSessionParams); const sessionResponse = await client.send(createSessionCommand); const sessionId = sessionResponse.sessionId; // 发送technical_support表述 const recognizeTextParams = { botId: "你的Lex机器人ID", botAliasId: "你的Lex机器人别名ID", localeId: "你的机器人语言区域", sessionId: sessionId, text: "technical_support" }; const recognizeTextCommand = new RecognizeTextCommand(recognizeTextParams); const firstResponse = await client.send(recognizeTextCommand); // 输出机器人的初始响应 console.log("机器人响应:", firstResponse.messages[0].content); // 此处会输出 "Please tell us in a few words how we can help." return sessionId; }
第二轮:用户提供输入后获取最终响应
使用上一步的会话ID,发送用户输入内容,获取最终回复:
async function sendUserInput(sessionId, userInput) { const recognizeTextParams = { botId: "你的Lex机器人ID", botAliasId: "你的Lex机器人别名ID", localeId: "你的机器人语言区域", sessionId: sessionId, text: userInput }; const recognizeTextCommand = new RecognizeTextCommand(recognizeTextParams); const finalResponse = await client.send(recognizeTextCommand); // 输出机器人的最终响应 console.log("机器人响应:", finalResponse.messages[0].content); // 此处会输出 "Thank you for choosing our service! We will respond to your query via email within 1 day." }
4. 调用执行交互
// 执行完整流程 async function runInteraction() { const sessionId = await startSupportSession(); // 模拟用户输入,例如用户输入"我无法登录账户" await sendUserInput(sessionId, "我无法登录账户"); } runInteraction().catch(err => console.error("交互出错:", err));
关键参数说明
botId/botAliasId:可在Lex控制台的机器人详情页获取localeId:需与你Lex机器人配置的语言区域一致sessionId:用于标识同一场对话,两轮交互需保持一致
内容的提问来源于stack exchange,提问作者Atique Ahmed
相关产品推荐
相关产品推荐

