如何將 ChatGPT 對話儲存為 Markdown(每輪對話、程式碼區塊完整保留)
ChatGPT 對話中包含寶貴的洞察 --- 終於跑通的提示詞、你否則得從頭重寫的程式碼區塊、你花兩個小時建立的研究線索。但它們被困在 OpenAI 的介面裡。沒有真正的逐對話匯出,分享連結的格式剝離了大部分結構,而複製貼上會破壞程式碼格式。把 ChatGPT 對話儲存為 Markdown,讓你能存檔、引用,或把它餵回另一個模型。
本指南涵蓋把 ChatGPT 對話轉換為乾淨 Markdown 的所有方法 --- 從快速的單輪回答到千輪的研究線索。
為什麼要把 ChatGPT 對話儲存為 Markdown?
Markdown 是任何對話需要去的地方都能運作的格式:
- 餵給另一個模型 --- Claude、Gemini 和本地模型都原生讀取 Markdown,所以 ChatGPT 線索就成為下一個提示的上下文
- 放進 Obsidian 或 Notion --- 一個檔案,完全可搜尋,標題恰當,連結到相關筆記
- 建立提示庫 --- 儲存那些有效的對話,按任務組織,跨專案複用
- 在消失之前存檔 --- 刪除的對話永遠沒了,分享連結可能失效,你的知識不應依賴 OpenAI 的介面
- 引用特定輪次 --- 在 200 輪線索中找到「GPT 關於遷移計畫說了什麼」,一旦是文字就是一次搜尋的距離
2026 年推動 ChatGPT 到 Markdown 最多流量的用例是第一個:人們想把 ChatGPT 研究線索交給 Claude 或本地模型繼續,但貼上分享 URL 不起作用。
方法 1:Save(最快,一鍵)
Save 是一個 Chrome 擴充功能,能一鍵把任何 ChatGPT 對話變成 Markdown 檔案。它遍歷對話 DOM,按順序保留每一輪,保留程式碼區塊及其語言標籤,生成讀起來像真正文件的檔案,而不是複製貼上的傾倒。
運作方式:
- 在 Chrome 中開啟 ChatGPT 對話(自己的對話、分享連結,或 Custom GPT 工作階段)
- 點擊工具列中的 Save 擴充功能圖示
- 一個
.md檔案立即下載(如果已連接,則進入你的 Save Vault)
你得到的:
- 每一輪使用者和助手對話,按順序,帶角色標籤(
## You/## ChatGPT) - 程式碼區塊及其語言識別碼保留(
typescript、python、bash、…) - 表格、有序和無序清單、行內引用完整保留
- 數學符號渲染為 LaTeX,而不是損壞的 Unicode
- frontmatter 中包含對話標題和建立日期
- 帶有標題、模型、日期、URL 的 frontmatter --- 檔案自描述
被移除的:
- ChatGPT 側邊欄、模型選擇器、分享按鈕和其他 UI 元素
- 「Regenerate response」按鈕和其他互動式小工具
- 串流回應的載入狀態(token 中途快照)
- 空輪次和中斷的生成
適用於:
chatgpt.com上你自己的對話(已登入)- 分享的對話連結(
chat.openai.com/share/...和chatgpt.com/share/...) - Teams 和 Enterprise 對話,如果你的瀏覽器有存取權限
- Custom GPT 對話
- 專案對話,及其引用的釘選檔案
最適合: 研究者、提示工程師、AI 使用者、學生。如果你需要一個貼進 Claude 或保留在 Obsidian 中的乾淨 ChatGPT 匯出,這是最乾淨的路徑。
輸出範例
儲存一個關於 Express + TypeScript 的簡短 ChatGPT 對話產生:
---
title: "Building a REST API with Express and TypeScript"
model: GPT-4
date: 2026-05-22
url: https://chatgpt.com/c/68301f4a-...
---
## You
How do I set up an Express server with TypeScript and proper
error handling?
## ChatGPT
Here's a production-ready Express + TypeScript setup:
\`\`\`typescript
import express, { Request, Response, NextFunction } from 'express';
const app = express();
app.use(express.json());
app.get('/api/users/:id', async (req: Request, res: Response,
next: NextFunction) => {
try {
const user = await findUser(req.params.id);
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
res.json(user);
} catch (err) {
next(err);
}
});
app.use((err: Error, req: Request, res: Response,
next: NextFunction) => {
console.error(err.stack);
res.status(500).json({ error: 'Internal server error' });
});
\`\`\`
Key points:
1. **Type your handlers** --- use `Request`, `Response`, `NextFunction`
2. **Wrap async routes** --- always try/catch to forward errors
3. **Global error handler** --- catches anything routes miss
## You
What about validation on the request body?
## ChatGPT
Add a Zod schema and a middleware...
那個檔案離成為 Claude 可用的上下文只差一次貼上,離成為永久 Obsidian 筆記只差一次按鍵。
方法 2:ChatGPT 內建的 Share + Export
OpenAI 提供兩條官方路徑:逐對話的 Share 和帳號層級的 Export。
Share 步驟:
- 開啟對話,點擊 Share,產生連結
- 在無痕視窗開啟連結
- 使用瀏覽器的「Save Page」或手動把可見文字複製到 Markdown 檔案
Export 步驟:
- Settings → Data Controls → Export data
- 等 OpenAI 寄給你下載連結電子郵件(可能要幾小時)
- 解壓縮檔案 --- 你得到一個 HTML 檢視器加一個包含你所有對話的巨型
conversations.json檔案
這種方法的問題:
- 分享連結的 HTML 不是 Markdown --- 你還得轉換,過程中程式碼區塊遺失語言標籤
- 匯出給你的是整個帳號的一個巨型 JSON,而不是逐對話一個檔案
- JSON 結構未文件化,會無預警改變;乾淨地解析它本身就是一個專案
- Custom GPT 工作階段和專案對話有時根本不出現在匯出中
- 重新執行匯出會再拉一遍所有內容 --- 沒有增量同步
如果你只需要一兩個對話,或者願意寫 JSON 解析器,可以用。
方法 3:瀏覽器擴充功能(SaveAsMyChat 等)
少數 Chrome 擴充功能專門針對 ChatGPT 匯出 --- SaveAsMyChat、ChatGPT to Markdown、Superpower ChatGPT 等。
最適合: 只從 ChatGPT 匯出、不在乎其他來源的人。
跨工具用例的問題:
- 大多數只支援 ChatGPT --- 不處理 Claude、Gemini 或你想儲存的任何非 AI 頁面
- 輸出品質參差不齊 --- 有些遺失程式碼語言標籤,有些把 Markdown 表格壓平,有些把擴充功能自己的品牌注入檔案
- 許多沒有為當前 ChatGPT UI 更新 --- OpenAI 經常改 DOM,單一用途的擴充功能靜默崩潰
- 一些需要你在每個對話裡手動點擊「Export」;不是一鍵流程
- 維護和權限是賭博 --- 被遺棄的擴充功能仍然推出要求更多存取權限的更新
如果你只要 ChatGPT,任何一個都能用。如果你還儲存 Reddit 串、YouTube 影片、GitHub issue 和 Notion 頁面,你最終會用五個擴充功能做一個本應該做的事。
方法 4:複製貼上然後重新格式化
最低科技的選項:選擇對話,複製,貼到 Markdown 檔案,手動修復。
步驟:
- 捲動到對話頂部
- 全選(在聊天面板內 Cmd+A)
- 貼到你的編輯器
- 重新加入角色標題、修復程式碼區塊圍欄、還原被壓平的清單
這種方法的問題:
- 程式碼區塊以純文字複製,沒有語言標籤 --- 語法高亮沒了
- 表格變成由 tab 分隔的扁平行 --- 必須手動重建
- 行內數學符號複製為損壞的 Unicode
- 角色標籤(「You」、「ChatGPT」)不總是出現在選擇中
- 對於任何超過十二輪的內容,清理時間比重新讀對話還長
適合單一簡短回答。在任何像樣的研究上會崩潰。
你應該用哪個方法?
| 場景 | 最佳方法 |
|---|---|
| 把 ChatGPT 線索貼到 Claude 或 Gemini | Save --- 一鍵、結構化 Markdown |
| 把研究線索存檔到 Obsidian | Save --- frontmatter + 乾淨的輪次結構 |
| 跨工具建立提示庫 | Save --- ChatGPT、Claude、其他任何地方都同樣的工作流 |
| 批次匯出你的整個 ChatGPT 歷史 | OpenAI Export --- 「一次所有對話」的唯一路徑 |
| 把單一對話作為公開連結分享 | ChatGPT Share --- 原生,無需安裝 |
| 單輪回答的快速複製 | 複製貼上 --- 對瑣碎情況還行 |
對於大多數人 --- 尤其是任何在 AI 工具間移動對話或保留嚴肅存檔的人 --- Save 是答案。它零設定就產生最乾淨的 Markdown,並且像處理兩輪線索一樣處理千輪線索。
Save 處理的邊緣情況
- 非常長的對話(1000+ 輪)。 Save 遍歷完整 DOM 並寫出每一輪。frontmatter 包含輪次計數,讓你一眼看到大小。長線索多花幾秒;輸出保持乾淨。
- 包含圖像的對話(DALL-E 輸出、視覺輸入)。 生成的圖像被連結回它們的 CDN URL。你上傳的視覺輸入圖像按它們在輪次中的位置被引用。兩種情況下,對話其餘部分的文字內容都被完全保留。
- 帶編輯的多輪程式碼生成。 當助手編輯前一個程式碼區塊(或你編輯)時,每個版本按順序留在匯出中,所以你可以看到程式碼如何在對話中演進。
- Custom GPT 對話。 Custom GPT 的名字出現在 frontmatter 中。工具呼叫(網頁瀏覽、檔案分析、程式碼解譯器)被這樣標記,讓你能區分助手執行工具還是從訓練中回答。
- 分支對話(重新生成的回應)。 ChatGPT 讓你重新生成或編輯來建立分支。Save 匯出當前活動分支 --- 你點擊擴充功能時 UI 中可見的那個 --- 而不是每個備選回應。
- ChatGPT Memory 引用。 當助手說「如我們之前討論過的」並從 Memory 中提取時,那是儲存在模型上下文中,而不是頁面中。Save 只能匯出頁面上的內容;Memory 內容不會出現在檔案中。
- O1 / o1-pro 隱藏的推理鏈。 OpenAI 不暴露推理模型的完整思維鏈 --- 它顯示一個摘要。Save 匯出頁面上可見的摘要,那是使用者看到的。原始隱藏推理對任何客戶端工具都不可用。
與你的工作流搭配
Markdown 輸出在任何你需要的地方都能運作:
- Claude / Gemini / 本地 LLM --- 把檔案貼進去,在不同的模型中繼續對話
- Obsidian --- 放進你的庫,連結到相關筆記,跨所有儲存的 AI 線索搜尋
- Notion --- 直接貼上,標題和程式碼區塊正確渲染,表格保持是表格
- Apple Notes --- 透過 Markdown 分享擴充功能乾淨匯入
- Save Vault --- 如果你連接了一個,每次 ChatGPT 儲存都自動帶著反向連結和標籤進入,與每個其他來源的儲存並列
常見問題
Save 能在 ChatGPT 行動應用程式上運作嗎? 擴充功能只支援桌面 Chrome。在行動裝置上,用行動 Safari 或 Chrome 開啟對話,複製分享連結,然後從你的桌面瀏覽器儲存。
我能只儲存一輪而不是整個對話嗎? 預設是整個對話,因為那是大多數人想要的。你可以之後透過刪除不需要的輪次來修剪檔案 --- 是純 Markdown。
它對別人分享的連結有效嗎? 是。在瀏覽器中開啟分享連結,點擊擴充功能,你就得到一個 Markdown 檔案。分享連結不需要登入 ChatGPT。
Claude 或 Gemini 的對話怎麼辦?
同一個擴充功能。Save 在 claude.ai 和 gemini.google.com 上的運作方式和在 ChatGPT 上一樣 --- 輸出使用模型特定的角色標籤(## Claude、## Gemini),但檔案結構相同。
它保留原始對話標題嗎?
是。ChatGPT 側邊欄顯示的標題成為 frontmatter 中的 title 欄位和檔名。如果你重新命名了對話,儲存的是重新命名後的名字。
程式碼區塊真的帶語言標籤保留嗎?
是。ChatGPT 在 DOM 中給程式碼區塊標記語言(language-typescript、language-python 等),Save 讀取這些。輸出中你得到的是帶正確語言的三反引號圍欄。
它支援 Custom GPT 嗎? 是。Custom GPT 的名字出現在 frontmatter 中。對話中的工具呼叫(瀏覽、程式碼解譯器、檔案分析)被標記,讓你能區分一般回答和涉及工具的回答。
多少錢? Save 有免費層,讓你在幾個對話上試用。之後,一個小訂閱涵蓋 Save 支援的所有網站的持續使用。
相關 Save 指南
- 把 Claude 對話儲存為 Markdown --- 每輪,artifact 和工具呼叫完整
- 把 YouTube 影片儲存為 Markdown --- 文字稿、摘要、章節時間戳
- 把 GitHub 倉庫和 issue 儲存為 Markdown --- README、issue、PR 討論,全部在一個檔案中
- 把 Notion 頁面儲存為 Markdown --- toggle 展開,資料庫作為表格
## Continue reading
如何將 Claude 對話儲存為 Markdown(Artifacts、引用、Projects)
將 Claude 對話轉換為乾淨的 Markdown:每個回合、Artifacts 作為程式碼區塊、保留引用。給研究者與 AI 使用者的完整指南。
如何將 Reddit 串文儲存為 Markdown(含留言與上下文)
將任何 Reddit 串文轉換為乾淨的 Markdown,保留巢狀留言、karma、flair 和 OP 標記。2026 年研究人員與 AI 使用者完整指南。
如何將 YouTube 影片儲存為 Markdown(逐字稿、摘要、時間戳)
把任何 YouTube 影片轉成乾淨的 Markdown:AI 逐字稿、摘要、時間戳、章節標記。給研究者與 AI 使用者的 2026 完整指南。
如何將 Notion 頁面儲存為 Markdown(toggle 展開,database 轉為表格)
把任何 Notion 頁面轉成乾淨的 Markdown:toggle 展開,database 轉為表格,callout 保留。給 Obsidian 和 AI 使用者的 2026 完整指南。
Written by
Jean-Sébastien Wallez
I've been making internet products for 10+ years. Built Save on weekends because I wanted my own reading library in clean markdown for Claude and Obsidian. Write here about web clipping, AI workflows, and the small things that make a personal knowledge base actually useful.