You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一intent能否返回不同响应?附Greeting意图现有实现代码示例

实现同意图返回不同响应的修改方案

核心逻辑是在用户持久化状态中新增标记位,记录是否已经触发过首次问候,每次触发Greeting意图时先判断标记状态,返回对应响应即可,修改后的代码如下:

new OnIntent("Greeting")
{
    Actions = new List<Dialog>()
    {
        new CodeAction(async (dialogContext, options) =>
        {
            var now = DateTime.Now.TimeOfDay;
            var time = now < new TimeSpan(12, 0, 0)
                ? "morning"
                : now > new TimeSpan(19, 0, 0)
                    ? "evening"
                    : "afternoon";
            // 读取用户是否已完成首次问候的标记,默认值为false
            var hasGreeted = dialogContext.State.GetValue<bool>("user.hasGreeted", false);
            string finalGreeting;
            if (!hasGreeted)
            {
                finalGreeting = $"Good {time}, {CustmerName}, hello and welcome";
                // 首次问候后更新标记为true,状态会持久化存储对应用户的属性
                dialogContext.State.SetValue("user.hasGreeted", true);
            }
            else
            {
                finalGreeting = $"Good {time}, {CustmerName}, hello and welcome again";
            }
            dialogContext.State.SetValue("dialog.greetingTime", time);
            dialogContext.State.SetValue("user.name", CustmerName);
            // 将生成的问候语存入会话状态供后续发送调用
            dialogContext.State.SetValue("dialog.finalGreeting", finalGreeting);
            return await dialogContext.EndDialogAsync(options);
        }),
        // 直接读取会话状态中生成好的问候语发送
        new SendActivity("${dialog.finalGreeting}")
    }
},

补充说明

  • user.hasGreeted 属于用户级别的持久化状态,只要是同一个用户发起的会话,该标记会一直保留,不会随单轮会话结束清空
  • 如果你需要实现更丰富的多轮问候差异,可把标记位改成数字类型,记录问候次数,根据不同次数返回不同的响应内容

内容的提问来源于stack exchange,提问作者Sunny Bhardwaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:48:01