news 2026/5/10 6:03:31

AI对话一键导出工具:Tampermonkey脚本实现跨平台知识留存

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI对话一键导出工具:Tampermonkey脚本实现跨平台知识留存

1. 项目概述与核心价值

如果你和我一样,日常重度依赖 ChatGPT、Claude、Gemini 这些 AI 助手来辅助编程、写作、学习,那你一定遇到过这个痛点:一段精彩的对话,一个完美的解决方案,或者一次深入的技术探讨,最终都只能“锁”在平台的聊天窗口里。想整理成笔记?得手动复制粘贴,格式全乱。想分享给同事?截图不完整,复制文本又丢失了代码高亮和上下文。更别提那些动辄上百条消息的长篇对话,想回顾某个特定观点,得在聊天记录里“大海捞针”。

这正是我当初动手开发AI Chat Exporter这个 Tampermonkey 用户脚本的初衷。它不是什么复杂的桌面应用,而是一个轻巧的浏览器脚本,安装后,你会在 ChatGPT、Claude、Copilot、Gemini 甚至 Grok 的聊天页面右下角,看到一个不起眼的“导出”按钮。点击它,你与 AI 的整个对话,包括你精心提问的措辞、AI 那逻辑清晰的回答、里面嵌套的代码块、表格、甚至数学公式,都会被原汁原味地转换成一个结构清晰的 Markdown 或 JSON 文件。

这个工具解决的核心问题,是知识留存与二次利用的效率瓶颈。它把一次性的、封闭的对话,变成了结构化的、可搜索、可编辑、可归档的数字资产。无论是将技术讨论整理成项目文档,将学习问答汇总成个人知识库,还是将创意碰撞保存为灵感素材,这个一键导出的动作,让信息的流动和沉淀变得无比顺畅。经过几个版本的迭代,现在的 v3.1.0 版本已经非常稳定,支持五大主流平台,并且加入了聊天大纲、选择性导出、正则搜索等堪称“生产力神器”的功能。接下来,我就带你深入拆解这个工具,从安装到高阶使用,分享我踩过的坑和总结出的最佳实践。

2. 工具选型、安装与初体验

2.1 为什么选择 Tampermonkey 脚本?

在决定技术方案时,我考虑过几种路径:浏览器插件、独立桌面应用、或者基于 API 的爬虫。最终选择 Tampermonkey 用户脚本,是基于以下几个核心考量:

  1. 极低的用户使用门槛:用户只需要安装一次 Tampermonkey 这个“脚本管理器”,之后任何脚本都是“一键安装”。无需关心不同操作系统的兼容性,也无需处理复杂的权限配置。这对于非技术背景的用户来说极其友好。
  2. 无平台依赖与数据安全:脚本运行在用户的浏览器本地,直接操作当前页面的 DOM。所有数据处理(格式转换、文件生成)都在用户本地完成,对话内容不会上传到任何第三方服务器。这对于包含敏感信息或私有创意的对话至关重要,完全避免了数据泄露的风险。
  3. 即时生效与平台同步更新:AI 聊天平台的 UI 更新频繁。作为前端脚本,我可以快速响应 DOM 结构的变化,发布修复版本。用户更新脚本也极其简单(通常 Tampermonkey 会自动提示更新),确保了工具能跟上平台迭代的步伐。
  4. 开发与维护效率:使用 JavaScript 直接操作 DOM,可以精准地定位和提取页面中的聊天消息、元数据。配合 Turndown 这样的库,能非常稳健地将 HTML 转换为 Markdown,省去了从零解析的麻烦。

注意:虽然 Tampermonkey 是主流选择,但在一些基于 Chromium 的新浏览器(如 Arc)或严格的安全策略下,可能需要额外步骤启用用户脚本支持。不过,对于 Chrome、Firefox、Edge 等绝大多数浏览器,安装过程都是顺畅无阻的。

2.2 一步步完成安装与配置

