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

Bot Framework SDK瀑布对话框如何保留首步数据并获取消歧用户回复

解决方案

核心原理

你遇到的问题是Bot Framework瀑布流对话框的标准机制导致的:

  1. 当你调用step.prompt()后,当前步骤会直接结束,你写在prompt后的return step.next(step.result)是死代码,永远不会执行
  2. prompt触发后,用户的应答内容会作为下一个步骤的step.result直接传入,原本首步传递的数据会被覆盖
  3. 瀑布流内置的step.values属性是同个对话框内各步骤共享的临时存储区,专门用来解决跨步骤数据传递问题

修改后的代码

消歧步骤修改

async disambiguationStep(step) {
    logger.info(`FinalAnswer Dialog: disambiguationStep`);
    // 优先存储首步所有数据,避免后续丢失
    step.values.firstStepData = step.result;
    if (step.result.result.disambiguation) {
        logger.info("需要消歧");
        let disambiguation_options = step.result.result.disambiguation;
        const message_text = "请问你需要办理哪项业务?";
        const data = [
            {
                "title": disambiguation_options[0],
                "value": disambiguation_options[0]
            },
            {
                "title": disambiguation_options[1],
                "value": disambiguation_options[1]
            },
        ]
        let buttons = data.map(function (d) {
            return {
                type: ActionTypes.PostBack,
                title: d.title,
                value: d.value
            }
        });
        const msg = MessageFactory.suggestedActions(buttons, message_text);
        return await step.prompt(TEXT_PROMPT, { prompt: msg });
    } else {
        logger.info("无需消歧");
        return step.next(step.result);
    }
}

应答步骤修改

async answerStep(step) {
    logger.info(`FinalAnswer Dialog: answerStep`);
    let model_dispatch, result;
    // 判断是否走了消歧流程
    if (step.values.firstStepData) {
        // 从共享存储取首步数据,step.result为用户选择的意图
        model_dispatch = step.values.firstStepData.model_dispatch;
        result = step.values.firstStepData.result;
        // 将用户选择的意图覆盖到识别结果,兼容原有业务逻辑
        result.topIntent = step.result;
    } else {
        // 未消歧直接使用首步传递的数据
        model_dispatch = step.result.model_dispatch;
        result = step.result.result;
    }
    // 原有应答逻辑无需修改
    return await step.endDialog();
}

关键改动说明

  • 新增step.values.firstStepData存储首步全量数据,从根源解决数据丢失问题
  • 删除了prompt后的无效死代码
  • 修复了原代码中变量名拼写错误(disambiguation_option缺少s)
  • 应答步骤兼容两种业务场景,无需修改原有后续应答逻辑

内容的提问来源于stack exchange,提问作者Adrián

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:27:01