VS2022C#windows窗體應用程序調用DeepSeek API

目錄

一、創建DeepSeek API Key

二、創建窗體應用程序

三、設計窗體

1、控件拖放布局??

2、主窗體【Form1】設計

3、多行文本框【tbContent】

4、提交按鈕【btnSubmit】

5、單行文字框

四、撰寫程序

五、完整代碼

六、運行效果

七、其它


一、創建DeepSeek API Key

請參考我前面的一篇文章:Visual Stdio 2022 C#調用DeepSeek API_vs2022接入deepseek-CSDN博客的第一步。

二、創建窗體應用程序

1、打開【Visual Studio 2022】,選擇【創建新項目(N)】。

2、按下圖所示位置:依次選擇【C#】→【Windows】→【桌面】,再選擇【Windows窗體應用程序】,然后單擊右下角的【下一步(N)】。

3、配置新項目,項目名稱可填【DeepSeek】,選擇程序保存的位置,然后單擊右下角的【下一步(N)】。

4、其他信息。使用默認值,直接單擊右下角【創建(C)】。就生成了新的項目。

5、安裝依賴包【Newtonsoft.Json】。

【鼠標】在右側【解決方案資源管理器】上右擊【管理NuGet程序包(N)】。【鼠標】在右側【解決方案資源管理器】上右擊【管理NuGet程序包(N)】。

點擊【瀏覽】,在上面的【輸入框】中輸入【Newtonsoft.Json】全部或部分,選擇下面列表中顯示的【Newtonsoft.Json】,然后在點擊右側窗口中的【安裝】按鈕。

三、設計窗體

1、控件拖放布局??

整窗體大小,在主窗體上放二個文本框,一個按鈕,整體效果大致如下圖:

2、主窗體【Form1】設計

【Text】設為“DeepSeek”。

3、多行文本框【tbContent】

【(Name)】設為“tbContent”。【Multiline】選擇【True】。其它不變。作用用來顯示DeepSeek回復的內容。

4、提交按鈕【btnSubmit】

【(Name)】設為”btnSubmit“。【Text】設為”提交“。

【雙擊】按鈕為它綁定一個【Click】即單擊事件,代碼暫不處理。自動生成的事件名稱是【tnSubmit_Click】。

VS2022提示將提示你【命名規則沖突】,然后提示你【顯示可能的修補程序】,將會出現【解決名稱沖突】提示框,單擊執行它。

最后的結果如下圖,與上面的區別就是事件名稱由【btnSubmit_Click】改成了【BtnSubmit_Click】,首字母由小寫改成了大寫。

5、單行文字框

名稱【(Name)】設為”tbAsk“。方法與前面類似,就不圖示了。作用是讓用戶輸入提問詞。

四、撰寫程序

1、兩個函數

特別注意:第三行處要填入你自己完整的API key

private static async Task<JObject> CallDeepSeekApiAsync(string searchTerm)
{const string apiKey = "sk-9****490";  //此處填你的DeepSeek API key const string apiUrl = "https://api.deepseek.com/v1/chat/completions";using var client = new HttpClient();client.DefaultRequestHeaders.Authorization =new AuthenticationHeaderValue("Bearer", apiKey);var requestBody = new{model = "deepseek-chat",messages = new[]{new { role = "user", content = searchTerm }}};try{var response = await client.PostAsJsonAsync(apiUrl, requestBody);response.EnsureSuccessStatusCode();var responseBody = await response.Content.ReadAsStringAsync();return JObject.Parse(responseBody);}catch (HttpRequestException ex){MessageBox.Show($"請求失敗:{ex.StatusCode} - {ex.Message}");return JObject.Parse("");}
}private static string? DisplayResponse(JObject response)
{//Console.WriteLine(response.ToString(Newtonsoft.Json.Formatting.Indented));// 提取并顯示主要返回內容var choices = response["choices"];if (choices != null && choices.Type == JTokenType.Array){var firstChoice = choices[0];if (firstChoice != null){var text = firstChoice["message"]?.ToString();if (text != null){JObject key = JObject.Parse(text);var k = key["content"]?.ToString();return k;}}}else{MessageBox.Show("No choices found in the response.");}return null;
}

