仿Manus一

復制
┌───────────────┐       ┌─────────────┐
│   主界面UI    │?─────?│ 會話管理模塊 │
└───────┬───────┘       └──────┬──────┘│                      │▼                      ▼
┌───────────────┐       ┌─────────────┐
│ API通信模塊   │       │ 文件存儲模塊 │
└───────┬───────┘       └───────┬─────┘│                       │▼                       ▼
┌───────────────────────────────┐
│       SiliconFlow API         │
└───────────────────────────────┘用戶操作流程:
1. 新建會話 → 生成sessionID → 創建空todu文件
2. 輸入問題 → 調用API → 解析響應 → 更新todu
3. 切換會話 → 加載對應todu文件 → 刷新界面
二、核心模塊分工
1.1.界面交互模塊
- 負責控件事件處理
- 管理界面狀態刷新
- 提供用戶輸入驗證
1.2.會話管理模塊
- 維護會話列表和當前會話狀態
- 處理會話切換時的數據加載/保存
- 生成唯一sessionID
1.3.API通信模塊
- 構造符合規范的請求報文
- 處理API響應和錯誤碼
- 結果解析和數據結構轉換
1.4.文件存儲模塊
- 管理todu目錄的文件存儲
- 實現JSON格式的序列化/反序列化
- 文件變更監控和自動保存
三、主要類實現代碼(精簡版)
  1. 1.會話管理核心類
csharp復制
public class SessionManager
{private string _currentSessionId;private readonly string _workspacePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "todu");public void InitWorkspace(){if (!Directory.Exists(_workspacePath))Directory.CreateDirectory(_workspacePath);}public string CreateNewSession(){var sessionId = Guid.NewGuid().ToString("N");File.WriteAllText(GetSessionFilePath(sessionId), "[]");return sessionId;}public void SwitchSession(string sessionId){_currentSessionId = sessionId;if (!File.Exists(GetSessionFilePath(sessionId)))throw new FileNotFoundException("Session file missing");}public List<TodoItem> GetCurrentTodos(){return JsonConvert.DeserializeObject<List<TodoItem>>(File.ReadAllText(GetSessionFilePath(_currentSessionId)));}private string GetSessionFilePath(string sessionId) => Path.Combine(_workspacePath, $"{sessionId}.json");
}

2.API通信處理類

csharp復制
public class TodoApiClient
{private const string ApiEndpoint = "https://api.siliconflow.cn/v1/chat/completions";public async Task<List<TodoItem>> GenerateTodosAsync(string question){using var client = new HttpClient();client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "[YOUR_API_KEY]");var request = new{model = "deepseek-ai/DeepSeek-V3",messages = new[] {new { role = "user", content = $"請根據以下問題生成規范的待辦事項列表:{question}。按JSON數組格式返回" }},response_format = new { type = "json_object" }};var response = await client.PostAsync(ApiEndpoint, new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"));var responseObj = JObject.Parse(await response.Content.ReadAsStringAsync());return ParseTodoJson(responseObj["choices"][0]["message"]["content"].ToString());}private List<TodoItem> ParseTodoJson(string json){// 示例響應格式:{ "todos": [{...}] }return JObject.Parse(json)["todos"]?.Select(t => new TodoItem {Id = Guid.NewGuid(),Content = t["content"].ToString(),Created = DateTime.Now}).ToList() ?? new List<TodoItem>();}
}

3.文件存儲服務

csharp復制
public class TodoFileManager
{private FileSystemWatcher _watcher;public void SetupFileWatcher(Action<string> onChange){_watcher = new FileSystemWatcher{Path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "todu"),Filter = "*.json",NotifyFilter = NotifyFilters.LastWrite};_watcher.Changed += (s, e) => onChange(e.Name.Replace(".json", ""));_watcher.EnableRaisingEvents = true;}public void SaveTodos(string sessionId, List<TodoItem> todos){var json = JsonConvert.SerializeObject(todos, Formatting.Indented);File.WriteAllText(GetFilePath(sessionId), json, Encoding.UTF8);}private string GetFilePath(string sessionId) => Path.Combine("todu", $"{sessionId}.json");
}

