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

Bot Framework Python 如何向promptValidator传参或为PromptValidatorContext添加值

瀑布对话验证器传递自定义参数的实现方案

你可以通过提示调用时透传参数到验证上下文的方式实现需求,无需修改原有对话框注册逻辑,操作步骤如下:

步骤1:在验证步骤调用提示时传入存储的Value1

在触发TextPrompt的瀑布验证步骤中,将step_context.values["Value1"]存入PromptOptions的validations字段,该字段内容会直接透传给验证器:

async def validation_step(self, step_context: WaterfallStepContext) -> DialogTurnResult:
    # 构造提示配置,将自定义参数存入validations
    prompt_options = PromptOptions(
        prompt=MessageFactory.text("请输入您的年龄:"),
        validations={
            "max_age": step_context.values["Value1"]
        }
    )
    return await step_context.prompt("age", prompt_options)

步骤2:修改验证器从上下文读取参数

PromptValidatorContext的options属性可以直接拿到上一步传入的配置,直接提取参数使用即可:

@staticmethod
async def age_validator(prompt_context: PromptValidatorContext) -> bool:
    # 从验证上下文读取透传的Value1,可设置默认值避免空值报错
    max_age = prompt_context.options.validations.get("max_age", 120)
    # 注意TextPrompt返回的识别结果为字符串,需要转为数值再比较
    input_age = int(prompt_context.recognized.value) if prompt_context.recognized.succeeded else 0
    return (
        prompt_context.recognized.succeeded
        and 0 < input_age < max_age
    )

可选方案:使用闭包绑定参数

如果需要在注册对话框时就固定传入参数,也可以将验证器改为闭包实现,动态生成绑定了指定参数的验证函数:

# 构造带自定义参数的验证器生成函数
def create_age_validator(max_age: int):
    async def age_validator(prompt_context: PromptValidatorContext) -> bool:
        input_age = int(prompt_context.recognized.value) if prompt_context.recognized.succeeded else 0
        return (
            prompt_context.recognized.succeeded
            and 0 < input_age < max_age
        )
    return age_validator

# 注册对话框时传入动态生成的验证器
self.add_dialog(
    TextPrompt(
        "age",
        create_age_validator(step_context.values["Value1"])
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:06:02