☰
PageAssist:把本地大模型变成浏览器AI助手与API网关
2026/10/12 4:14:22 网站建设 项目流程

简介:谷歌Page Assist浏览器扩展(v1.4.5 for Chrome)是一款面向开发者的开源工具,让用户在浏览器环境中直接调用本地AI模型,省去频繁切换窗口的麻烦,尤其适合需要反复调试模型、验证提示词的开发者与AI应用爱好者。资源共94个文件,压缩包仅5.97MB,内部以HTML界面、JavaScript脚本、JSON配置与清单文件为主体,同时包含大量字体和样式资源以支撑页面与公式渲染,另附WASM、OCR语言包等文件,可提供本地化的图片文字识别能力。目录中可见侧边栏模块、后台脚本、内容脚本以及多语言本地化目录,结构清晰,便于开发者对照理解浏览器扩展的权限声明、消息通信与国际化实现。已有580人浏览学习,对于想上手扩展开发或搭建本地AI调用环境的读者,能提供完整的代码级参考,也适合作为学习Web前端与浏览器API结合的实践案例。

1. PageAssist 是什么:把本地大模型塞进浏览器侧边栏的免费方案

如果你和我一样,日常浏览器里同时开着十几个标签页,又想让大模型帮你总结页面、翻译段落、润色回复,但又不想把网页内容往云端模型里丢,PageAssist 值得你花十分钟折腾一下。它本质上是一个浏览器插件,把 Ollama、LM Studio 这类本地推理服务变成浏览器里的 AI 侧边栏,不需要申请任何云端 API Key,数据不出本机。适合手上有本地模型、又嫌命令行交互不够顺手的人。它的运作逻辑不复杂,核心就是“本地推理服务 + 浏览器扩展 + 可定制提示词”,安装好之后,选中网页文字就能直接丢给模型处理,整个过程不经过第三方服务器。下文我会从安装、模型管理、接口调用到踩坑排查,完整过一遍。

2. 安装与连接:从 Chrome 商店到 Ollama 的完整链路

2.1 安装插件:商店版本与手动加载的区别

PageAssist 通常有两种安装方式。第一种是直接去浏览器扩展商店搜索安装,好处是后续能收到自动更新,但商店版本可能落后于 GitHub 上的最新版。第二种是拉取源码后以开发者模式手动加载,适合要改样式、想研究源码或者商店版本有 bug 的场景。我一般先用商店版跑通流程,再决定要不要换源码版。

# 以手动加载方式为例,先克隆源码 git clone https://github.com/n4ze3m/page-assist.git cd page-assist/web npm install npm run build

还需要构建扩展本体,不同浏览器有不同的构建命令,以 Chromium 系为例在项目根目录执行:

npm run build:chromium

构建完成后,打开浏览器的扩展管理页面,开启“开发者模式”,点击“加载已解压的扩展程序”,选择构建输出目录即可完成安装。这里要提醒的是:源码版和商店版不要同时装,同一个扩展 ID 冲突会导致两个版本都失效。

2.2 连接本地推理服务:Ollama 是最省心的起点

插件装好后,第一件事是让 PageAssist 认出你的本地模型。如果你已经在用 Ollama,这一步基本上不需要额外配置,因为 PageAssist 默认会去探测 Ollama 的 API 端点。不过很多人的 Ollama 是装在另一台机器或虚拟机里的,这时就需要手动改一下 API 地址。

PageAssist 的配置页面里通常会提供一个“自定义 API 端点”的输入框,格式大概是http://localhost:11434/api。如果你用的是远程机器,要确保 Ollama 服务监听在非回环地址上。先看一眼 Ollama 的当前配置:

# 查看 Ollama 服务状态 systemctl status ollama # 如果需要让服务监听 0.0.0.0,设置环境变量后重启 # 注意:这会暴露服务到局域网,只建议在内网环境操作 export OLLAMA_HOST=0.0.0.0:11434 ollama serve

配置好之后,在 PageAssist 设置里点“刷新模型列表”,如果能看到模型下拉框里出现了你本地的模型名,说明连接成功。这个环节最常见的失败原因不是插件配置错了,而是 Ollama 服务根本没启动,或者虽然启动了但端口被本机防火墙拦了。

