.NET WebAPI+智谱清言实现本地知识库问答AI

注册智谱清言,构建本地知识库

智谱AI开放平台 (bigmodel.cn)

构建知识库

获取apiKey与knowledgeId

项目中填充

注入时记得

  

   _apiKey = configuration["Zhipu:apiKey"];
   _knowledgeId = configuration["Zhipu:knowledgeId"];
 #region AI问答
 [AllowAnonymous]
 [HttpGet("InquiryAI")]
 public async Task<IActionResult> InquiryAI(string problem)
 {
     var apiKey = _apiKey; 
     var model = "glm-4";
     var knowledgeId = _knowledgeId; 
     using (var httpClient = new HttpClient())
     {
         httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");

         var request = new
         {
             model,
             messages = new List<object> { new { role = "user", content = problem } },
             tools = new List<object> {
                 new {
                     type = "retrieval",
                     retrieval = new {
                         knowledge_id = knowledgeId,
                         //不要更改
                         prompt_template = "从文档\n\"\"\"\n{{knowledge}}\n\"\"\"\n中找问题\n\"\"\"\n{{question}}\n\"\"\"\n的答案,找到答案就仅使用文档语句回答问题,找不到答案就用自身知识回答并且告诉用户该信息不是来自文档。\n不要复述问题,直接开始回答。"
                     }
                 }
             },
             stream = true
         };

         var jsonRequest = System.Text.Json.JsonSerializer.Serialize(request);
         var content = new StringContent(jsonRequest, System.Text.Encoding.UTF8, "application/json");

         using (var response = await httpClient.PostAsync("https://open.bigmodel.cn/api/paas/v4/chat/completions", content))
         {
             if (response.IsSuccessStatusCode)
             {
                 using (var stream = await response.Content.ReadAsStreamAsync())
                 {
                     // 你可以在这里处理流,例如读取到字符串或写入到文件等  
                     using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                     {
                         string responseBody = await reader.ReadToEndAsync();
                         string answer= GetContentString(responseBody); // 打印响应内容 
                         return new JsonResult(answer);
                     }
                 }
             }
             else
             {
                 return new JsonResult( $"Error: {response.StatusCode}");
             }
         }
     }
 }
 string GetContentString(string str)
 {
     string substringToFind = "\"content\":\"";//内容开始字符串标致
     string substringToFind2 = "\"}}]}";     //内容结束字符串标志
     string resultStr = "";
     int index = 0;

     while ((index = str.IndexOf(substringToFind, index)) != -1)
     {
         index += substringToFind.Length;                  //内容开始位置
         int index2 = str.IndexOf(substringToFind2, index);//内容结束位置
         if (index2 != -1)
         {
             resultStr += str.Substring(index, index2 - index);
         }
         else
         {
             return resultStr;
         }
     }
     return resultStr;
 }
 #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值