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

Bot Builder Form Flow枚举响应识别异常问题咨询

解决Form Flow Dialog枚举选项无法识别的问题

我来帮你搞定这个枚举选项不被识别的问题哈,结合你贴的代码片段,大概率是这几个细节没处理到位,咱们一步步排查:

1. 先检查TitleBot枚举的定义

Form Flow对枚举的识别依赖于显示文本和枚举值的映射,如果你的枚举没加Description属性,用户输入的文本(比如"Mr.")可能和枚举标识符(比如Mr)不匹配,导致识别失败。建议给枚举值加上描述:

[Serializable]
public enum TitleBot
{
    [Description("Mr.")]
    Mr,
    [Description("Ms.")]
    Ms,
    [Description("Mrs.")]
    Mrs,
    [Description("Dr.")]
    Dr
}

这样Form Flow会把Description里的文本作为显示选项,同时能识别用户输入的对应文本。

2. 优化枚举字段的模板与大小写配置

你给Title字段加了Template属性,但可以补充大小写归一化配置,避免用户输入大小写不一致导致识别失败:

[Serializable]
public class ContactBot
{
    [Template(TemplateUsage.EnumSelectOne,"How do you like to be addressed - {||}", "Please select a title to address you by - {||}")]
    [Prompt("Please select a title (Mr./Ms./Mrs./Dr.):", FieldCase = CaseNormalization.InitialUpper)]
    public TitleBot? Title { get; set; }

    [Prompt("What's your first name?", FieldCase = CaseNormalization.InitialUpper)]
    public string FirstName { get; set; }

    [Prompt("and your last name?")]
    public string LastName { get; set; }
}

这里给Title的Prompt也加上了FieldCase,确保用户输入的文本会被统一格式后再匹配枚举值。

3. 配置Form Builder的枚举识别规则

在创建Form实例时,可以显式配置枚举字段的识别逻辑,比如允许用户输入序号或文本,还能自定义验证:

var form = new FormBuilder<ContactBot>()
    .Field(nameof(ContactBot.Title), 
        options => 
        {
            // 允许用户输入序号(比如1选Mr.)或文本
            options.SetEnumSelectOne();
            // 忽略大小写匹配
            options.SetCase(CaseNormalization.None);
        })
    .Build();

这样不管用户输入的是"mr"、"MR."还是"1",都能正确匹配到对应的枚举值。

4. 测试排除可空枚举的影响

你的Title字段是可空类型(TitleBot?),虽然Form Flow支持可空枚举,但如果字段是必填项,建议改成非空类型public TitleBot Title { get; set; },或者在Form Builder里配置必填:

.Field(nameof(ContactBot.Title), 
    options => options.IsRequired(true))

避免因为可空逻辑导致识别时的异常。

按照上面的步骤调整后,应该就能解决枚举选项无法识别的问题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:48