注册智谱清言,构建本地知识库
构建知识库
获取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