如何將 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,按順序保留每一輪,保留程式碼區塊及其語言標籤,生成讀起來像真正文件的檔案,而不是複製貼上的傾倒。

運作方式:

  1. 在 Chrome 中開啟 ChatGPT 對話(自己的對話、分享連結,或 Custom GPT 工作階段)
  2. 點擊工具列中的 Save 擴充功能圖示
  3. 一個 .md 檔案立即下載(如果已連接,則進入你的 Save Vault)

你得到的:

  • 每一輪使用者和助手對話,按順序,帶角色標籤(## You / ## ChatGPT
  • 程式碼區塊及其語言識別碼保留(typescriptpythonbash、…)
  • 表格、有序和無序清單、行內引用完整保留
  • 數學符號渲染為 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 步驟:

  1. 開啟對話,點擊 Share,產生連結
  2. 在無痕視窗開啟連結
  3. 使用瀏覽器的「Save Page」或手動把可見文字複製到 Markdown 檔案

Export 步驟:

  1. Settings → Data Controls → Export data
  2. 等 OpenAI 寄給你下載連結電子郵件(可能要幾小時)
  3. 解壓縮檔案 --- 你得到一個 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 檔案,手動修復。

步驟:

  1. 捲動到對話頂部
  2. 全選(在聊天面板內 Cmd+A)
  3. 貼到你的編輯器
  4. 重新加入角色標題、修復程式碼區塊圍欄、還原被壓平的清單

這種方法的問題:

  • 程式碼區塊以純文字複製,沒有語言標籤 --- 語法高亮沒了
  • 表格變成由 tab 分隔的扁平行 --- 必須手動重建
  • 行內數學符號複製為損壞的 Unicode
  • 角色標籤(「You」、「ChatGPT」)不總是出現在選擇中
  • 對於任何超過十二輪的內容,清理時間比重新讀對話還長

適合單一簡短回答。在任何像樣的研究上會崩潰。

你應該用哪個方法?

場景最佳方法
把 ChatGPT 線索貼到 Claude 或 GeminiSave --- 一鍵、結構化 Markdown
把研究線索存檔到 ObsidianSave --- 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.aigemini.google.com 上的運作方式和在 ChatGPT 上一樣 --- 輸出使用模型特定的角色標籤(## Claude## Gemini),但檔案結構相同。

它保留原始對話標題嗎? 是。ChatGPT 側邊欄顯示的標題成為 frontmatter 中的 title 欄位和檔名。如果你重新命名了對話,儲存的是重新命名後的名字。

程式碼區塊真的帶語言標籤保留嗎? 是。ChatGPT 在 DOM 中給程式碼區塊標記語言(language-typescriptlanguage-python 等),Save 讀取這些。輸出中你得到的是帶正確語言的三反引號圍欄。

它支援 Custom GPT 嗎? 是。Custom GPT 的名字出現在 frontmatter 中。對話中的工具呼叫(瀏覽、程式碼解譯器、檔案分析)被標記,讓你能區分一般回答和涉及工具的回答。

多少錢? Save 有免費層,讓你在幾個對話上試用。之後,一個小訂閱涵蓋 Save 支援的所有網站的持續使用。

相關 Save 指南

## Continue reading

Jean-Sébastien Wallez

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.