前言
從 ChatGPT 到開源工具
2022 年,我初次接觸 ChatGPT 3.5 網頁端時,倍感驚豔。在那之後,我主要使用通義千問的網頁版,以應對日常的開發工作。直到今年年初,我開始深度使用 DeepSeek 的客户端,其多端同步功能帶來了不小的便利。而隨着 Gemini 2.5 Pro 的發佈,我則完全轉向了通過 API 調用並搭配開源桌面客户端的使用方式。
與 DeepSeek 深度對話
在年初使用 DeepSeek 期間,我探索出一種與 AI 進行深度對話的模式,用以探討懸而未決的人生與情感話題。最打動我的一點是,其客户端提供了一個明確的隱私開關,承諾開啓後平台將不會使用用户的聊天曆史——我選擇了信任它。讓我印象深刻的是,我們之間最長的一段對話持續了超過 200 輪,累計字數逾 50 萬,而整個過程十分流暢。
沒有好用的 AI 工具
到了年中,我開始嘗試可接入 Gemini API 的各類開源應用(如 Cherry Studio)。Gemini 2.5 Pro 的細膩和善於隱喻的表達方式是如此出色,以至於我寧願為 API 付費,也不願再回到 DeepSeek。然而,這些開源應用普遍存在設計簡陋、隱私保護不足等缺陷,嚴重影響了我的深度聊天體驗。這促使我寫下了一篇博客——《AI 聊天應用的十條高級需求》。
嘗試 Vibe Coding 開發方式
恰逢此時,得益於 Claude 3.7 Sonnet 加持的 Cursor 出現在我的視野裏,我立即着手實踐“Vibe Coding”——在兩天內就基本實現了自己提出的十個需求。順其自然地,我參考 Cursor 的命名,將這個新應用命名為 Pointer。
20 個功能點
如今,Pointer 已初具雛形,併成為我日常使用 LLM 的主要工具。在不斷打磨的過程中,我將 Pointer 的核心功能點梳理並擴展為 20 個。這些功能點與之前博客中的設想或有重疊,但經過實踐,我對每一個細節都有了更深的感悟。下面我將它們逐一記錄分享。
- 文件夾
- 標籤頁
- 消息摺疊
- 消息分支
- 消息導航
- 消息等待隊列
- 動態切換模型
- 右鍵引用
- 右鍵新建對話
- 對話截圖
- 複製表格
- 全局檢索
- 會話檢索
- 星標 or 置頂
- 收藏 or 筆記
- 導入導出
- 導入外部聊天記錄
- 對 MCP 説不
- 對多模態説不
- 對聯網搜索説不
1. 文件夾
當前主流 AI 聊天應用的會話列表,大多是按時間排序的線性結構,最新會話置於頂部。在設計 Pointer 時,我主要參考了 VS Code 的文件資源管理器,最終選擇了樹形文件夾的分類方式。這種結構的好處顯而易見:你可以按不同主題劃分會話,或在後續專門花時間整理歸納,這是一件非常 chill 愜意的事情。
- 核心操作:文件夾應支持一鍵清空、刪除、導出等批量操作。
- 待辦:多選操作是必要的,但這個功能對於 AI 輔助編程來説實現起來有些挑戰,Pointer 暫未支持。
2. 標籤頁
標籤頁是極為常見的設計,類似瀏覽器。它允許你將常用會話臨時固定,實現了變相的置頂功能。當你通過右鍵菜單“關閉其他”或“關閉所有”標籤頁時,那種“世界終於清淨了”的靜謐感,是線性列表無法給予的。
- 待辦:應記錄標籤頁的導航歷史,方便快速切換,此功能 Pointer 暫未支持。
3. 消息摺疊
AI 的回答通常篇幅較長,當對話輪次增多,上下滾動會變得非常費力。因此,消息摺疊功能必不可少。更進一步,最好能提供一個“僅收起 AI 消息”的選項,讓用户可以快速瀏覽自己的提問脈絡。
4. 消息分支
消息分支是一項極其有用的功能,它允許你基於某一次回答,探索不同的對話路徑。然而,市面上多數開源應用的實現都差強人意,這也是驅動我開發 Pointer 的核心動力之一。
5. 消息導航
在長對話中,快速定位至關重要。應用必須提供一鍵滾動到頂部和底部的功能。此外,在消息之間進行“上一條/下一條”的快速跳轉也很有必要。更高級的需求是,能夠直接跳轉到被我“星標”(star)的消息,就像在書中快速定位書籤一樣。
6. 消息等待隊列
當你已經想好了下一步問什麼,而 AI 的回覆卻十分遲緩時,怎麼辦?消息等待隊列就是答案。它允許你連續發送多條消息,系統會自動將它們緩存並按序處理。這樣,你就可以先關閉應用,去做別的事情,稍後再回來查看結果。
7. 動態切換模型
有時,你需要比較不同模型在處理同一問題上的表現差異,以判斷哪個模型更符合你的 sense 感覺。這個功能需要與“消息分支”緊密配合:每切換一次模型進行回答,就自動創建一個新的對話分支,方便對比。
8. 右鍵引用
當你在對話中看到某個詞或某句話,想讓 AI 基於它進行解釋或翻譯時,只需選中文字,通過右鍵菜單點擊“引用”,選中的內容就會被自動複製到輸入框中,極大提升了追問的效率。
9. 右鍵新建對話
與“右鍵引用”類似,當你希望基於選中的詞或句子開啓一個全新的話題時,可以通過右鍵菜單選擇“新建對話”。應用會自動將內容發送到一個全新的會話中,並且新會話會帶有一個頁面溯源的 UI 標記,讓你清楚地知道這個新話題源自何處。
10. 對話截圖
將對話導出為圖片是分享的常用方式。一個好的圖片導出功能,必須提供尺寸選擇器,以適配不同的屏幕(如適合手機分享的窄長圖)。AI 對話往往很長,導致截圖也很長,在移動端需要手動縮放才能看清,這是體驗上的痛點。
11. 複製表格
表格的複製功能,除了支持 Markdown 和 CSV 格式外,還應支持直接複製為圖片。但考慮到表格圖片在手機上的糟糕閲讀體驗,可以提供一個“降維”選項:將表格強制轉換為垂直排列的表單記錄格式,緩解移動端查看的難題。
12. 全局檢索
我最初以為全局檢索的難點在於性能,沒想到首先卡在了交互設計上。當檢索結果過多時,體驗會很糟糕。解決方案是:將結果按會話進行分組,並默認摺疊一些搜索結果,然後由用户逐一查看和展開摺疊的結果。
13. 會話內檢索
這是一個非常實用的基礎功能,幾乎所有基於瀏覽器的聊天應用都天然支持。因此,只需參考現有成熟方案來實現即可。
14. 星標 vs 置頂
“星標”是為消息打上標記,而“置頂”則是在空間佈局上賦予其優先。在我看來,側邊欄置頂功能的必要性不強,因為“標籤頁”的固定功能在很大程度上可以替代它。
15. 收藏 vs 筆記
收藏(Favorites)和筆記(Notes)本質上是同一功能,區別在於命名和其傳達的情感。我傾向於稱之為“筆記”,因為它更符合記錄和整理的本質。但“收藏”也有一個無法拒絕的理由:它可以搭配心形(❤️)圖標,表達一種“心動”的感覺,這是“筆記”二字做不到的。
- 補充:你可能會問,為什麼不用更經典的星星圖標(⭐)呢?很遺憾,在 Pointer 的設計中,星星圖標已經被“消息星標”(Message Star)功能所佔用,用於標記對話中的某條消息。
16. 導入與導出
導入導出功能必須支持選擇性操作,即允許用户只導入或導出指定的會話,而不是強制全量處理。設置、會話、收藏也應該區分開來。
17. 導入外部聊天記錄
為了方便用户遷移,應用最好能支持導入市面上所有主流 AI 聊天平台的歷史記錄。
18. 對 MCP 説不
MCP 並非一個安全的設計。我不希望為用户提供一個存在潛在安全風險的產品。
19. 對多模態説不
Pointer 的定位是一個純粹的文本聊天應用,而不是一個集成了視頻、音頻處理的工作流生產力工具。保持專注,才能把核心體驗做到極致。
20. 對聯網搜索説不
這是為了堅守隱私第一的原則。一旦啓用聯網搜索,你和 AI 的對話內容,有可能泄露給搜索引擎。
- 有人可能會反駁,那 API 提供商本身不也有風險嗎?是的,但我的設計理念是儘可能減少每一個潛在的泄露風險點。
- 或許又有人會説,至少提供一個開關,把選擇權交給用户。但我認為,對於注重隱私的敏感用户而言,他們依然會擔心程序 Bug 或意外操作導致搜索功能被調用。因此,為了徹底打消用户的顧慮,最穩妥的方案就是——根本不做這個功能。
附錄
至此,相信你對 Pointer 的三個核心設計理念已有所瞭解:
-
極致私密 (Privacy First)
通過主動捨棄聯網搜索等功能,從設計上根除隱私泄露的任何可能,為用户的思想探索打造一個絕對的“安全屋”。 -
深度高效 (Deep Efficiency)
藉助文件夾、消息分支、等待隊列等功能,專為超長、深度對話優化,確保用户心流不被打斷,讓思想能自由探索與沉澱。 -
純粹安全 (Secure & Simple)
審慎選擇技術,拒絕潛在風險,構建一個乾淨、可信賴的應用。它專注做好“純文本聊天”這一件事,拒絕功能臃腫,保障核心體驗。
GitHub 開源: https://github.com/experdot/pointer