如何使用QnAMaker NuGet 1.0.0调用API及获取ServiceClientCredentials凭证
使用Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker 1.0.0调用QnAMaker API
我来帮你一步步搞定这个问题,尤其是初始化QnAMakerClient时的凭证问题——这确实是刚接触这个包时容易卡壳的点。
第一步:准备必要的信息
首先你需要从Azure门户或者QnAMaker工作室获取两个关键信息:
- 订阅密钥:QnAMaker资源的API密钥,用来验证请求身份
- 服务端点:QnAMaker资源的URL,格式一般是
https://<your-resource-name>.cognitiveservices.azure.com/ - 知识库ID:在QnAMaker工作室的设置页面可以找到,用来指定要查询的知识库
第二步:解决ServiceClientCredentials的凭证问题
QnAMakerClient的构造函数要求传入ServiceClientCredentials,这个接口的作用是给每个API请求自动添加验证信息。对于QnAMaker来说,我们需要把订阅密钥放到请求头Ocp-Apim-Subscription-Key里,这里有两种简单的实现方式:
方式1:自定义凭证类(最直观)
自己写一个类继承ServiceClientCredentials,在请求发送前注入验证头:
using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Microsoft.Rest; public class QnAMakerCredentials : ServiceClientCredentials { private readonly string _subscriptionKey; public QnAMakerCredentials(string subscriptionKey) { _subscriptionKey = subscriptionKey; } public override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) { request.Headers.Add("Ocp-Apim-Subscription-Key", _subscriptionKey); return base.ProcessHttpRequestAsync(request, cancellationToken); } }
方式2:使用内置ApiKeyCredentials(更简洁)
直接用Microsoft.Rest库提供的ApiKeyCredentials,省去自定义类的步骤:
var credentials = new ApiKeyCredentials( new ApiKeyAuthenticationHeaderValue("Ocp-Apim-Subscription-Key", "<你的订阅密钥>") );
第三步:初始化客户端并调用问答API
现在有了凭证,就可以完整调用QnAMaker的问答接口了,这里给你一个完整的代码示例:
using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker; using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker.Models; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 替换成你的实际信息 string subscriptionKey = "your-subscription-key"; string endpoint = "https://your-resource-name.cognitiveservices.azure.com/"; string knowledgeBaseId = "your-knowledge-base-id"; // 初始化凭证和客户端 var credentials = new QnAMakerCredentials(subscriptionKey); var client = new QnAMakerClient(credentials) { Endpoint = endpoint }; // 构造查询请求 var queryRequest = new QueryDTO { Question = "我该如何重置QnAMaker知识库?", Top = 2 // 返回最相关的2个答案 }; try { // 调用生成答案的API var response = await client.GenerateAnswerAsync(knowledgeBaseId, queryRequest); // 处理返回结果 Console.WriteLine("查询结果:"); foreach (var answer in response.Answers) { Console.WriteLine($"- 答案:{answer.Answer}"); Console.WriteLine($" 置信度:{answer.Confidence}%\n"); } } catch (Exception ex) { Console.WriteLine($"请求出错:{ex.Message}"); } } }
补充注意事项
- 确保你安装的是1.0.0版本的
Microsoft.Azure.CognitiveServices.Knowledge.QnAMakerNuGet包,不同版本的API结构可能有差异 - 如果遇到401/403错误,优先检查订阅密钥和端点是否匹配,确认密钥没有过期或权限不足
- 测试时可以先使用QnAMaker工作室的测试功能验证知识库内容,再用代码调用
内容的提问来源于stack exchange,提问作者ELISE
相关产品推荐
相关产品推荐