安装过程非常简单,但为了确保万无一失,我建议你严格按照以下步骤操作:

  1. 安装脚本管理器: 首先,你需要为你的浏览器安装 Tampermonkey。直接访问其 官方网站 ,页面会根据你的浏览器自动推荐正确的版本(Chrome、Firefox、Edge 等)。点击安装,这和你安装任何其他浏览器扩展程序没有区别。安装成功后,浏览器工具栏区域会出现 Tampermonkey 的图标(通常是一个黑色的猴子头)。

  2. 安装 AI Chat Exporter 脚本: 你有两种方式安装脚本:

    • 推荐方式(从 GitHub 安装):访问项目的 GitHub 发布页面 或直接打开 脚本的 raw 链接 。Tampermonkey 检测到这是用户脚本文件后,会自动弹出安装界面。在这里,你可以看到脚本的完整代码、其匹配的网址(*://chatgpt.com/*,*://claude.ai/*等),以及授权信息。直接点击“安装”即可。
    • 备用方式(从 Greasy Fork 安装):你也可以访问 Greasy Fork 上的脚本页面 点击安装按钮。Greasy Fork 是一个知名的用户脚本托管站,有时访问更顺畅。
  3. 验证安装与首次使用: 安装完成后,打开任意一个支持的 AI 聊天页面(例如chatgpt.com上的一个已有对话)。稍等片刻(通常1-2秒),你应该能在页面右下角看到一个半透明的浮动按钮,上面写着“⬇ Export MD”。如果页面较长,右侧可能还会出现一个可折叠的“聊天大纲”面板。看到这些,就说明脚本已经成功运行了。

实操心得:有时安装后按钮没有立即出现,可能是页面尚未完全加载,或者脚本因浏览器缓存未生效。可以尝试刷新页面(F5),或者检查 Tampermonkey 管理面板中该脚本是否已启用并匹配当前网址。

2.3 初识核心界面与基础导出

脚本的 UI 设计力求简洁、非侵入式:

  • 主导出按钮:固定在右下角的“⬇ Export MD”和“⬇ JSON”按钮。点击即可下载整个对话。
  • 聊天大纲面板:位于右侧边缘的一个可伸缩面板。点击其标题栏的“←”或“→”可以展开/收缩。展开后,你会看到按顺序排列的所有用户问题和 AI 回答的摘要。这个面板是进行选择性导出快速导航的核心。
  • 搜索框:位于聊天大纲面板顶部。你可以在这里输入关键词或正则表达式,快速过滤和定位对话内容。

现在,找一个不太重要的对话,点击“⬇ Export MD”按钮。浏览器会立即下载一个.md文件。用你喜欢的 Markdown 编辑器(如 VS Code、Obsidian、Typora)打开它,你会惊喜地发现,整个对话的结构被完美保留了:标题、元数据、目录、问答对、代码块、加粗、斜体,甚至是一些平台特有的元素(如 Claude 的附件提示、Gemini 的引用来源)都被合理地转换了。

这个初体验会让你立刻感受到工具带来的效率提升。但这只是开始,它真正强大的功能藏在细节和配置里。

3. 核心功能深度解析与实操要点

3.1 跨平台支持的实现原理与适配挑战

支持五个不同的平台(ChatGPT, Claude, Copilot, Gemini, Grok),听起来简单,实则是本工具开发中最大的挑战之一。每个平台的网页结构、CSS 类名、消息加载机制都截然不同。

核心原理是:脚本通过 Tampermonkey 注入到页面后,会首先检测当前页面的 URL(window.location.hostname),判断属于哪个平台。然后,它会加载针对该平台预设的一套“选择器”(Selectors)。这些选择器本质上是 CSS 路径,告诉脚本:“在这个平台,聊天标题在这个 DOM 节点里,用户消息的容器是这个 class,AI 消息的容器是那个 class,代码块是用这个标签包裹的……”

例如,在 ChatGPT 上,获取消息列表的选择器可能是div[data-message-author-role],而在 Claude 上,则可能是div[class*=\"Message__Content\"]。脚本会使用document.querySelectorAll来抓取这些元素。

我遇到的适配挑战与解决方案

  1. 动态加载与滚动加载:像 Gemini 这样的平台,聊天记录不会一次性全部加载。脚本需要模拟滚动到顶部,触发平台加载更多历史消息。在 v2.5.0 中,我实现了自动滚动逻辑,并增加了一个手动触发按钮(点击聊天大纲的第一条消息)作为备用方案。
  2. DOM 结构频繁变更:AI 平台的前端团队更新很勤快。一次 UI 改版就可能让旧的选择器全部失效。这就是为什么 v3.0.0 是一个“关键平台修复”版本,完全重写了 ChatGPT、Claude、Copilot 的选择器。作为用户,如果你发现某天导出按钮不见了或导出的内容为空,第一反应应该是检查脚本是否有更新可用。
  3. 样式隔离与主题冲突:早期版本中,聊天大纲面板的样式会受到平台深色/浅色主题的影响,导致文字看不清。在 v2.7.0 中,我强制为面板应用了独立的浅色主题 CSS,确保了 UI 在任何环境下都清晰可用。

注意事项:由于依赖页面 DOM 结构,本脚本无法导出已关闭/删除的对话。它只能导出当前浏览器标签页中正在浏览的、完整加载出来的对话内容。对于非常重要的对话,建议及时导出备份。

3.2 Markdown 转换的艺术:Turndown 与自定义规则

将 HTML 转换为美观的 Markdown 是本工具的核心价值。这里我使用了 Turndown 这个优秀的库,并为其编写了大量自定义规则。

为什么是 Markdown?因为 Markdown 是纯文本,兼具可读性和结构性,几乎被所有笔记软件、代码仓库、文档系统支持,是知识沉淀的通用格式。

转换过程中的关键处理

  • 代码块:这是重中之重。平台通常用<pre><code>包裹代码,并且用class来标识语言(如language-python)。我的自定义规则会精准提取语言标签,生成 ````python` 这样的 Markdown 代码块标记,确保在渲染后能正确高亮。
  • 表格:HTML 表格会被转换成 Markdown 表格语法,保留表头和行列结构。
  • 列表与换行:一个常见的坑是,在列表项(<li>)内部换行,标准的转换可能会丢失。我特别加强了规则,确保列表内的多行结构被正确转换为 Markdown 的硬换行(两个空格加回车)。
  • 特殊格式:对于上标(Superscript)、下标(Subscript)等,v3.1.0 也新增了支持,将其转换为<sup><sub>标签,在兼容的 Markdown 渲染器中能正确显示。
  • 清理无用元素:平台 UI 中的按钮、头像、状态指示器等无关元素,在转换前会被过滤掉,确保输出的 Markdown 干净、专注。

YAML Front Matter 的妙用:导出的 Markdown 文件顶部有一个 YAML 块。这不仅仅是元数据,它能让你的文件与静态站点生成器(如 Hugo、Jekyll、Astro Starlight)完美集成。titletagsdate这些字段可以直接被用作博客文章或文档的属性。这意味着,你可以用这个脚本批量构建一个基于 AI 对话的知识库网站。

3.3 聊天大纲与选择性导出:管理长篇对话的利器

这是我最引以为傲的功能,也是处理长对话的“杀手锏”。当对话超过 20 轮,单纯阅读一个长 Markdown 文件依然低效。

聊天大纲面板实时分析页面,为每一轮“用户问 + AI 答”生成一个摘要条目(通常截取用户问题的前几十个字)。这个面板实现了:

  1. 视觉化导航:点击任意条目,页面会自动平滑滚动到对应的对话位置。
  2. 选择性导出:每个条目前面都有一个复选框。你可以只勾选感兴趣的部分(比如关于“数据库优化”的第 5、8、12 轮对话),然后点击导出按钮。此时,脚本只会将你选中的内容打包进 Markdown/JSON 文件。这对于从一次漫长的、涉及多个主题的对话中,精准提取所需片段,效率提升是颠覆性的。
  3. 集成搜索:面板顶部的搜索框支持普通文本和正则表达式。输入error\s\d+可以快速找到所有提到“error”后接数字的消息。搜索结果会高亮显示,并且可以直接勾选所有搜索结果进行批量导出。这个功能在排查技术问题、收集特定类型的回答时无比好用。

实操技巧:对于超长对话(比如超过 100 条消息),页面初始加载时可能只渲染了可视区域的部分。脚本的聊天大纲在初始化时,会尝试滚动页面以触发加载更多消息。如果发现大纲不完整,你可以手动滚动到对话顶部,或者尝试点击大纲面板中的第一个条目,这通常会触发脚本的“强制加载”逻辑。

3.4 文件名模板与智能标签解析:让归档自动化

从 v2.5.0 开始,脚本支持高度自定义的文件名。点击浮动按钮旁的“⚙️ 设置”按钮(一个小齿轮图标),你可以配置文件名格式。

预设的变量

  • {platform}: 来源平台,如chatgpt
  • {title}: 清理后的对话标题。
  • {timestamp}: 国际标准的 UTC 时间,如2024-01-01T12-00-00Z,适合作为唯一标识。
  • {timestampLocal}: 你本地时区的时间,更符合阅读习惯。
  • {tags}: 从标题中提取的所有标签,用连字符连接。

智能标签解析是我设计的一个贴心功能。如果你在对话标题里写入类似#项目复盘 #20241001 #后端 关于缓存策略的讨论,脚本会:

  1. 自动将标题清理为关于缓存策略的讨论
  2. 提取出标签[项目复盘, 后端]。注意,它智能地忽略了#20241001这种纯数字的“标签”,因为这通常是日期,不适合作为分类标签。
  3. 这些标签会填入 YAML Front Matter 的tags字段,也会出现在文件名中(如果你使用了{tags}变量)。

这样一来,你导出的文件会自动拥有语义化的文件名和标签,直接导入到 Obsidian、Logseq 等支持标签管理的笔记软件中,立即可形成结构化的知识网络。

4. 高级使用技巧与场景化实战

4.1 键盘快捷键:追求极致的效率

对于高频用户,每次用鼠标去点那个小按钮依然不够快。因此,我加入了全局键盘快捷键:

  • Alt + M:立即导出为 Markdown。
  • Alt + J:立即导出为 JSON。
  • Alt + A:在 Gemini 页面上,切换自动滚动加载的开关。

实现细节:为了防止你在聊天输入框中打字时误触发,脚本会检测焦点是否在可输入元素(input,textarea,[contenteditable])中,如果是,则忽略快捷键。这个细节能避免很多误操作带来的困扰。

4.2 JSON 导出的应用场景

除了 Markdown,JSON 导出提供了另一种可能性。JSON 文件包含了更原始的结构化数据,例如每条消息的唯一 ID、作者角色、原始时间戳等。

JSON 的用途

  • 编程处理:你可以写一个 Python 或 Node.js 脚本,读取 JSON 文件,批量分析你和 AI 的对话模式,统计高频话题,或者抽取所有代码示例。
  • 数据迁移:如果你需要将对话导入到另一个自定义的知识库系统或数据库中,JSON 格式比 Markdown 更易于解析和存储。
  • 备份与审计:JSON 提供了最完整的数据快照,适合作为原始数据的长期备份。

4.3 与静态站点生成器(如 Astro Starlight)的集成

这是为技术博客作者或文档工程师准备的进阶用法。Astro Starlight 是一个优秀的文档站点框架,它使用 Markdown 文件作为内容源,并读取文件顶部的 YAML Front Matter 来生成导航、侧边栏和元信息。

AI Chat Exporter 生成的 Markdown 文件,其 YAML 块是兼容 Starlight 的。你只需要:

  1. 将导出的.md文件放入 Starlight 项目的src/content/docs/目录下。
  2. 确保tags字段的格式是 Starlight 兼容的数组(脚本已做处理)。
  3. 运行npm run build,你的这次 AI 对话就变成了一篇可搜索、有标签、有目录的正式文档页面。

这意味着,你可以将每一次有价值的 AI 技术咨询,直接转化为个人技术博客的一篇文章,构建起一个由 AI 辅助生成的、不断生长的知识库。

4.4 正则表达式搜索实战指南

聊天大纲的搜索框支持正则表达式,这是挖掘对话深层次信息的强大工具。这里分享几个我常用的模式:

  1. 查找代码示例\``[a-z]+`。这个正则可以匹配 Markdown 代码块的开头,帮你快速定位对话中所有包含代码的片段。
  2. 查找错误或警告(error|warning|exception|fail)。不区分大小写地查找包含这些关键词的消息,便于调试。
  3. 查找特定格式的指令:如果你习惯用类似“请用 Python 实现...”的句式提问,可以搜索^请用(.+?)实现来汇总你所有的编程请求。
  4. 提取所有链接https?://[^\s]+。可以快速找到对话中提及的所有网址。

使用正则搜索时,勾选“全字匹配”或“区分大小写”选项,可以让你进行更精确的过滤。结合选择性导出,你可以瞬间从一次杂乱的头脑风暴对话中,整理出一份干净的需求清单或代码合集。

5. 常见问题排查与维护建议

即使工具设计得再稳健,在实际复杂的浏览器环境中也可能遇到问题。下面是我总结的常见问题及其解决方法,相当于一份“自救指南”。

5.1 问题排查速查表

问题现象可能原因解决方案
导出按钮完全不显示1. Tampermonkey 未安装或未启用。
2. 脚本未安装或未启用。
3. 当前网址不在脚本的匹配规则内。
4. 脚本与其他浏览器扩展冲突。
1. 检查 Tampermonkey 图标是否在工具栏,点击查看管理面板。
2. 在 Tampermonkey 面板中确认ai-chat-exporter脚本已启用。
3. 确认你访问的是chatgpt.com,claude.ai等支持的域名。
4. 尝试禁用其他扩展,特别是其他用户脚本或广告拦截器。
按钮显示,但点击无反应/下载失败1. 浏览器弹出窗口被拦截。
2. 页面 DOM 未完全加载。
3. 脚本版本过旧,不兼容新页面结构。
1. 检查浏览器地址栏是否有弹出窗口拦截提示,允许即可。
2. 等待页面完全加载(消息全部出现),或刷新页面重试。
3.检查并更新脚本至最新版本,这是最常见的原因。
导出的 Markdown 内容为空或缺失1. 选择器失效(平台 UI 更新)。
2. 对话消息是动态懒加载的,未完全触发。
3. 在 Gemini 等平台,未开启“自动滚动加载”。
1.立即更新脚本。如果已是最新,请到 GitHub 提交 issue。
2. 尝试手动滚动到对话最顶部和最底部,确保所有消息已渲染。
3. 在 Gemini 页面,使用Alt+A或检查大纲面板顶部的状态,确保自动滚动已开启。
聊天大纲面板不显示或内容不全1. 页面宽度太小,面板被隐藏。
2. 消息加载不全(同上一问题)。
3. 脚本初始化失败。
1. 尝试放大页面或调整浏览器窗口宽度。
2. 手动滚动页面或点击大纲第一条消息触发加载。
3. 打开浏览器开发者工具(F12)的“控制台”标签,查看是否有红色错误信息。
快捷键无效1. 焦点在输入框内。
2. 快捷键被其他扩展或网站占用。
1. 点击页面空白处,确保输入框失去焦点后再按快捷键。
2. 尝试在无冲突的页面(如空白标签页)测试快捷键是否被 Tampermonkey 正确捕获。

5.2 脚本的更新与维护

保持脚本更新是保证体验的最佳方式。Tampermonkey 通常会在脚本有更新时,在图标上显示一个小的数字徽标。点击图标,进入“仪表板”,找到 AI Chat Exporter,如果有“更新”按钮,点击即可。

我个人的维护习惯

  • 关注 GitHub 仓库:我会给项目点个 Star,这样 GitHub 有 Release 时能收到通知。重大更新(如 v3.0.0 适配新 UI)通常意味着必须更新。
  • 谨慎使用“测试版”:主分支(main)的代码通常是稳定的。除非你想尝鲜或帮忙测试,否则不建议直接安装开发中的分支代码。
  • 备份重要对话:对于极其重要的对话,在平台 UI 大更新前,手动导出一次作为备份,是万无一失的习惯。

5.3 与其他工具的组合拳

AI Chat Exporter 是一个优秀的“提取”工具,你可以将它与其他工具结合,打造更强大的工作流:

  1. 导出 + Obsidian:将导出的 Markdown 文件放入 Obsidian 库,利用其双链、图谱和强大搜索,构建个人第二大脑。
  2. 导出 + Git:将技术讨论导出后,用 Git 管理版本,清晰记录每个技术决策的 AI 辅助论证过程。
  3. JSON 导出 + 自定义分析:用 Python 脚本定期分析 JSON 导出文件,统计 token 使用趋势、主题分布,量化你的 AI 使用效率。

这个工具的本质,是为你和 AI 的智慧碰撞提供一个可靠、优雅的“出口”。它不改变你与 AI 交互的方式,而是让你交互的成果变得更有价值、更易于管理。从第一次为导出格式混乱而烦恼,到如今能一键生成结构清晰的文档,这个过程让我深信,好的工具就应该如此:安静地解决真问题,然后隐身于习惯之中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 6:02:30

Windows 如何实现 IP 转发?从注册表到 netsh 命令的完整指南

一、什么是IP转发IP转发是Windows 7系统的一项网络路由功能&#xff0c;它允许系统将从一个网卡收到的数据包&#xff0c;根据目标IP地址路由到另一个网卡发送出去。简单来说&#xff0c;就是让Win7像“小型路由器”一样&#xff0c;连接两个不同的网段并转发它们之间的流量打。…

作者头像 李华
网站建设 2026/5/10 5:56:29

Scala 模式匹配

Scala 模式匹配 引言 Scala 作为一种多范式编程语言&#xff0c;融合了面向对象和函数式编程的特点。其中&#xff0c;模式匹配&#xff08;Pattern Matching&#xff09;是 Scala 中一个非常重要的特性&#xff0c;它允许程序员以更简洁、更直观的方式处理数据结构。本文将深入…

作者头像 李华
网站建设 2026/5/10 5:53:46

消防员生命支持系统的智能控制与优化设计

1. 消防员生命支持系统的核心挑战与设计理念在高温、有毒气体和极端体力消耗的火灾现场&#xff0c;消防员的个人防护装备&#xff08;PPE&#xff09;中&#xff0c;生命支持系统是最关键的保命装置。传统开放式呼吸器存在氧气利用率低&#xff08;仅15-20%&#xff09;、携带…

作者头像 李华
网站建设 2026/5/10 5:52:23

Flyback转换器无损缓冲电路设计与优化

1. Flyback转换器中的缓冲电路设计挑战在开关电源设计中&#xff0c;Flyback拓扑因其结构简单、成本低廉而广泛应用于中小功率场合。然而&#xff0c;功率MOSFET在关断瞬间产生的电压尖峰和开关损耗一直是工程师面临的主要挑战。传统解决方案是采用RCD&#xff08;电阻-电容-二…

作者头像 李华
网站建设 2026/5/10 5:52:06

基于MCP协议的AI发票处理智能体:从原理到实践

1. 项目概述&#xff1a;一个开源的发票处理智能体最近在折腾AI智能体&#xff08;Agent&#xff09;和工具调用&#xff08;Tool Calling&#xff09;时&#xff0c;发现了一个挺有意思的开源项目&#xff1a;klodr/mercury-invoicing-mcp。简单来说&#xff0c;这是一个基于模…

作者头像 李华