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

如何使用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.QnAMaker NuGet包,不同版本的API结构可能有差异
  • 如果遇到401/403错误,优先检查订阅密钥和端点是否匹配,确认密钥没有过期或权限不足
  • 测试时可以先使用QnAMaker工作室的测试功能验证知识库内容,再用代码调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:29:33