在 Edge / Chrome 中一边阅读英文 PDF,一边用中文提问、翻译和理解课件。
课件伴读是一个基于 Manifest V3 的浏览器扩展:使用本地 PDF.js 渲染课件,在独立阅读标签页中提供可拖动的双栏布局,并直接连接你配置的 DeepSeek 或 Qwen API。无需部署后端服务。
当前版本:
0.1.0。项目处于早期阶段,适合个人学习与反馈。它不是 Blackboard、Microsoft、Google、DeepSeek 或阿里云的官方产品。
截图使用测试生成的示例 PDF,不包含真实课程材料或账户信息。
| 功能 | 当前支持情况 |
|---|---|
| PDF 阅读 | 导入本地文件、尝试读取在线 PDF;分页、缩放、适合宽度 |
| 双栏布局 | 左侧 PDF,右侧学习助手;鼠标左键拖动分界线并记住宽度 |
| 中文问答 | 自由提问、连续追问、翻译、解释概念、总结要点 |
| 引用范围 | 当前页、选中的文字、整份文档;发送前可查看引用预览 |
| API | DeepSeek、Qwen;可配置官方 Base URL、模型名和 API Key |
| Blackboard 入口 | 检测当前页面中的 PDF / 嵌入来源,或通过链接右键打开 |
| 文本入口 | 在浏览器允许的页面上,通过右键菜单带入选中文字 |
| 扫描件后备方式 | 检测到无文字的页面时,可手动输入或粘贴引用内容 |
**布局说明:**本扩展打开自己的双栏阅读标签页,不直接修改浏览器内置 PDF 阅读器,也不是浏览器原生翻译侧栏。Blackboard 的登录、嵌入和下载策略可能影响在线读取;下载后本地导入是后备方式。
准备好 Node.js 22.3.0 或更高版本及 npm。下载本仓库的源码 ZIP 并解压,或使用 Git 克隆本仓库,然后在含有 package.json 的项目根目录打开终端:
npm ci --ignore-scripts
npm run build构建结果位于项目根目录下的 dist/。首次安装依赖需要联网,运行插件时不从 CDN 加载 PDF.js。
如果维护者在 GitHub Releases 中提供了已构建的扩展 ZIP,可以直接解压,在下一步选择包含 manifest.json 的目录,无需运行 npm。GitHub 自动生成的 “Source code” 压缩包是源码,需要先构建。本文不假设仓库已经发布 Release 或上架浏览器商店。
- Edge 地址栏输入
edge://extensions;Chrome 输入chrome://extensions。 - 开启“开发人员模式”。
- 点击“加载解压缩的扩展”或同义按钮。
- 选择刚构建的
dist/目录,而不是源码根目录。 - 将“课件伴读 · PDF Q&A”固定到扩展工具栏。
浏览器内部地址请复制到地址栏访问。更新源码后,需要重新构建、在扩展管理页刷新扩展,并重新打开阅读器标签页。
点击扩展图标 → “配置 DeepSeek / Qwen”,选择服务商,填写自己的 API Key 后保存。浏览器会请求访问相应 API 网站的权限。
| 服务商 | 默认 Base URL | 默认模型 |
|---|---|---|
| DeepSeek | https://api.deepseek.com |
deepseek-v4-flash |
| Qwen / 阿里云百炼 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-flash |
以上是代码中的默认值,不是模型可用性或价格承诺。模型名可以改为账户支持的普通文本模型。Qwen 的 API Key 与端点地域必须对应;业务空间专用地址请从服务商控制台复制。
“测试连接”会发起一次简短 API 请求,可能产生费用。密钥默认只保存在当前浏览器会话中;勾选“在此浏览器保存密钥”后才会持久保存。
- **本地 PDF:**点击“导入本地 PDF / 打开阅读器”,再选择 PDF 文件。
- **在线课件:**在 Blackboard 或 PDF 页面点击“打开当前 PDF / 查找课件”,选择来源,按需授予该网站读取权限。
- **提问:**在右侧选择引用范围,查看引用预览,输入问题后点击发送,或选择翻译、解释概念、总结要点。
- **选段问答:**拖选左侧 PDF 的文字,确认右侧引用对应选区,再提问。
示例问题:
用中文解释这一页中的 asymptotic complexity,保留关键英文术语,并给一个简单例子。
为什么这里可以忽略常数项?请按步骤解释,并说明哪些结论来自课件。
- 单个 PDF 最大 50 MiB(界面显示为 50 MB);课件引用每次最多 24,000 字符。全文范围从第一页开始提取,超过上限会截断并提示,并非对任意长度文档进行全文检索。
- 问答使用非流式响应、关闭思考模式,单次输出最多 2,048 token,超时 90 秒。回答达到上限时可以继续追问。
- 默认发送当前引用、当前问题和最多最近 8 条对话消息。打开或翻页本身不调用 AI;发送问题、点击快捷操作或测试连接才会调用 API。
- PDF 的解析与显示在本地完成;AI 问答仍会将引用文字发送给所选服务商。插件没有自建中转服务器或遥测功能。
- 不提供 OCR、页面图像理解、聊天导出或跨会话聊天保存。扫描件、复杂公式与多栏排版可能无法准确提取文字。
- 模型回答可能有误。建议对重要术语、公式和推导结合课件原文核对。
| 文档 | 内容 |
|---|---|
| 使用指南 | 在线与本地课件、API 配置、操作方式、故障排查 |
| 开发指南 | 目录结构、构建、测试、调试、发布包 |
| 隐私说明 | 数据流、密钥存储、权限、清理方式 |
| 贡献指南 | 问题反馈、开发贡献与 Pull Request |
| 安全政策 | 安全问题反馈方式与敏感信息处理 |
npm testAPI 单元测试使用模拟响应,不需要真实 Key,也不会调用付费服务。另有可选的 Edge 浏览器冒烟测试,执行方式见开发指南。
当前已在 Edge 152 验证扩展加载、本地 PDF 渲染与文字层、分页、选区、全文引用、分界线拖动、切换文档清空对话、缺少密钥提示和设置预设。Chrome 使用相同扩展包,但尚未完成独立浏览器验证;真实付费 API 和受保护 Blackboard 课件需要在相应账户环境测试。
欢迎通过本仓库的 Issues 提交可复现的问题或功能建议,通过 Pull Request 贡献修改。提交前请阅读贡献指南,并删除截图、日志中的密钥、带令牌的课件链接和个人信息。安全漏洞请按安全政策处理。
项目原创代码与文档采用 MIT License。第三方组件保留各自许可证:PDF.js 使用 Apache-2.0,其许可证在构建时复制至 dist/vendor/PDFJS-LICENSE.txt;随包字体和其他资源的许可文件保留在相应资源目录中。
课件内容及第三方服务不属于本项目的软件许可范围。服务商 API 说明见 DeepSeek 官方文档和 Qwen 兼容接口文档。
