主页 > 创业  > 

WPF快速创建DeepSeek本地自己的客户端-基础思路版本

WPF快速创建DeepSeek本地自己的客户端-基础思路版本

开发工具:VS 2015 开发环境:.Net 4.0 使用技术:WPF

本篇文章内容: 本地部署DeepSeek以后一般使用网页工具(如Chatbox)或者DOS窗口与其对话。本篇文章使用WPF创建一个基础版的对话工具。

一、搭建本地DeepSeek环境

我参考的是一下几个教程: 1、DeepSeek本地搭建部署+搭建知识库+智能体详细图文教程 2、【问题记录】DeepSeek本地部署遇到问题 3、公司数据不泄露,DeepSeek R1本地化部署+web端访问+个人知识库搭建与使用,喂饭级实操教程,老旧笔记本竟跑出企业级AI 4、【大语言模型】本地快速部署Ollama运行大语言模型详细流程

二、vs2015 创建WPF项目 三、相关代码如下 Windows窗口界面 <Window x:Class="DeepSeekAI2.MainWindow" xmlns="http://schemas.microsoft /winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft /winfx/2006/xaml" xmlns:d="http://schemas.microsoft /expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:DeepSeekAI2" mc:Ignorable="d" Title="MainWindow" Height="680" Width="800"> <Grid Margin="10,0,15,5"> <Grid.RowDefinitions> <RowDefinition Height="8.5*"/> <RowDefinition Height="1.5*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="750"/> </Grid.ColumnDefinitions> <!--第一个格子,AI对话格子--> <Grid Grid.Row="0" Grid.Column="0"> <ListBox Name="ChatListBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" TextWrapping="Wrap" MaxWidth="730"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid> <!--第二个格子,用户输入框--> <Grid Grid.Row="1" Grid.Column="0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="8*" /> <ColumnDefinition Width="2*"/> </Grid.ColumnDefinitions> <!--输入信息框--> <Grid Grid.Column="0"> <TextBox Name="InputTextBox" HorizontalAlignment="Left" VerticalAlignment="Bottom" KeyDown="InputTextBox_KeyDown" Height="62" Width="522" Margin="61,0,0,14" /> </Grid> <!--发送信息按钮框--> <Grid Grid.Column="1"> <Button Name="SendButton" Content="Send" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,58,20" Width="90" Height="50" Click="SendButton_Click" FontFamily="Arial Black" FontSize="13" Foreground="#FF424234"/> </Grid> <Grid Grid.Column="1"> <Button Name="SendButton1" Content="new" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,2,60" Width="30" Height="30" Click="SendButton_Click1" FontFamily="Cambria" Foreground="#FF424234" Background="#FFB6F5C2"/> </Grid> </Grid> </Grid> </Window> 后端代码 using System; using System.IO; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Input; using System.Net; namespace DeepSeekAI2 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } /// <summary> /// 输入按钮框 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void InputTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { RunAI(); //InputTextBox.Text = ""; } } /// <summary> /// 确认发送按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SendButton_Click(object sender, RoutedEventArgs e) { // 异步方法需在同步上下文中调用(需手动处理) RunAI(); //InputTextBox.Text = ""; } // 用于存储对话的历史记录 static StringBuilder conversationHistory = new StringBuilder(); static string apiUrl = "http://localhost:11434/api/generate"; public void RunAI() { // 用户输入 string userInput = InputTextBox.Text; // 如果输入不正确,不输出 if (userInput.ToLower() == "" || userInput.ToLower() == "\n") { return; } // 用户输入添加到历史对话记录 conversationHistory.AppendLine($"用户: {userInput}"); ChatListBox.Items.Add("-----------用户:-----------"); ChatListBox.Items.Add(userInput); var requestData = new { model = "deepseek-r1:1.5b", prompt = conversationHistory.ToString(), stream = true }; string jsonContent = Newtonsoft.Json.JsonConvert.SerializeObject(requestData); byte[] byteArray = Encoding.UTF8.GetBytes(jsonContent); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl); request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = byteArray.Length; using (Stream dataStream = request.GetRequestStream()) { dataStream.Write(byteArray, 0, byteArray.Length); } try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(responseStream)) { string line; string line2 = ""; while ((line = reader.ReadLine()) != null) { if (!string.IsNullOrEmpty(line)) { dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(line); if (result != null && result.response != null) { //Console.Write(result.response); //Console.Out.Flush(); // 强制刷新控制台输出 //ChatListBox.Items.Add(result.response); line2 += result.response; } } } // 处理AI回话 // 去掉所有的换行符 line2 = line2.Replace("\n\n", ""); // 使用正则表达式去掉 <think> 和 </think> 标签 line2 = Regex.Replace(line2, @"<\/?think>", "\n"); // 去掉开头的换行符 line2 = line2.TrimStart('\r', '\n'); ChatListBox.Items.Add("-----------DeepSeek: -----------"); //Console.WriteLine(); AI回话DeePSeek回话 line2 ChatListBox.Items.Add(line2); conversationHistory.AppendLine($"DeepSeek: {line2}"); line2 = ""; } InputTextBox.Text = ""; } catch (WebException ex) { MessageBox.Show("请求异常: " + ex.Message); InputTextBox.Text = ""; } } /// <summary> /// 开启新的对话 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SendButton_Click1(object sender, RoutedEventArgs e) { //1 清空历史记录 conversationHistory.Clear(); //2 清空 ListBox 的内容 ChatListBox.Items.Clear(); //3 清空输入框 InputTextBox.Text = ""; } } } 四、内容介绍 static string apiUrl = "http://localhost:11434/api/generate";

其中这个代码是本地DeepSeek默认的调用接口,如果自己修改了相关内容将此修改就可以

model = "deepseek-r1:1.5b"

这串代码的意思是指定使用本地安装的某个DeepSeek版本。 因为7b的版本在我电脑上太慢。所以直接使用最快的模型。

五、完成效果如下

这样就搭建了基础的对话模型。大家可以不断优化,做一个自己的对话模型。

标签:

WPF快速创建DeepSeek本地自己的客户端-基础思路版本由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“WPF快速创建DeepSeek本地自己的客户端-基础思路版本