4.窗口界面關鍵代碼(Windows Forms)

csharp復制
public partial class MainForm : Form
{private SessionManager _sessionManager = new SessionManager();private TodoApiClient _apiClient = new TodoApiClient();private BindingList<TodoItem> _currentTodos = new BindingList<TodoItem>();public MainForm(){InitializeComponent();_sessionManager.InitWorkspace();lstSessions.DisplayMember = "Key";lstSessions.ValueMember = "Value";todoListBox.DataSource = _currentTodos;todoListBox.DisplayMember = "Content";}// 新建會話按鈕private void btnNewSession_Click(object sender, EventArgs e){var sessionId = _sessionManager.CreateNewSession();lstSessions.Items.Add(new KeyValuePair<string, string>($"會話 {lstSessions.Items.Count+1}", sessionId));}// 發送提問按鈕private async void btnSend_Click(object sender, EventArgs e){var todos = await _apiClient.GenerateTodosAsync(txtInput.Text);_currentTodos.Clear();foreach(var item in todos)_currentTodos.Add(item);_sessionManager.SaveCurrentTodos(_currentTodos.ToList());}// 切換會話選擇private void lstSessions_SelectedIndexChanged(object sender, EventArgs e){if(lstSessions.SelectedItem is KeyValuePair<string, string> selected){_sessionManager.SwitchSession(selected.Value);_currentTodos = new BindingList<TodoItem>(_sessionManager.GetCurrentTodos());todoListBox.DataSource = _currentTodos;}}
}

5.擴展功能建議

csharp復制
// 增加會話元數據存儲
public class SessionMetadata
{public string SessionId { get; set; }public string Title { get; set; }public DateTime LastModified { get; set; }
}// 在SessionManager中添加
public void SaveSessionMetadata(SessionMetadata meta)
{var path = Path.Combine(_workspacePath, "_sessions.json");var list = File.Exists(path) ? JsonConvert.DeserializeObject<List<SessionMetadata>>(File.ReadAllText(path)) : new List<SessionMetadata>();if(list.Any(m => m.SessionId == meta.SessionId))list.RemoveAll(m => m.SessionId == meta.SessionId);list.Add(meta);File.WriteAllText(path, JsonConvert.SerializeObject(list));
}
TODO項狀態管理擴展
csharp復制
public class TodoItem
{public Guid Id { get; set; }public string Content { get; set; }public bool IsCompleted { get; set; }public DateTime Created { get; set; }public DateTime? CompletedDate { get; set; }
}// 在界面中添加狀態切換
private void todoListBox_MouseDoubleClick(object sender, MouseEventArgs e)
{if(todoListBox.SelectedItem is TodoItem item){item.IsCompleted = !item.IsCompleted;item.CompletedDate = item.IsCompleted ? DateTime.Now : null;_sessionManager.SaveCurrentTodos(_currentTodos.ToList());todoListBox.Refresh();}
}

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

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

相關文章

VS Code C++ 開發環境配置

VS Code 是當前非常流行的開發工具. 本文講述如何配置 VS Code 作為 C開發環境. 本文將按照如下步驟來介紹如何配置 VS Code 作為 C開發環境. 安裝編譯器安裝插件配置工作區 第一個步驟的具體操作會因為系統不同或者方案不同而有不同的選擇. 環境要求 首先需要立即 VS Code…

Flutter 學習之旅 之 flutter 不使用插件,實現簡單帶加載動畫的 LoadingToast 功能