2.3 浏览器权限设置:不是装上就能用

装好插件、连上 Ollama 只是第一步,真正让 PageAssist 在任意页面上工作,还要检查扩展权限。PageAssist 需要“读取所有网站内容”的权限,才能实现选中文字、总结页面这些操作。如果你安装后在多数网页上按钮是灰色的,大概率是权限没给。

去扩展管理页面找到 PageAssist,进入“权限”菜单,把“站点访问”改成“在所有网站上”而不是“在点击时”。这个设置容易忽略,因为安装时默认可能会选择“在点击时”,导致你在新打开的标签页里永远看不到侧边栏图标。

3. 模型管理与对话配置:上下文长度、温度参数与系统提示词

3.1 模型选择逻辑:不是越大越好

PageAssist 本身不下载模型,它只负责把请求转发给本地推理引擎。这意味着你的对话体验完全取决于本地跑的是什么模型。很多人第一次用的时候,直接在 Ollama 里拉了一个 70B 的模型,结果页面卡成幻灯片,然后到处吐槽插件难用。

选择合适的模型要考虑两个维度:显存容量和任务类型。如果是 8G 显存,老老实实用 7B~8B 的量化模型,比如 qwen2.5:7b-instruct-q4_K_M 这类。如果只有 16G 内存没有独显,就得选更小的模型或者直接用 CPU 推理,此时 3B~4B 模型是体验下限。PageAssist 的模型列表来自 Ollama,所以你完全可以在 Ollama 里预先拉好几个不同规格的模型,按场景切换。

# 拉取两个适合日常用的模型 ollama pull qwen2.5:7b-instruct-q4_K_M ollama pull llama3.2:3b-instruct-q4_K_M # 确认模型已就绪 ollama list

这里要理解一个点:PageAssist 只是模型的前端,模型本身能不能理解网页结构、能不能按要求输出,取决于模型权重。7B 模型写总结还行,但让它严格按 JSON 格式输出就不一定稳定,这是后续做自动化时要提前预判的。

3.2 参数配置:温度、上下文与 TopP 的现场调优

PageAssist 的设置页里提供了温度(Temperature)、上下文长度(Context Length)、TopP 等常见采样参数。常见的误区是只靠温度调输出,实际上上下文长度对结果质量的影响往往更直接。

默认上下文长度一般是 4096,这意味着超过这个长度的页面内容会被截断,模型可能漏掉页尾的关键信息。如果你经常总结长文档,把上下文长度拉到 8192 或 16384,但前提是模型本身支持这么长的窗口,而且你的显存装得下。上下文长度翻倍,KV Cache 占用也差不多翻倍,显存不足时推理速度会明显下滑。

温度参数则视任务而定。总结类任务建议 0.3~0.5,这样输出更收敛;创意写作或头脑风暴可以调到 0.8 以上。TopP 一般保持默认 0.9 就行,除非发现输出重复率很高,再考虑调低。

3.3 系统提示词:把浏览器助手变成领域工具

PageAssist 默认的提示词是通用的英语助手风格。但它的提示词模板是支持自定义的,你可以针对自己的使用场景写专门的系统提示词。比如我给一个合作伙伴配过一个偏向中文法律文书审阅的提示词模板,效果比默认模板好很多。

一个推荐的做法是在 PageAssist 里针对高频任务建立独立的提示词模板。比如网页总结模板:

你是一个信息提取助手。请阅读用户提供的网页内容,完成以下任务: 1. 用不超过 300 字概括页面主旨; 2. 列出页面中出现的关键实体; 3. 提取页面中所有数据指标,按“指标名:数值”格式输出。 如果页面内容超出你的上下文窗口,优先保留开头和结尾部分。

模板保存之后,在侧边栏对话窗口可以随时切换。这一层配置决定了 PageAssist 是“通用聊天窗口”还是“特定工作流入口”,很多人的插件不好用,问题就出在这里——没有针对自己的高频任务定制提示词。

4. 接口兼容与自动化:用 OpenAI 兼容端点打通更多场景

4.1 PageAssist 的 API 服务模式:不止是聊天窗口

