如何使用Python版Bot Framework SDK从QnA Maker获取排名前5的答案
你当前使用的QnA Maker SDK的get_answers接口返回的response本身就是按匹配置信度从高到低排序的问答对列表,每个元素包含问题、答案、匹配分数、来源等完整信息,原有代码仅取了列表第一个元素返回,可按如下方式调整代码获取完整的高匹配问答对列表:
async def on_message_activity(self, turn_context: TurnContext): # 调用QnA Maker服务获取匹配结果,结果默认按匹配度从高到低排序 response = await self.qna_maker.get_answers(turn_context) if response: # 构造匹配度最高的问答对列表输出内容 result_text = "匹配度最高的问答对列表如下:\n" for index, qna_result in enumerate(response, start=1): # 可按需提取字段:questions是匹配的问题列表,answer是对应答案,score是置信度分数 result_text += f"\n{index}. 匹配问题:{qna_result.questions[0]}\n 答案:{qna_result.answer}\n 匹配置信度:{round(qna_result.score * 100, 2)}%\n" await turn_context.send_activity(MessageFactory.text(result_text)) else: await turn_context.send_activity("未找到匹配的QnA Maker问答结果。")
补充说明:
- 如果你只需要Top N个最高匹配的结果,可以在遍历前对response做切片,比如取前3个就写
for qna_result in response[:3]: - 每个返回结果的常用字段包括
questions(匹配的标准问题集合)、answer(对应答案)、score(0-1区间的置信度分数,数值越高匹配度越高)、metadata(你在知识库配置的自定义元数据),可按需提取使用。
内容的提问来源于stack exchange,提问作者Герман Крауклит
相关产品推荐
相关产品推荐

