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

Node.js Bot Framework SDK调用迁移后自定义问答服务生成答案失败

问题根因

旧版botbuilder-ai v4.15.0内置的QnAMaker类仅适配已退市的传统QnAMaker服务,你升级后的自定义问答服务使用全新的API路径、参数规范,与旧版类的内部逻辑完全不兼容,所以会出现请求失败报错。你排查到的URL拼接差异是核心不兼容点之一,除此之外旧版QnAMaker类的请求体、返回值结构也与新版自定义问答服务不匹配,仅修改env配置的主机地址无法解决问题。

解决方案

方案1:迁移到官方新版自定义问答SDK(长期稳定方案)

  1. 卸载旧的无效依赖,安装官方提供的自定义问答专用SDK:
npm install @azure/ai-language-questionanswering @azure/core-auth
  1. 替换原有QnAMaker初始化逻辑:
const { QuestionAnsweringClient } = require("@azure/ai-language-questionanswering");
const { AzureKeyCredential } = require("@azure/core-auth");

// 初始化客户端
this.qnaClient = new QuestionAnsweringClient(
  process.env.QnAEndpointHostName,
  new AzureKeyCredential(process.env.QnAEndpointKey)
);
  1. 替换原有调用逻辑,原有QnAKnowledgebaseId对应自定义问答的项目名:
const projectName = process.env.QnAKnowledgebaseId;
const deploymentName = "production";
const qnaResults = await this.qnaClient.getAnswers(
  step.context.activity.text,
  projectName,
  deploymentName
);

方案2:临时兼容方案(不换核心依赖,仅重写请求逻辑)

如果不想大幅改动现有代码结构,可以直接按照自定义问答的API规范手写POST请求,跳过旧版QnAMaker类的内部拼接逻辑:

  1. 若项目未安装axios先安装依赖:
npm install axios
  1. 替换原有调用逻辑:
const axios = require('axios');
// 调用示例
const qnaResults = await axios.post(
  `${process.env.QnAEndpointHostName}/language/:query-knowledgebases?projectName=${process.env.QnAKnowledgebaseId}&api-version=2021-10-01&deploymentName=production`,
  {
    question: step.context.activity.text,
    top: 3, // 自定义返回结果数量
    confidenceScoreThreshold: 0.5 // 自定义置信度阈值
  },
  {
    headers: {
      "Ocp-Apim-Subscription-Key": process.env.QnAEndpointKey,
      "Content-Type": "application/json"
    }
  }
).then(res => res.data.answers);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:04