Flutter 學習之旅 之 flutter 不使用插件&#xff0c;實現簡單帶加載動畫的 LoadingToast 功能 目錄 Flutter 學習之旅 之 flutter 不使用插件&#xff0c;實現簡單帶加載動畫的 LoadingToast 功能 一、簡單介紹 二、LoadingToast 三、簡單案例實現 四、關鍵代碼 一、簡單…

Spring (八)AOP-切面編程的使用

目錄 實現步驟&#xff1a; 1 導入AOP依賴 2 編寫切面Aspect 3 編寫通知方法 4 指定切入點表達式 5 測試AOP動態織入 圖示&#xff1a; 一 實現步驟&#xff1a; 1 導入AOP依賴 <!-- Spring Boot AOP依賴 --><dependency><groupId>org.springframewor…

開源數字人模型Heygem

一、Heygem是什么 Heygem 是硅基智能推出的開源數字人模型&#xff0c;專為 Windows 系統設計。基于先進的AI技術&#xff0c;僅需1秒視頻或1張照片&#xff0c;能在30秒內完成數字人形象和聲音克隆&#xff0c;在60秒內合成4K超高清視頻。Heygem支持多語言輸出、多表情動作&a…

uniapp開通開屏廣告后動態開啟或關閉開屏廣告

近期使用uniapp開發的APP有uniad的廣告對接&#xff0c;并且要求會員用戶不顯示包含開屏廣告在內的廣告&#xff0c;除開屏廣告外的廣告都可以通過uniapp廣告組件控制是否顯示 因uniad的開屏廣告無需代碼開發&#xff0c;經過uniad客服指點可在App.vue中的onLaunch生命周期中執…

神經網絡為什么要用 ReLU 增加非線性?

在神經網絡中使用 ReLU&#xff08;Rectified Linear Unit&#xff09; 作為激活函數的主要目的是引入非線性&#xff0c;這是神經網絡能夠學習復雜模式和解決非線性問題的關鍵。 1. 為什么需要非線性&#xff1f; 1.1 線性模型的局限性 如果神經網絡只使用線性激活函數&…

使用SSH密鑰連接本地git 和 github

目錄 配置本地SSH&#xff0c;添加到github首先查看本地是否有SSH密鑰生成SSH密鑰&#xff0c;和郵箱綁定將 SSH 密鑰添加到 ssh-agent&#xff1a;顯示本地公鑰*把下面這一串生成的公鑰存到github上* 驗證SSH配置是否成功終端跳轉到本地倉庫把http協議改為SSH&#xff08;如果…

關于AI數據分析可行性的初步評估

一、結論&#xff1a;可在部分環節嵌入&#xff0c;無法直接處理大量數據 1.非本地部署的AI應用處理非機密文件沒問題&#xff0c;內部文件要注意數據安全風險。 2.AI&#xff08;指高規格大模型&#xff09;十分適合探索性研究分析&#xff0c;對復雜報告無法全流程執行&…

矩陣分析-淺要理解(深度學習方向)

梯度分析與最優化 在深度學習的任務中&#xff0c;我們所期望的是訓練一個神經網絡&#xff0c;使得預測結果與真實標簽之間的誤差最小化&#xff0c;這可以近似看作是一個提供梯度下降等優化找到全局最優解的凸優化問題。 奇異值分解 在信息工程領域&#xff0c;對數據處理的…

使用DeepSeek+藍耘快速設計網頁簡易版《我的世界》小游戲

前言&#xff1a;如今&#xff0c;借助先進的人工智能模型與便捷的云平臺&#xff0c;即便是新手開發者&#xff0c;也能開啟創意游戲的設計之旅。DeepSeek 作為前沿的人工智能模型&#xff0c;具備強大的功能與潛力&#xff0c;而藍耘智算云平臺則為其提供了穩定高效的運行環境…

固定表頭、首列 —— uniapp、vue 項目

項目實地&#xff1a;也可以在 【微信小程序】搜索體驗&#xff1a;xny.handbook 另一個體驗項目&#xff1a;官網 一、效果展示 二、代碼展示 &#xff08;1&#xff09;html 部分 <view class"table"><view class"tr"><view class&quo…