2、按鈕事件代碼

private async void BtnSubmit_Click(object sender, EventArgs e)
{string searchTerm = tbAsk.Text; // 替換為你希望搜索的關鍵詞或短語tbContent.Text = "請稍候,DeepSeek推理中......";try{var response = await CallDeepSeekApiAsync(searchTerm);string msg = DisplayResponse(response) ?? "";tbContent.Text = msg;}catch (Exception ex){tbContent.Text = $"An error occurred: {ex.Message}";}
}

注意,VS自動生成的代碼名稱沒有【async】修飾。

3、增加【tbAsk】事件

如果需要提問詞支持回車提問,可增加【KeyDown】事件,代碼如下:

private void TbAsk_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.Enter){btnSubmit.PerformClick();}}

五、完整代碼

using Newtonsoft.Json.Linq;
using System.Net.Http.Headers;
using System.Net.Http.Json;namespace DeepSeek
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private static async Task<JObject> CallDeepSeekApiAsync(string searchTerm){const string apiKey = "sk-9***490";  //此處填你的DeepSeek API key const string apiUrl = "https://api.deepseek.com/v1/chat/completions";using var client = new HttpClient();client.DefaultRequestHeaders.Authorization =new AuthenticationHeaderValue("Bearer", apiKey);var requestBody = new{model = "deepseek-chat",messages = new[]{new { role = "user", content = searchTerm }}};try{var response = await client.PostAsJsonAsync(apiUrl, requestBody);response.EnsureSuccessStatusCode();var responseBody = await response.Content.ReadAsStringAsync();return JObject.Parse(responseBody);}catch (HttpRequestException ex){MessageBox.Show($"請求失敗:{ex.StatusCode} - {ex.Message}");return JObject.Parse("");}}private static string? DisplayResponse(JObject response){//Console.WriteLine(response.ToString(Newtonsoft.Json.Formatting.Indented));// 提取并顯示主要返回內容var choices = response["choices"];if (choices != null && choices.Type == JTokenType.Array){var firstChoice = choices[0];if (firstChoice != null){var text = firstChoice["message"]?.ToString();if (text != null){JObject key = JObject.Parse(text);var k = key["content"]?.ToString();return k;}}}else{MessageBox.Show("No choices found in the response.");}return null;}private async void BtnSubmit_Click(object sender, EventArgs e){string searchTerm = tbAsk.Text; // 替換為你希望搜索的關鍵詞或短語tbContent.Text = "請稍候,DeepSeek推理中......";try{var response = await CallDeepSeekApiAsync(searchTerm);string msg = DisplayResponse(response) ?? "";tbContent.Text = msg;}catch (Exception ex){tbContent.Text = $"An error occurred: {ex.Message}";}}private void TbAsk_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.Enter){btnSubmit.PerformClick();}}}
}

注意:完整代碼中,我處理了我使用的【API key】,要填上自己完整的【API key】。

六、運行效果

在【提問框】中輸入”你好“,然后回車,或者單擊【提交】,后內容多行文本框顯示”請稍候,DeepSeek推理中......“。

稍候,將出現如下圖所示效果,內容顯示框顯示出了【DeepSeek】回復的內容。

七、其它

1、完整資源下載請單擊https://download.csdn.net/download/liufangshun/90455157。

2、在控制臺應用程序中調用DeepSeek API請參考我的博文Visual Stdio 2022 C#調用DeepSeek API_vs2022接入deepseek-CSDN博客,相關資源下載請單擊https://download.csdn.net/download/liufangshun/90438698。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71697.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker 如何更新容器內的環境變量,并覆蓋創建這個容器的鏡像?

