我做了个浏览器扩展:读技术文章时划选即问 AI,再也不用复制粘贴了
前言
不知道你有没有过这种经历:
在知乎、CSDN、掘金上读技术文章,读到一半卡在一个术语上——比如文章里提到"闭包",或者冒出来一个 GPU利用率 0.9,作者默认你懂,但你就是似懂非懂。
我以前的操作流程是这样的:
- 鼠标选中那段看不懂的话
- 切换到 AI 对话窗口
- 粘贴
- 补一句"帮我解释一下这段"
- 发送,等回答
- 看完,再切回文章,找回刚才读到的位置
一次还好,一篇文章来个四五次,心流碎成渣了。而且更致命的是:AI 只拿到一个孤零零的片段,它不知道这篇文章在讲什么、不知道前后文,答得经常不对路。
于是我做了这个项目——随问 AskAlong,一个 Chrome 扩展:
在任何技术文章页面,划选一段文字 → 点「解释」→ AI 的回答直接流式浮现在文字旁边,并且 AI 自动阅读了整篇文章的全文作为上下文。
全程零复制粘贴、零窗口切换。
先看效果
如上:选中看不懂的段落,浮出工具条,点「解释」,一张快答卡就在选区下方流式作答。想知道更深的细节,点「↳ 侧栏追问」,这轮问答会被带进侧边栏,继续多轮对话。
侧边栏长这样(基于文章全文回答,还支持思考模型的推理过程展示):
它解决了什么
| 痛点 | 对策 |
|---|---|
| 复制粘贴麻烦 | 划词后浮出工具条:解释 / 翻译 / 问AI 一键触发 |
| 切换窗口打断心流 | 行内快答卡浮在文字旁;多轮追问走浏览器侧边栏,不离开页面 |
| AI 拿不到文章全貌,答不准 | 扩展直接读取页面 DOM 提取文章全文,每次提问自动作为上下文 |
另外还有一些我觉得很必要的能力:
- 多标签页并行:两个文章页各问各的,切换标签不会打断后台正在生成的回答
- 编辑重发:对自己发过的提问不满意?悬停 → 原地编辑 → 重新生成,旧对话自动截断
- 长文预算:超长文章不会无脑全量投喂,按「开头 + 完整目录 + 与问题最相关的章节」智能截断(默认 16000 字,可调)
- 多模型:任何 OpenAI 兼容接口都能接,预设了智谱 GLM、DeepSeek、Kimi、OpenAI、本地 Ollama
几个关键实现
源码在这里:github.com/Bswoalwo/as…,全程原生 JavaScript、零依赖、无构建步骤,clone 下来就能加载。挑几个有意思的点聊聊。
1. 怎么让 AI"读到"文章全文
这是整个项目的核心。思路分三级:
- 平台适配器优先:给 20+ 个站点维护正文选择器——公众号
#js_content、CSDN#content_views、知乎.Post-RichTextContainer(问答页还能收齐全部回答)、GitHubarticle.markdown-body、StackOverflow(问题+全部回答)、小红书、掘金、博客园…… - Readability 简化算法兜底:陌生站点就克隆一份 DOM,删掉 script/导航/评论区/广告,然后按
<p>和<pre>的文本密度给容器打分,得分最高的就是正文; - 提取后转成 Markdown 再发给模型——比直接发 HTML 省一半以上 token,代码块还能保留语言标记。
2. 划词 UI 为什么用 Shadow DOM
工具条和快答卡是注入到别人页面里的,如果用普通 DOM,文章站自己的 CSS 会把 UI 冲得稀烂(反之亦然)。所以全部 UI 挂在 Shadow DOM 里,:host { all: initial } 一套组合拳,和页面样式完全隔离。
3. 踩坑:MV3 Service Worker 30 秒"自杀",思考模型必触发
这是开发中最有意思的一个坑,单独展开讲讲。
Chrome MV3 的 Service Worker 有个机制:空闲 30 秒就会被强制休眠。而我的架构里,所有对模型 API 的请求都走 SW 代理(解析 SSE 再把增量推给页面)。
测试时一切正常,一接真实模型就频繁"连接中断"。排查后发现:思考型模型(比如 GLM-5.3-Flash,思考模式常开)在吐出第一个字之前,要先静默"思考"几十秒。这段静默期里没有任何消息流动,30 秒一到 Chrome 把 SW 杀了,通道随之断开。我的 mock 测试没暴露这个问题,因为 mock 每 25ms 就吐一个字,SW 一直"忙"。
解法是官方认可的保活套路:只要有请求在飞,每 20 秒调一次任意扩展 API,重置空闲计时器;顺手把思考模型的 reasoning_content 也解析出来,折叠展示成"💭 已深度思考"块,等待不再是黑盒。
4. 长文怎么截断才不"失忆"
粗暴砍半会让模型失去全文结构。我的做法是:先按 Markdown 标题把文章切节,然后保留「开头 2000 字 + 完整目录 + 与划选/问题关键词重合度最高的章节」,并在末尾告知模型"以上是节选、原文共 N 字"。模型知道自己在看节选,回答时就不会不懂装懂。
快速上手
git clone https://github.com/Bswoalwo/askalong.git- Chrome 打开
chrome://extensions→ 开启「开发者模式」→ 「加载已解压的扩展程序」→ 选择askalong文件夹(Edge 同样适用) - 首装自动弹出设置页,选模型服务 → 粘贴 API Key → 点「测试连接」→ 保存
然后随便打开一篇技术文章,划选一段话,点「解释」,体验一下什么叫边读边问。
最后
项目已经开源,MIT 协议, repo 在这里:
GitHub: github.com/Bswoalwo/as…
如果你也经常读技术文章,欢迎试用 + 提 Issue;如果觉得思路有意思,一个 Star 就是最大的鼓励~