DistiLlama
利用本地 Ollama LLM 实现网页摘要、智能问答和 PDF 对话的 Chrome 扩展,所有数据完全私密不离开设备
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
利用本地 Ollama LLM 实现网页摘要、智能问答和 PDF 对话的 Chrome 扩展,所有数据完全私密不离开设备
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你是否有这样的困扰:浏览一篇长篇技术文章时,想要快速抓住核心观点,却不得不从头到尾逐字阅读?或者想和一份 PDF 文档"对话",让它帮你解答疑惑?在传统方案中,这些操作往往意味着把你的数据上传到云端——你的浏览记录、文档内容就这样流向了第三方服务器。
DistiLlama 正是为解决这一痛点而生。这是一个开源 Chrome 扩展,它利用 Ollama 在本地运行的 LLM(大语言模型),为用户提供网页摘要、智能问答和文档对话功能,同时保证所有数据永远留在你的设备上。
DistiLlama 的开发者 Shreyas Karnik 是一名独立开发者,他在个人实验中需要频繁使用本地 LLM 实例进行各种任务,其中"一键摘要"(tl;dr)是他最迫切的需求。关键约束是:所有 LLM 调用必须在本地完成,所有数据必须保持私密。
在此背景下,他选中了 Ollama 作为本地 LLM 运行时——Ollama 以其易于安装和使用的特点迅速获得了大量社区认可。而前端侧,Shreyas 选择了 Chrome 扩展这一载体,因为它天然拥有对网页内容的访问权限,且可以方便地集成到日常工作流中。
DistiLlama 提供了完整的人机交互链路,覆盖了从"快速了解页面内容"到"深度对话研究"的全部场景:
1. 智能摘要(Summarization)
按下扩展图标,DistiLlama 便会调用 Mozilla Readability 引擎提取当前网页的纯净文本内容,然后使用 LangChain.js 的 loadSummarizationChain 配合本地 Ollama 模型,生成结构化的摘要。其内部使用 RecursiveCharacterTextSplitter 将长文本切分为 2000 字符的块,通过 map_reduce 模式逐块处理后合并结果,保证了对万字长文也有稳定表现。

图1:网页摘要功能,一键提取文章核心要点
2. 页面对话(Chat with Page)
基于 RAG(检索增强生成)架构,DistiLlama 允许用户直接向当前页面"提问"。系统使用 transformers.js 在浏览器端生成向量嵌入(默认模型:Xenova/jina-embeddings-v2-small-en),通过 Voy 向量数据库进行语义检索,最后由 Ollama 模型生成答案。所有检索和推理均在本地完成,无需任何云端调用。

图2:直接与网页内容对话,问任何你想了解的问题
3. PDF 文档对话(Chat with Documents)
支持上传本地 PDF 文件,借助 pdfjs-dist 在浏览器内解析文档内容,然后同样通过 RAG 管道进行问答。这对于研究论文、技术文档的快速理解尤其有价值——你可以像和助手聊天一样,让模型帮你提炼 PDF 中的关键论点和数据。

图3:上传 PDF 后即可对话,无需上传到任何云端服务
4. 通用 LLM 对话(Chat)
扩展还内置了纯粹的 LLM 对话入口,用户可以选择不同的 Ollama 模型(如 llama2、mistral、zephyr 等),用于写作辅助、代码生成、翻译等通用场景。所有对话同样通过 Ollama 的本地 API 完成。

图4:选择本地 Ollama 模型,进行任意话题的 LLM 对话
DistiLlama 采用 Chrome Manifest V3 规范开发,整体架构分为四个主要模块:
Content Script(内容脚本) — 负责在每个网页中运行,通过 Mozilla Readability 解析 DOM,提取干净的语义内容。通过 chrome.runtime.sendMessage 将内容回传给 Side Panel。整个过程在网页上下文执行,无需额外的网络请求。
Side Panel(侧边栏) — 扩展的主交互界面,基于 React 18 构建。包含摘要视图、问答视图、文档上传视图和设置面板。模型参数(模型选择、温度)通过 Chrome Storage API 持久化存储,支持设置默认配置。
Background Script(后台脚本) — 最小化的 Service Worker,主要负责注册 Side Panel 行为:chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true }),实现点击扩展图标直接打开侧边栏。
核心链(Chains) — 核心 AI 逻辑集中在 Summarize.ts、QandA.ts 两个文件:
loadSummarizationChain,支持 map_reduce / stuff / refine 三种模式,默认 map_reduce。ConversationChain + BufferMemory 实现多轮对话上下文管理;嵌入层使用 HuggingFaceTransformersEmbeddings(transformers.js),向量存储使用 VoyVectorStore;通过 ContextualCompressionRetriever 配合 EmbeddingsFilter 提升检索质量。构建工具链方面,项目使用 Vite 5 作为开发服务器和打包工具,配合 @vitejs/plugin-react(HMR 支持)、vite-plugin-wasm(WASM 支持)和 vite-plugin-top-level-await(Top-Level Await 支持)。包管理器使用 pnpm。
前置依赖:必须安装 Ollama 并运行本地服务。Ollama 支持 macOS、Linux 和 Windows,下载安装包后运行以下命令即可启动:
OLLAMA_ORIGINS=* OLLAMA_HOST=127.0.0.1:11435 ollama serve
ollama pull llama2:latest # 或 mistral:latest
扩展安装:
git clone https://github.com/shreyaskarnik/DistiLlama.git
cd DistiLlama
npm install -g pnpm
pnpm install
pnpm dev
然后在 chrome://extensions/ 中开启开发者模式,加载 dist 目录即可。
门槛评估:相比纯 Web 项目,DistiLlama 需要用户具备一定的本地开发经验(安装 Node.js、运行命令行)和对 Ollama 的基本理解。对于技术背景较弱的用户,有一定学习曲线。
DistiLlama 并非没有短板。首先,模型能力受限于本地硬件:在无 GPU 的设备上运行 llama2 或 mistral 生成速度较慢,摘要一篇长文章可能需要等待数十秒甚至更久。其次,目前仅支持 Chrome/Edge(Manifest V3),Firefox 用户暂时无法使用。
此外,项目虽然列出了多项 TODO(如可配置的摘要链、TTS 支持、本地存储摘要等),但部分功能仍处于规划阶段,实际体验与路线图仍有差距。代码测试覆盖率方面,项目配置了 Jest 测试框架,但实际测试用例数量有限。
DistiLlama 代表了一个值得关注的方向:在 AI 能力不断增强的同时,用户对数据隐私的重视程度也在同步提升。当 ChatGPT、Claude 等云端服务成为主流,越来越多的开发者和研究者开始探索"不上云也能用好 AI"的可能性。
随着 Ollama 的成熟、transformers.js 在浏览器端向量嵌入的实现,以及 Chrome 对 WASM 和高级 API 的持续支持,这类"本地优先"AI 工具的技术可行性正在快速提升。DistiLlama 的出现,验证了"浏览器扩展 + 本地 LLM + 端侧向量检索"这一技术组合的工程可行性,为同类项目提供了有价值的参考。
如果你关注隐私保护、研究 AI 应用、或者只是想在自己的知识库中快速找到关键信息,DistiLlama 是一个值得一试的轻量级工具。