PageAssist 除了做浏览器侧边栏,其实还带了一个本地 HTTP 服务。这个服务暴露了一组 API,可以通过命令行或脚本调用,等于把你本地的大模型变成了一组可编程的接口。这个特性很多人不知道,但它恰恰是把 PageAssist 从“玩具”变成“工具”的分水岭。

启动本地 API 服务后,会监听一个本地端口,常见的默认端口是 54286。这个服务提供了和 OpenAI 协议兼容的/v1/chat/completions路径。说白了,你可以把任何支持 OpenAI API 格式的工具链直接指向这个本地端点,不需要改代码,只需要改 base_url。

# 用一个最简单的 Python 脚本验证本地 API 是否正常服务 from openai import OpenAI client = OpenAI( base_url="http://127.0.0.1:54286/v1", api_key="pageassist" # 本地服务一般不校验 key,随便填 ) resp = client.chat.completions.create( model="qwen2.5:7b-instruct-q4_K_M", messages=[ {"role": "user", "content": "用一句话解释什么是 PageAssist"} ], temperature=0.7, ) print(resp.choices[0].message.content)

注意这个脚本里的 base_url 指向的是 PageAssist 本地 API 服务,不是直接指向 Ollama。为什么要绕一层?因为 PageAssist 的本地接口做了额外的会话管理、模型路由和上下文拼接,你可以把多个提示词模板预设在服务端,然后只通过 API 传输业务参数。

4.2 通过自定义请求头扩展功能

PageAssist 的接口还支持通过特定的请求头传入一些控制参数,比如选择不同的提示词模板、设置是否开启网页上下文注入。这类请求头设计得并不复杂,通常就是把页面设置里的选项搬到了接口层。

# 在请求中指定要使用的提示词模板 headers = { "X-Page-Assist-Template": "web-summary", "X-Page-Assist-Context": "enabled" } resp = client.chat.completions.create( model="llama3.2:3b-instruct-q4_K_M", messages=[{"role": "user", "content": "总结当前页面"}], extra_headers=headers, )

这种用请求头控制行为的方式,好处是不需要在请求体里塞额外字段,保持了对 OpenAI 协议的最大兼容性。我自己在写一些自动化脚本时,会按不同任务建几个模板,然后脚本里通过请求头切换,后端模型不用换,输出风格却可以差很多。

4.3 让浏览器自动填充:PageAssist 的 UI 集成特性

PageAssist 还有一个在浏览器里很实用的功能:它能在你输入框旁边生成一个 AI 快捷按钮,点击后把当前光标处的内容或整段文字发送给模型处理,再把模型输出填回到输入框。这本质上是一个基于 DOM 事件的内容捕获与回填机制,不需要你切换窗口。

如果你试用后觉得按钮位置碍事,可以在设置里调整触发区域或者关闭这个功能。需要留意的是这个按钮在少数使用 Shadow DOM 的网站上可能不生效,此时需要手动复制粘贴到侧边栏,不算插件故障。

5. 常见问题排查与避坑:连不上、答非所问、内存爆掉

5.1 侧边栏一直转圈,模型列表为空

现象:打开 PageAssist 侧边栏,模型下拉框是空的,对话框里怎么输入都没反应。

原因:插件与 Ollama 服务没有建立连接。多数情况是 Ollama 没启动,或者你改了 OLLAMA_HOST 之后没有重启服务。少数情况是浏览器扩展的“内容脚本”被其他扩展拦截。

解决:先直接在浏览器打开http://localhost:11434,如果能返回 Ollama 的信息页,说明服务正常,再回到 PageAssist 设置里重新“刷新模型列表”。如果打不开,回到终端执行ollama serve或重启服务。排查之后还是一样,就检查浏览器扩展管理页面里是否有其他扩展到权限冲突。

5.2 选中网页文字后点击 AI 按钮无响应

现象:在网页里选中一段文字,点击 PageAssist 的浮动按钮,侧边栏没有自动填充内容,也没有任何报错。

原因:这个按钮的点击事件没被正确捕获,常见于页面上元素层级复杂,或者插件权限没有覆盖当前网站。也遇到过是因为按钮功能需要先把侧边栏激活,否则事件绑定没生效。