docker 如何更新容器內的環境變量&#xff0c;并覆蓋串講這個容器的鏡像&#xff1f; 之前試過在容器內unset 環境變量&#xff0c;并進行docker commit 保存&#xff0c;發現這樣是不行的&#xff0c;重新啟動容器之后還是會出現之前設置過的環境變量 了解了下&#xff0c;u…

Android Coil總結

文章目錄 Android Coil總結概述添加依賴用法基本用法占位圖變形自定義ImageLoader取消加載協程支持緩存清除緩存監聽 簡單封裝 Android Coil總結 概述 Coil 是一個用于 Android 的 Kotlin 圖像加載庫&#xff0c;旨在簡化圖像加載和顯示的過程。它基于 Kotlin 協程&#xff0…

如何在WPS中接入DeepSeek并使用OfficeAI助手(超細!成功版本)

目錄 第一步&#xff1a;下載并安裝OfficeAI助手 第二步&#xff1a;申請API Key 第三步:兩種方式導入WPS 第一種:本地大模型Ollama 第二種APIKey接入 第四步&#xff1a;探索OfficeAI的創作功能 工作進展匯報 PPT大綱設計 第五步&#xff1a;我的使用體驗(體驗建議) …

Spring Boot集成Minio筆記

一、首先配置MinIO 1、MinIO新建Bucket&#xff0c;訪問控制臺如圖 創建訪問密鑰(就是賬號和密碼) 二、集成mino添加Minio客戶端依賴 1.maven構建方式在pom.xml引入jar <dependency><groupId>io.minio</groupId><artifactId>minio</artifactI…

【開源寶藏】Spring Trace 一種輕量級的日志追蹤新方式

Spring Trace&#xff1a;一種輕量級的日志追蹤新方式 一、前言 在日常開發中&#xff0c;我們常常需要在日志中標記某個請求的唯一標識&#xff08;Trace ID&#xff09;或上下文信息&#xff0c;以便快速定位問題或查看調用鏈路。傳統做法通常會使用 MDC&#xff08;Mapped…

Web網頁開發——水果忍者

1.介紹 復刻經典小游戲——水果忍者 2.預覽 3.代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

【Flink銀行反欺詐系統設計方案】6.用戶畫像數據與反欺詐系統的關聯思路

【Flink銀行反欺詐系統設計方案】6.用戶畫像數據與反欺詐系統的關聯思路 概要1. 用戶畫像數據與反欺詐系統的關聯思路1.1 用戶畫像數據內容1.2 數據賦能反欺詐的核心邏輯 2. 用戶畫像賦能反欺詐的3個案例2.1 案例1&#xff1a;消費習慣異常檢測2.2 案例2&#xff1a;設備/地理位…

如何在unity中完整錄制一段動畫

在動畫制作中&#xff0c;需要對接音頻部門進行音效的制作。通常需要完整且無多余幀數的動畫視頻作為時間和幀數對幀參考&#xff0c;這時候手動錄屏就會顯得不夠精確&#xff0c;這里分享一個插件錄制方法&#xff0c;可以自定義錄制起始位置&#xff0c;0幀起手完整錄制。 錄…

Jetson Orin 安裝 onnxruntime

Jetson Orin 安裝 onnxruntime onnxruntime在Jetson上安裝只需注意三件事&#xff1a; 版本&#xff01; 版本&#xff01; 還是TMD版本&#xff01; 本機環境 Jectpack : 5.1.2CUDA : 11.4cuDNN &#xff1a;8.6.0 版本說明 關于onnxruntime的版本適配不同的官方有不同的…

Manus AI : Agent 元年開啟.pdf

Manus AI : Agent 元年開啟.pdf 是由華泰證券出品的一份調研報告&#xff0c;共計23頁。報告詳細介紹了Manus AI 及 Agent&#xff0c;主要包括Manus AI 的功能、優勢、技術能力&#xff0c;Agent 的概念、架構、應用場景&#xff0c;以及 AI Agent 的類型和相關案例&#xff0…

