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,相关文档可查看官方文档
- 单轮对话实现
代码示例
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();
}
- 流式响应处理
代码示例
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框架的集成。
- NuGet包安装
dotnet add package Microsoft.SemanticKernel
- 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 = builder1.Build();
- 聊天机器人开发
var chatCompletionService = kernel1.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);
}
1、从DeepSeek API调用到Semantic Kernel集成:深度解析聊天机器人开发全链路的更多相关文章
- Semantic Kernel 入门系列:🛸LLM降临的时代
不论你是否关心,不可否认,AGI的时代即将到来了. 在这个突如其来的时代中,OpenAI的ChatGPT无疑处于浪潮之巅.而在ChatGPT背后,我们不能忽视的是LLM(Large Language ...
- Semantic Kernel 入门系列:🥑Memory内存
了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...
- LangChain vs Semantic Kernel
每当向他人介绍 Semantic Kernel, 会得到的第一个问题就是 Semantic Kernel 类似于LangChain吗,或者是c# 版本的LangChain吗? 为了全面而不想重复的回答 ...
- Semantic Kernel 入门系列:🪄LLM的魔法
ChatGPT 只是LLM 的小试牛刀,让人类能够看到的是机器智能对于语言系统的理解和掌握. 如果只是用来闲聊,而且只不过是将OpenAI的接口封装一下,那么市面上所有的ChatGPT的换皮应用都差不 ...
- Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能
理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...
- Semantic Kernel 入门系列:💬Semantic Function
如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...
- Semantic Kernel 入门系列:💾Native Function
语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...
- Semantic Kernel 入门系列:🥑突破提示词的限制
无尽的上下文 LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力. 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答. 因此如何给LLM ...
- Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...
- 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)
信鸽推送 .NET 服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...
随机推荐
- Qt编写本地摄像头综合应用示例(qcamera/ffmpeg/v4l2等)
一.功能特点 同时支持 qcamera.ffmpeg.v4l2 三种内核解析本地摄像头. 提供函数 findCamera 自动搜索环境中的所有本地摄像头设备,搜索结果信号发出. 支持自动搜索和指定设备 ...
- matlab中mat文件的生成和读取
1.mat文件的生成 (1)直接在Matlab中创建并保存矩阵数据 打开Matlab软件,点击左上角文件(File),然后点击新建(new),选择变量(Variable),就新建了一个mat文件. 点 ...
- DVWA靶场Insecure CAPTCHA(不安全验证)漏洞所有级别通关教程及源码审计
Insecure CAPTCHA(不安全验证) Insecure CAPTCHA(不安全验证)漏洞指的是在实现 CAPTCHA(完全自动化公共图灵测试区分计算机和人类)机制时,未能有效保护用户输入的验 ...
- CH32V203F6P6-TSSOP20测试之01---初次测试
一.收到空板 今天收到嘉立创打样的CH32V203F6P6-TSSOP20测试板子, 二.焊上元件 赽快焊接上元件并作测试. 三.上机测试 插好USB线,运行WCHISPStudio, 按BOOT不放 ...
- Kubernetes 深入学习
目录 一.简介 1.Kubernetes 是什么 2.Kubernetes 特性 二.集群架构与组件 1.Master 2.Node 三.核心概念 四.集群搭建 -- 平台规划 1.生产环境 K8S ...
- jQuery详解
目录 jQueryJS中创建对象jQuery选择器jQuery 操作 DOMjQuery 事件jQuery 动画JSON :Python工具 - pipPython工具 - VirtualEnvWEB ...
- LinkedList可以同时作为堆栈和队列使用
Java里的LinkedList可以同时作为堆栈和队列使用,因此在使用的时候总是会弄混他们的方法,此文就简单总结一下作为不同数据结构使用时的用法. 作为队列 方法 声明 任意两种方法: 一是直接声 ...
- FailFast机制-抛出 java.util.ConcurrentModificationException(保证并发访问时集合的完整性,内部结构变化的防护措施)
- FastReport实现遍历Dataset数据集计算
delphi在使用fastreport进行打印时,需要对数据进行计算求和. 在打印文本框的OnBeforePrint事件中进行以下代码即可实现效果 procedure Memo7OnBeforePri ...
- AI时代云动力:新一代弹性计算云主机开启智能计算新纪元!
随着信息技术的飞速发展,云计算在企业数字化转型中发挥着愈发重要的作用. 弹性计算作为云计算技术的重要组成部分,以灵活的资源分配.高可用性等优势,在数字化转型中扮演着举足轻重的角色. 为打造更加卓越的上 ...