解决:先手动打开一次侧边栏,确认能正常对话后,再刷新目标网页重试。如果还是不行,在扩展权限里把该站点设为允许。最稳的办法是直接选中文字后右键,在上下文菜单里调用 PageAssist,这一步通常在多数页面上都可用。

5.3 总结长页面时,输出内容明显不完整

现象:把一篇长文丢给侧边栏,让它总结,模型给出的结果只涉及文章开头一小段,后面部分像完全没读过。

原因:长文内容超过模型上下文窗口后被截断了,或者同一上下文中塞了太多页面元信息占用了 token。PageAssist 抓取页面内容时会把可见文本、部分 meta 信息和 iframe 里的内容一起发送给模型,这些噪音内容吞掉了大量 token 预算。

解决:在设置里减小“抓取深度”或关闭“包含元数据”之类的选项。上下文长度能调大就调大。另外可以在提示词模板里显式要求模型“优先阅读文章主体部分”。如果页面有“打印模式”或“阅读模式”,先切换过去再抓取,效果往往会好很多。

5.4 对话到一半报显存溢出

现象:前几轮对话还正常,几轮之后直接报“CUDA out of memory”或者商用小内存部署直接闪退。

原因:对话轮次越多,累积的上下文越长,KV Cache 占用持续增长。 PageAssist 默认会在每轮对话中把整段历史重新发送给模型,而不是像某些聊天应用那样自动裁剪历史。

解决:在设置里限制“最大历史消息数”为 4~6 轮。上下文长度不要一味求大。如果你用的是多模态模型,每次输入图片都会占用大量显存,在本地部署时尽量少在对话里粘贴图片。

5.5 本地端点服务启动失败或端口被占用

现象:启动 PageAssist 的本地 API 服务时提示端口被占用,或者服务起起来之后外部脚本连不上。

原因:默认端口 54286 被其他程序占用了,或者在多用户环境下服务绑定在了错误的网络接口上。

解决:在启动命令或配置文件中指定一个新的端口,改成 5000 或 8000 都可以,只要不冲突。确认监听地址是127.0.0.1还是0.0.0.0,如果你想从局域网内其他机器访问,必须绑到后者,并注意防火墙放行。

6. 进阶技巧:把 PageAssist 当成本地模型网关来用

介绍一个我常用的实战模式:把 PageAssist 当成一个“本地模型网关”,统一管理多个模型的请求路由和提示词注入。方法是把本地接口接入自动化工作流,替代原先直连 Ollama 的脚本,因为这样能在不改代码的情况下切换模型或调整提示词。

具体的做法是:用 API 服务模式启动 PageAssist,然后在自动化脚本中通过统一端点调用不同模型。我先在 PageAssist 里定义好不同任务的提示词模板,比如“代码审查”“摘要生成”“内容改写”,脚本只传业务参数,模板选择通过请求头完成。这样做的好处是,如果你的模型从 qwen2.5 换成 llama3.2,只需要在 Ollama 里拉新模型,然后在 PageAssist 设置中调整默认模型即可,业务脚本几乎不用动。

import requests # 封装一个通用函数,包含模板和模型选择 def call_pageassist(prompt, template="default", model="qwen2.5:7b-instruct-q4_K_M"): payload = { "model": model, "messages": [{"role": "user", "content": prompt}], } headers = {"X-Page-Assist-Template": template} r = requests.post( "http://127.0.0.1:54286/v1/chat/completions", json=payload, headers=headers, timeout=120, ) r.raise_for_status() return r.json()["choices"][0]["message"]["content"] # 实际调用 result = call_pageassist("请审查这段代码的潜在问题", template="code-review") print(result)

另外还有一个容易忽略的验证技巧:每次改完提示词模板后,务必在侧边栏手动测试一次再进脚本联调,因为 PageAssist 的模板注入是在请求到达之后才生效的,如果模板本身格式有误,侧边栏可能不出错但自动化脚本会收到空响应。我的习惯是每改一个模板就强制自己走一遍“侧边栏验证 + 脚本调用”的完整闭环,排查成本反而最低。希望这些经验能帮到你后续的使用。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询