【為什么會有 map、weakmap 類型?】

為什么會有 map、weakmap 類型? 傳統對象的局限性催生 Map?1. 鍵類型單一性?2. 有序性與迭代支持?3. 性能優化場景? 內存管理需求催生 WeakMap?1.弱引用機制?2. 私有數據存儲?3. 規避循環引用問題? 總結 傳統對象的局限性催生 Map? 1. 鍵類型單一性? 傳統對象&…

SpringSecurity認證授權完整流程

SpringSecurity認證流程&#xff1a;loadUserByUsername&#xff08;&#xff09;方法內部實現。 實現步驟&#xff1a; 構建一個自定義的service接口&#xff0c;實現SpringSecurity的UserDetailService接口。建一個service實現類&#xff0c;實現此loadUserByUsername方法。…

本地部署DeepSeek R1大數據模型知識庫

DeepSeek-V3 的綜合能力 DeepSeek-V3 在推理速度上相較歷史模型有了大幅提升。在目前大模型主流榜單中&#xff0c;DeepSeek-V3 在開源模型中位列榜首&#xff0c;與世界上最先進OpenAI 閉源模型不分伯仲。 1、下載Ollama運行大數據庫 Ollama支持 Llama 3.3, DeepSeek-R1, Phi-…

云端秘境:EC2的奇幻之旅

在一個神秘的云端世界里&#xff0c;流傳著一個傳說——只要掌握了 EC2&#xff08;Elastic Compute Cloud&#xff09; 的奧秘&#xff0c;就能召喚出強大的騎士軍團&#xff0c;在云端之上建造屬于自己的帝國。年輕的程序法師 艾倫&#xff08;Allen&#xff09;&#xff0c;…

【javaEE】多線程(基礎)

1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 親愛的朋友們&#x1f44b;&#x1f44b;&#xff0c;這里是E綿綿呀????。 如果你喜歡這篇文章&#xff0c;請別吝嗇你的點贊????和收藏&#x1f4d6;&#x1f4d6;。如果你對我的…

一周學會Flask3 Python Web開發-WTForms表單驗證

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 我們可以通過WTForms表單類屬性的validators屬性來實現表單驗證。 常用的WTForms驗證器 驗證器說明DataRequired(messageNo…

STM32標準庫代碼詳解之GPIO

GPIO的初始化代碼如下&#xff1a; /*開啟時鐘*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //開啟GPIOA的時鐘&#xff0c;使用外設必須開啟/*GPIO初始化*/ GPIO_InitTypeDef GPIO_InitStructure; //定義結構體變量 GPIO_InitStructure.GPIO_Mode GPIO_Mo…

華為歐拉系統 Tomcat 安裝詳解

1. 安裝或確認安裝 Java Tomcat 需要 Java 環境(JDK 或 JRE)才能運行。如果系統尚未安裝 Java,可以使用以下命令安裝 OpenJDK: # 更新軟件包索引 yum update -y# 安裝 OpenJDK 21(可根據需求安裝其他版本,如 8、11、17 等) yum install -y java-21-openjdk java-21-op…

第六課:數據庫集成:MongoDB與Mongoose技術應用

本文詳細介紹了如何在Node.js應用程序中集成MongoDB數據庫&#xff0c;并使用Mongoose庫進行數據操作。我們將涵蓋MongoDB在Ubuntu 20系統中的安裝、Bash命令的CRUD操作、Mongoose數據建模&#xff08;Schema/Model&#xff09;、關聯查詢與聚合管道&#xff0c;以及實戰案例—…

大數據學習(56)-Impala

&&大數據學習&& &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 承認自己的無知&#xff0c;乃是開啟智慧的大門 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一下博主哦&#x1f91…