【學習筆記】Numpy和Tensor的區別

1. NumPy 和 PyTorch Tensor 的格式對比 NumPy 使用的是 numpy.ndarray&#xff0c;而 PyTorch 使用的是 torch.Tensor&#xff0c;兩者的格式在數據存儲和計算方式上有所不同。 NumPy (numpy.ndarray) import numpy as np array np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.…

每天一道算法題【藍橋杯】【在排序數組中查找元素的第一個位置和最后一個位置】

思路 本題為查找左邊界和右邊界的標準模型 查找左邊界 int left 0, right nums.size() - 1, mid 0; //查找左邊界 while (left < right) { mid left (right - left) / 2; if (nums[mid] < target) left mid 1; else right mid; } 查找右邊界 int left 0, r…

Python數據分析之機器學習基礎

Python 數據分析重點知識點 本系列不同其他的知識點講解&#xff0c;力求通過例子讓新同學學習用法&#xff0c;幫助老同學快速回憶知識點 可視化系列&#xff1a; Python基礎數據分析工具數據處理與分析數據可視化機器學習基礎 五、機器學習基礎 了解機器學習概念、分類及…

我與DeepSeek讀《大型網站技術架構》(10)- 維基百科的高性能架構設計分析

目錄 網站整體架構核心組件請求處理流程圖關鍵環節說明 性能優化策略前端優化&#xff1a;攔截 80% 以上請求服務端優化&#xff1a;高性能 PHP 集群后端優化&#xff1a;存儲與緩存極致設計Memcached 持久化連接 性能優化策略對比表 網站整體架構 核心組件 Wikipedia 的架構…

Excel多級聯動下拉菜單設置

1.問題描述 現有數據表如下圖所示&#xff1a; 該表中包括省、市、縣三級目錄。 現要將其整理成數據表模板&#xff0c;如下圖所示&#xff1a; 要求制作成下拉菜單的形式&#xff0c;且每一級目錄的下拉菜單列表要根據上一級目錄的內容來確定。 如上圖所示&#xff0c;只有…

智駕技術全鏈條解析

智駕技術全鏈條解析&#xff08;2025年最新版&#xff09; 智駕技術涵蓋從環境感知到車輛控制的完整閉環&#xff0c;涉及硬件、算法、數據與系統集成等多個領域。以下結合行業最新進展&#xff08;截至2025年3月&#xff09;進行深度拆解&#xff1a; 一、感知技術&#xff1…

SpringMVC執行的流程

SpringMVC 基于 MVC 架構模式&#xff0c;核心流程時前端控制室 DispathcherServlet 統一調度&#xff0c;通過組件協作完成 http 的請求與響應。 對于 dispatchServlet 作為前端請求的控制器&#xff0c;全局的訪問點&#xff0c;首先將根據 URL 調用 HandlerMapping 獲取 Han…

Linux學習(十五)(故障排除(ICMP,Ping,Traceroute,網絡統計,數據包分析))

故障排除是任何 Linux 用戶或管理員的基本技能。這涉及識別和解決 Linux 系統中的問題。這些問題的范圍包括常見的系統錯誤、硬件或軟件問題、網絡連接問題以及系統資源的管理。Linux 中的故障排除過程通常涉及使用命令行工具、檢查系統和應用程序日志文件、了解系統進程&#…

存儲過程和自定義函數在銀行信貸業務中的應用(oracle)

數據校驗和清洗 例如&#xff0c;檢查客戶的年齡是否在合理范圍內&#xff0c;貸款金額是否符合規定的上下限等。 對于不符合規則的數據&#xff0c;可以進行清洗和修正。比如&#xff0c;將空值替換為默認值&#xff0c;或者對錯誤的數據進行糾正。 CREATE OR REPLACE PROC…