using Ohh.ChatAi.TotalApi.DeepSeek.Models;
using Ohh.ChatAi.TotalApi.DeepSeek.Models.Consts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Ohh.ChatAi.TotalApi.CSharp.Example
{
public partial class DeepSeekExample : Form
{
/// <summary>
/// DeepSeek對象
/// </summary>
private DeepSeekClient _deepSeekClient;

/// <summary>
/// 系統角色設定
/// </summary>
private const string SysContent = "你是 DeepSeek AI 提供的人工智能助手,你更擅長中文和英文的對話。你會為用戶提供安全,有幫助,準確的回答。同時,你會拒絕一切涉及恐怖主義,種族歧視,黃色暴力等問題的回答。Moonshot AI 為專有名詞,不可翻譯成其他語言";

public DeepSeekExample()
{
InitializeComponent();
//---------
_deepSeekClient = new DeepSeekClient("sk-xxxxxxxxxxxxx");
}

private void DeepSeekExample_Load(object sender, EventArgs e)
{

}

/// <summary>
/// 單輪流式聊天
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void button1_Click(object sender, EventArgs e)
{
try
{
richTextBox1.Clear();
//------
var chatReq = new ChatRequest
{
model = ChatModels.DeepseekChat,
messages = new List<MessagesItem> {
new MessagesItem { role = ChatRoles.System, content = SysContent },
new MessagesItem { role = ChatRoles.User, content = textBox1.Text }
},
stream = true
};
// 訂閱事件
_deepSeekClient.MessageReceivedEventHandler -= OnMessageReceived;
_deepSeekClient.ErrorEventHandler -= OnErrorMsg;
_deepSeekClient.MessageReceivedEventHandler += OnMessageReceived;
_deepSeekClient.ErrorEventHandler += OnErrorMsg;
// 開始任務
await _deepSeekClient.ChatStreamAsync(chatReq);
// 局部函數,訂閱SSE 消息事件
void OnMessageReceived(object s, ChatResponse m)
{
//Console.WriteLine("聊天內容:" + ee);
Invoke(new Action(() =>
{
var msg = m.choices?.FirstOrDefault()?.delta.content;
if (msg != null) richTextBox1.AppendText(msg);
}));
}
// 局部函數,訂閱SSE 錯誤事件
void OnErrorMsg(object s, Exception ex)
{
MessageBox.Show(ex.Message);
}
}
catch (Exception ex)
{
Console.WriteLine("流式聊天失敗:" + ex.Message);
}
}

/// <summary>
/// 單輪普通聊天
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void button2_Click(object sender, EventArgs e)
{
try
{
var chatReq = new ChatRequest
{
model = ChatModels.DeepseekChat,
messages = new List<MessagesItem> {
new MessagesItem { role = ChatRoles.System, content = SysContent },
new MessagesItem { role = ChatRoles.User, content = textBox1.Text }
}
};
var chatRes = await _deepSeekClient.ChatAsync(chatReq);
Console.WriteLine("聊天內容:" + chatRes.choices?.FirstOrDefault()?.message.content);
richTextBox1.Text = chatRes.choices?.FirstOrDefault()?.message.content;
}
catch (Exception ex)
{
Console.WriteLine("聊天失敗:" + ex.Message);
}
}

/// <summary>
/// 多輪對話列表
/// </summary>
private List<MessagesItem> HistoryList = new List<MessagesItem> { new MessagesItem { role = ChatRoles.System, content = SysContent } };

/// <summary>
/// 多輪流式對話
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void button3_Click(object sender, EventArgs e)
{

try
{
richTextBox1.Clear();
//------當前要說的內容
HistoryList.Add(new MessagesItem { role = ChatRoles.User, content = textBox1.Text });
//------
var chatReq = new ChatRequest
{
model = ChatModels.DeepseekChat,
messages = HistoryList,
stream = true
};
// 訂閱事件
_deepSeekClient.MessageReceivedEventHandler -= OnMessageReceived;
_deepSeekClient.ErrorEventHandler -= OnErrorMsg;
_deepSeekClient.CloseedEventHandler -= OnCloseed;
_deepSeekClient.MessageReceivedEventHandler += OnMessageReceived;
_deepSeekClient.ErrorEventHandler += OnErrorMsg;
_deepSeekClient.CloseedEventHandler += OnCloseed;
// 開始任務
await _deepSeekClient.ChatStreamAsync(chatReq);
// 局部函數,訂閱SSE 消息事件
void OnMessageReceived(object s, ChatResponse m)
{
//Console.WriteLine("聊天內容:" + ee);
Invoke(new Action(() =>
{
var msg = m.choices?.FirstOrDefault()?.delta.content;
if (msg != null)
{
richTextBox1.AppendText(msg);
}
}));
}
// 局部函數,訂閱SSE 錯誤事件
void OnErrorMsg(object s, Exception ex)
{
MessageBox.Show(ex.Message);
}
// 局部函數,訂閱SSE 關閉事件
void OnCloseed(object s, string ex)
{
HistoryList.Add(new MessagesItem { role = ChatRoles.Assistant, content = textBox1.Text });
}
}
catch (Exception ex)
{
Console.WriteLine("流式聊天失敗:" + ex.Message);
}
}

/// <summary>
/// 多輪普通聊天
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void button4_Click(object sender, EventArgs e)
{
try
{
//------當前要說的內容
HistoryList.Add(new MessagesItem { role = ChatRoles.User, content = textBox1.Text });
//-------------------
var chatReq = new ChatRequest
{
model = ChatModels.DeepseekChat,
messages = HistoryList
};
var chatRes = await _deepSeekClient.ChatAsync(chatReq);
HistoryList.Add(new MessagesItem { role = ChatRoles.Assistant, content = textBox1.Text });
Console.WriteLine("聊天內容:" + chatRes.choices?.FirstOrDefault()?.message.content);
richTextBox1.Text = chatRes.choices?.FirstOrDefault()?.message.content;
}
catch (Exception ex)
{
Console.WriteLine("聊天失敗:" + ex.Message);
}
}

}
}

文章轉自微信公眾號@辦公魔盒

上一篇:

告別Mock服務: 用Chrome DevTools模擬API數據

下一篇:

如何使用DBAPI快速搭建自己的API平臺
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費