Node.js中如何通过botbuilder-ai SDK正确使用QnA Maker的strictFilters参数
Node.js 环境下 botbuilder-ai SDK 配置 strictFilters 参数的正确方案
核心生效逻辑
botbuilder-ai SDK 会对入参做分层解析,仅嵌套在指定路径下的字段会被原样透传至QnA Maker后端接口,其余位置传入的同名字段会被SDK自动过滤,不参与实际查询流程。
正确配置步骤
- 初始化QnAMaker客户端实例,传入知识库的基础连接信息:
const { QnAMaker } = require('botbuilder-ai'); const qnaClient = new QnAMaker({ knowledgeBaseId: process.env.QnAKnowledgebaseId, endpointKey: process.env.QnAEndpointKey, host: process.env.QnAEndpointHostName }); - 调用
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
相关产品推荐
相关产品推荐

