Loading

Semantic Kernel人工智能:1、从DeepSeek API调用到Semantic Kernel集成:深度解析聊天机器人开发全链路

引言:AI时代下的聊天机器人开发范式演进

在生成式AI技术爆发的当下,基于大语言模型(LLM)的聊天机器人开发已形成标准化技术链路。本文将结合DeepSeek API与微软Semantic Kernel框架,以C#语言实战演示从基础API调用到高级框架集成的完整开发流程。

环境准备与基础配置

  • .NET 9 SDK
  • Visual Studio 2022或VSCode
  • DeepSeek API密钥 官网申请

DeepSeek API基础调用

DeepSeek API的Endpoint地址为:https://api.deepseek.com/chat/completions,相关文档可查看官方文档

  1. 单轮对话实现
    代码示例
public async Task<ResponseBody> GetChatMessageContentsAsync(CancellationToken cancellationToken = new CancellationToken())
{
    var client = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Post, _builder.Endpoint);
    request.Headers.Add("Accept", "application/json");
    request.Headers.Add("Authorization", $"Bearer {_builder.ApiKey}");

    _body.Stream = false;
    var content = new StringContent(_body.SerializeObject(), null, "application/json");
    request.Content = content;
    var response = await client.SendAsync(request, cancellationToken);
    var responseBody = await response.Content.ReadAsStringAsync(cancellationToken);
    return JsonConvert.DeserializeObject<ResponseBody>(responseBody) ?? new ResponseBody();
}
  1. 流式响应处理
    代码示例
public async IAsyncEnumerable<ResponseBody> GetStreamingChatMessageContentsAsync([EnumeratorCancellation] CancellationToken cancellationToken = new CancellationToken())
{
    var client = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Post, _builder.Endpoint);
    request.Headers.Add("Accept", "application/json");
    request.Headers.Add("Authorization", $"Bearer {_builder.ApiKey}");
    
    _body.Stream = true;
    var content = new StringContent(_body.SerializeObject(), null, "application/json");
    request.Content = content;
    var response = await client.SendAsync(request, cancellationToken);
    var stream = await response.Content.ReadAsStreamAsync(cancellationToken);
    var reader = new StreamReader(stream);
    while (!reader.EndOfStream)
    {
        var line = await reader.ReadLineAsync(cancellationToken);
        if (string.IsNullOrEmpty(line) || line.StartsWith(":")) continue;
        if (line.StartsWith("data: "))
        {
            var jsonData = line["data: ".Length ..];
            if (jsonData == "[DONE]") break;
            yield return JsonConvert.DeserializeObject<ResponseBody>(jsonData) ?? new ResponseBody();
        }
    }
}

Semantic Kernel框架集成

Semantic Kernel是一种轻型开源开发工具包,可用于轻松生成 AI 代理并将最新的 AI 模型集成到 C#、Python 或 Java 代码库中。 它充当一个高效的中间件,可实现企业级解决方案的快速交付。
DeepSeek API与Semantic Kernel框架集成,可快速实现基于大语言模型的聊天机器人开发。由于DeepSeek API与OpenAI API的兼容性,因此DeepSeek API与Semantic Kernel框架的集成非常简单。只需使用OpenAI的连接器,即可快速实现DeepSeek API与Semantic Kernel框架的集成。

  1. NuGet包安装
dotnet add package Microsoft.SemanticKernel
  1. Semantic Kernel初始化
var openAIClientCredential = new ApiKeyCredential(apiKey);
var openAIClientOption = new OpenAIClientOptions
{
    Endpoint = new Uri("https://api.deepseek.com"),

};
var builder = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(modelId, new OpenAIClient(openAIClientCredential, openAIClientOption));

var kernel = builder.Build();
  1. 聊天机器人开发
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

Console.WriteLine("😀User >> "+ chatHistory.Last().Content);
var result = chatCompletionService.GetStreamingChatMessageContentsAsync(
    chatHistory
);
Console.Write("👨Assistant >> ");
await foreach (var item in result)
{
    Thread.Sleep(200);
    Console.Write(item.Content);
}

代码示例

posted @ 2025-03-17 15:41  黄明基  阅读(372)  评论(0编辑  收藏  举报
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy