You need to enable JavaScript to run this app. Node.js中如何通过botbuilder-ai SDK正确使用QnA Maker的strictFilters参数
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何通过botbuilder-ai SDK正确使用QnA Maker的strictFilters参数

Node.js 环境下 botbuilder-ai SDK 配置 strictFilters 参数的正确方案

核心生效逻辑

botbuilder-ai SDK 会对入参做分层解析,仅嵌套在指定路径下的字段会被原样透传至QnA Maker后端接口,其余位置传入的同名字段会被SDK自动过滤,不参与实际查询流程。

正确配置步骤

  1. 初始化QnAMaker客户端实例,传入知识库的基础连接信息:
    const { QnAMaker } = require('botbuilder-ai');
    
    const qnaClient = new QnAMaker({
        knowledgeBaseId: process.env.QnAKnowledgebaseId,
        endpointKey: process.env.QnAEndpointKey,
        host: process.env.QnAEndpointHostName
    });
    
  2. 调用getAnswers方法获取查询结果时,将strictFilters嵌套在qnaOptions属性下传递:
    const queryResults = await qnaClient.getAnswers(turnContext, {
        qnaOptions: {
            top: 3,
            strictFilters: [
                {
                    name: "product",
                    value: "adobe"
                }
            ]
        },
        scoreThreshold: 0.3
    });
    

若你使用对话框流中的QnAMakerRecognizer组件触发查询,传参逻辑保持一致:动态查询时需要在识别上下文的qnaOptions属性下传入当前请求对应的strictFilters;若所有查询都固定使用同一套过滤规则,可直接在初始化recognizer时,将strictFilters写入其配置的qnaOptions属性中,无需每次调用重复传参。

常见参数不生效的原因

  • 传参层级错误:直接把strictFilters作为getAnswers第二个入参的顶级属性,没有嵌套在qnaOptions对象下,这类参数会被SDK的序列化逻辑丢弃,无法透传到后端接口。
  • SDK版本过低:使用4.8.0之前的旧版SDK时,strictFilters的参数透传存在序列化bug,字段会被错误覆盖为空值,建议升级到4.14.0及以上的稳定版本。
  • 参数结构不匹配:strictFilters内的元数据键名必须严格使用name和value,不能自定义字段名(比如错写成key、metadataName等),否则会被后端接口识别为无效过滤条件。

透传校验方法

初始化QnAMaker实例时开启调试日志,可直接查看SDK实际向后端发送的完整请求体,确认请求结构和手动调用REST API时的请求结构完全一致,即可定位参数是否正确透传。


内容的提问来源于stack exchange,提问作者Arun kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 06:27:07