AI浏览器迎来大升级:网页总结、侧边栏助手与核心源码实战
AI浏览器 最新更新内容汇总|附源码
随着大模型能力的快速发展,“浏览器”正在从传统的信息入口,逐步演变为一个具备理解、总结、搜索、执行与自动化能力的智能工作台。相比普通浏览器,AI浏览器不仅能打开网页,还可以帮助用户总结页面内容、提取关键信息、生成搜索建议、自动填写表单、对网页进行问答,甚至可以结合本地知识库和联网搜索完成更复杂的任务。
本文将围绕一个“AI浏览器”项目的最新更新内容进行汇总,并附上核心源码示例,方便开发者理解其实现思路,也方便有兴趣的读者基于代码进一步扩展自己的智能浏览器插件或桌面端应用。
一、AI浏览器本次更新概览
本次更新主要集中在以下几个方向:
- 新增网页智能总结功能
- 新增侧边栏AI助手
- 支持网页内容问答
- 优化搜索增强能力
- 新增划词解释与翻译
- 支持对当前页面生成结构化大纲
- 提升隐私与安全策略
- 优化前端交互体验
- 新增插件化能力,方便扩展
- 修复若干已知问题
从整体方向来看,本次更新的核心目标是:让用户在浏览网页时,不必频繁复制内容到聊天工具中,而是可以直接在浏览器环境内完成阅读、理解、总结和交互。
二、新增网页智能总结功能
网页智能总结是本次更新中最重要的功能之一。用户打开一篇文章、新闻、论文或技术文档后,可以点击右侧侧边栏中的“总结当前页面”按钮,AI浏览器会自动提取页面正文内容,并调用大模型生成摘要。
该功能主要解决以下问题:
- 长文章阅读成本高;
- 技术文档信息密度大,难以快速抓重点;
- 新闻报道内容冗长,用户只想了解核心事实;
- 论文或报告篇幅较长,需要快速理解结论。
功能特点
本次更新后的网页总结支持三种模式:
| 模式 | 说明 |
|---|---|
| 简短摘要 | 用几句话概括页面核心内容 |
| 要点总结 | 以列表形式输出关键观点 |
| 深度总结 | 输出背景、核心观点、结论与建议 |
其中,“要点总结”是默认模式,更适合大多数网页阅读场景。
三、新增侧边栏AI助手
传统浏览器扩展往往以弹窗形式出现,但弹窗空间有限,且容易遮挡网页内容。本次更新将AI交互入口调整为右侧侧边栏,让用户可以一边浏览网页,一边与AI进行对话。
侧边栏AI助手主要包含以下模块:
- 当前网页标题;
- 当前网页摘要;
- 用户输入框;
- 历史问答记录;
- 常用操作按钮;
- 模型状态提示;
- 清空会话与复制回答功能。
这种设计有两个好处:
第一,AI助手不会打断用户当前的浏览流程。
第二,用户可以基于当前页面上下文进行连续提问,而不需要每次重新粘贴网页内容。
例如,用户正在阅读一篇关于“新能源车电池技术”的文章,可以直接问:
这篇文章提到的主要技术路线有哪些?
AI浏览器会结合当前页面内容进行回答,而不是给出泛泛而谈的通用答案。
四、支持网页内容问答
除了总结之外,本次更新还新增了“基于当前网页内容问答”的能力。
该功能的实现逻辑大致如下:
- 读取当前网页正文;
- 对正文进行清洗,移除广告、脚本、导航栏等无关内容;
- 将用户问题和网页正文一起发送给模型;
- 要求模型仅基于网页内容回答;
- 若页面中没有相关信息,则提示“当前页面未提供相关内容”。
这类功能非常适合以下场景:
- 阅读技术文档时快速查询参数;
- 阅读产品说明时询问功能差异;
- 阅读政策文件时提取适用范围;
- 阅读论文时询问实验方法与结论;
- 阅读长篇文章时定位某个观点来源。
与普通聊天机器人相比,网页问答的优势在于它具备页面上下文,不需要用户重复描述背景。
五、搜索增强能力优化
本次更新还对搜索体验进行了增强。用户在地址栏或搜索框中输入问题时,AI浏览器可以自动判断用户意图,并给出更适合的搜索建议。
例如用户输入:
如何优化React页面性能?
AI浏览器可以自动生成以下搜索建议:
- React性能优化最佳实践;
- React组件重复渲染如何排查;
- React useMemo useCallback 使用场景;
- React虚拟列表优化大数据渲染;
- React性能分析工具 Profiler 使用方法。
此外,系统还可以根据搜索问题生成一个“搜索计划”,帮助用户更系统地查找资料。
搜索增强流程
用户输入问题
↓
AI分析搜索意图
↓
生成关键词组合
↓
推荐搜索方向
↓
用户点击后自动搜索
这一能力对于技术学习、资料调研、论文查找和产品竞品分析都有比较明显的帮助。
六、新增划词解释与翻译
本次更新加入了划词菜单。用户在网页中选中一段文字后,可以选择以下操作:
- 解释这段话;
- 翻译为中文;
- 翻译为英文;
- 提取关键词;
- 改写这段内容;
- 生成学习笔记。
例如,在阅读英文技术文档时,用户选中一句复杂的说明文字,点击“解释这段话”,AI浏览器会以更容易理解的方式进行说明。
该功能相比传统翻译工具的优势在于,它不仅可以逐字翻译,还可以结合上下文解释术语含义。
七、生成网页结构化大纲
面对长文内容,用户常常不知道文章结构。本次更新支持自动生成网页大纲,AI会根据正文内容提取一级标题、二级标题和关键段落。
生成结果类似:
# 页面大纲
## 1. 行业背景
- 市场变化
- 用户需求
- 技术趋势
## 2. 核心问题
- 成本问题
- 效率问题
- 数据安全问题
## 3. 解决方案
- AI辅助阅读
- 自动化搜索
- 智能摘要
## 4. 未来展望
- 多模态交互
- 本地模型部署
- 个性化浏览体验
对于学习型用户而言,大纲功能可以帮助他们迅速建立整体认知,再决定是否深入阅读某些章节。
八、隐私与安全策略优化
AI浏览器涉及网页内容读取和模型调用,因此隐私保护非常重要。本次更新重点优化了以下内容:
1. 明确的权限边界
浏览器扩展只在用户主动点击功能按钮时读取当前页面内容,不会在后台持续监听所有网页。
2. 敏感页面保护
对于银行、支付、邮箱、后台管理系统等敏感页面,默认不启用内容读取能力。
3. 本地清洗数据
网页内容会先在本地进行清洗,移除输入框内容、密码字段、隐藏字段等潜在敏感信息。
4. 可配置API地址
用户可以自行配置模型服务地址,例如:
- OpenAI兼容接口;
- 本地Ollama服务;
- 私有化部署大模型接口;
- 企业内部AI网关。
这样既能满足个人用户需求,也能适配企业内部安全规范。
九、交互体验优化
本次更新对前端体验做了较多细节优化:
- 侧边栏加载速度更快;
- 增加了AI回答中的打字机效果;
- 支持Markdown渲染;
- 代码块支持复制;
- 对话记录可折叠;
- 错误提示更清晰;
- 网络异常时自动重试;
- 支持浅色与深色主题;
- 总结结果支持一键复制;
- 支持清空当前页面上下文。
这些优化虽然不一定属于核心能力,但会直接影响用户是否愿意长期使用。
一个好用的AI浏览器,不仅要“能回答”,更要“回答得舒服”。
十、项目目录结构
下面是一个简化版AI浏览器插件的目录结构,适用于基于 Chrome Extension Manifest V3 的实现方式。
ai-browser-extension
├── manifest.json
├── background.js
├── content.js
├── sidebar.html
├── sidebar.js
├── sidebar.css
├── options.html
├── options.js
└── utils
├── extract.js
├── api.js
└── prompt.js
各文件职责如下:
| 文件 | 作用 |
|---|---|
| manifest.json | 插件配置文件 |
| background.js | 后台服务逻辑 |
| content.js | 注入网页,用于读取页面内容 |
| sidebar.html | 侧边栏页面结构 |
| sidebar.js | 侧边栏交互逻辑 |
| sidebar.css | 样式文件 |
| options.html | 设置页面 |
| options.js | API配置逻辑 |
| extract.js | 网页正文提取工具 |
| api.js | 模型接口请求封装 |
| prompt.js | Prompt模板 |
十一、核心源码:manifest.json
下面是插件配置示例:
{
"manifest_version": 3,
"name": "AI Browser Assistant",
"version": "1.2.0",
"description": "一个支持网页总结、问答、翻译和搜索增强的AI浏览器助手。",
"permissions": [
"activeTab",
"scripting",
"storage",
"sidePanel"
],
"host_permissions": [
""
],
"background": {
"service_worker": "background.js"
},
"side_panel": {
"default_path": "sidebar.html"
},
"content_scripts": [
{
"matches": [""],
"js": ["content.js"],
"run_at": "document_idle"
}
],
"options_page": "options.html",
"action": {
"default_title": "打开AI浏览器助手"
}
}
该配置中使用了 sidePanel 权限,用于打开浏览器侧边栏。
十二、核心源码:background.js
background.js 主要负责监听插件按钮点击事件,并打开侧边栏。
chrome.action.onClicked.addListener(async (tab) => {
if (!tab.id) return;
await chrome.sidePanel.open({
tabId: tab.id
});
await chrome.sidePanel.setOptions({
tabId: tab.id,
path: "sidebar.html",
enabled: true
});
});
这段代码非常简洁,但它是侧边栏交互的入口。当用户点击插件图标时,AI助手会在当前标签页右侧打开。
十三、核心源码:content.js
content.js 用于从当前网页中提取正文内容,并响应侧边栏发送的消息。
function getPageText() {
const clone = document.body.cloneNode(true);
const removeSelectors = [
"script",
"style",
"noscript",
"iframe",
"svg",
"canvas",
"input",
"textarea",
"button",
"nav",
"footer",
"aside"
];
removeSelectors.forEach((selector) => {
clone.querySelectorAll(selector).forEach((el) => el.remove());
});
const title = document.title || "";
const text = clone.innerText
.replace(/\s+/g, " ")
.trim()
.slice(0, 12000);
return {
title,
url: location.href,
text
};
}
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === "GET_PAGE_CONTENT") {
sendResponse(getPageText());
}
return true;
});
这里对页面内容做了初步清洗,移除了脚本、样式、表单、导航栏等无关元素,并限制最大长度,避免一次性传输过多内容。
十四、核心源码:sidebar.html
侧边栏页面结构如下:
AI浏览器助手
AI浏览器助手
页面结构包括顶部标题、快捷操作按钮、聊天区域和输入框。
十五、核心源码:sidebar.css
下面是一个简单但实用的样式示例:
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: #f7f8fa;
color: #1f2937;
}
.app {
height: 100vh;
display: flex;
flex-direction: column;
}
.header {
height: 56px;
padding: 0 14px;
background: #ffffff;
border-bottom: 1px solid #e5e7eb;
display: flex;
align-items: center;
justify-content: space-between;
}
.header h1 {
font-size: 16px;
margin: 0;
}
.actions {
padding: 12px;
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.actions button,
.footer button,
.header button {
border: none;
border-radius: 8px;
padding: 8px 10px;
background: #2563eb;
color: white;
cursor: pointer;
}
.chat {
flex: 1;
overflow-y: auto;
padding: 12px;
}
.message {
margin-bottom: 12px;
padding: 10px;
border-radius: 10px;
line-height: 1.6;
white-space: pre-wrap;
}
.message.user {
background: #dbeafe;
}
.message.ai {
background: #ffffff;
border: 1px solid #e5e7eb;
}
.footer {
padding: 12px;
background: #ffffff;
border-top: 1px solid #e5e7eb;
}
textarea {
width: 100%;
height: 72px;
resize: none;
border: 1px solid #d1d5db;
border-radius: 8px;
padding: 8px;
outline: none;
margin-bottom: 8px;
}
十六、核心源码:模型接口封装
下面是一个兼容 OpenAI 风格接口的请求封装。
async function callAI(messages) {
const config = await chrome.storage.sync.get([
"apiKey",
"apiBase",
"model"
]);
const apiKey = config.apiKey || "";
const apiBase = config.apiBase || "https://api.openai.com/v1";
const model = config.model || "gpt-4o-mini";
const response = await fetch(`${apiBase}/chat/completions`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${apiKey}`
},
body: JSON.stringify({
model,
messages,
temperature: 0.3
})
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`AI请求失败:${errorText}`);
}
const data = await response.json();
return data.choices?.[0]?.message?.content || "";
}
这段代码支持用户自行配置 API 地址、模型名称和密钥。
如果用户使用本地模型服务,也可以将 apiBase 设置为本地地址,例如:
http://localhost:11434/v1
十七、核心源码:Prompt模板
一个好的AI浏览器,Prompt设计非常关键。下面是几个常用模板。
function buildSummaryPrompt(page) {
return [
{
role: "system",
content: "你是一个专业的网页阅读助手,擅长总结网页内容。"
},
{
role: "user",
content: `
请总结以下网页内容,要求:
1. 使用中文;
2. 提取核心观点;
3. 使用条目化表达;
4. 不要编造网页中没有的信息。
网页标题:${page.title}
网页地址:${page.url}
网页正文:
${page.text}
`
}
];
}
function buildQuestionPrompt(page, question) {
return [
{
role: "system",
content: "你是一个严谨的网页问答助手,只能基于用户提供的网页内容回答。"
},
{
role: "user",
content: `
请根据以下网页内容回答问题。
如果网页中没有相关信息,请回答:“当前页面未提供相关内容”。
网页标题:${page.title}
网页地址:${page.url}
网页正文:
${page.text}
用户问题:
${question}
`
}
];
}
function buildOutlinePrompt(page) {
return [
{
role: "system",
content: "你是一个擅长信息结构化整理的助手。"
},
{
role: "user",
content: `
请根据以下网页内容生成结构化大纲,要求使用Markdown格式。
网页标题:${page.title}
网页正文:
${page.text}
`
}
];
}
十八、核心源码:sidebar.js
下面是侧边栏主要交互逻辑。
const chatEl = document.getElementById("chat");
const inputEl = document.getElementById("input");
const sendBtn = document.getElementById("sendBtn");
const summaryBtn = document.getElementById("summaryBtn");
const outlineBtn = document.getElementById("outlineBtn");
const clearBtn = document.getElementById("clearBtn");
function appendMessage(role, content) {
const div = document.createElement("div");
div.className = `message ${role}`;
div.textContent = content;
chatEl.appendChild(div);
chatEl.scrollTop = chatEl.scrollHeight;
}
async function getCurrentTab() {
const tabs = await chrome.tabs.query({
active: true,
currentWindow: true
});
return tabs[0];
}
async function getPageContent() {
const tab = await getCurrentTab();
return await chrome.tabs.sendMessage(tab.id, {
type: "GET_PAGE_CONTENT"
});
}
async function handleSummary() {
try {
appendMessage("user", "请总结当前页面");
appendMessage("ai", "正在读取网页内容并生成总结...");
const page = await getPageContent();
const messages = buildSummaryPrompt(page);
const result = await callAI(messages);
chatEl.lastChild.textContent = result;
} catch (error) {
appendMessage("ai", `发生错误:${error.message}`);
}
}
async function handleOutline() {
try {
appendMessage("user", "请生成当前页面大纲");
appendMessage("ai", "正在分析页面结构...");
const page = await getPageContent();
const messages = buildOutlinePrompt(page);
const result = await callAI(messages);
chatEl.lastChild.textContent = result;
} catch (error) {
appendMessage("ai", `发生错误:${error.message}`);
}
}
async function handleQuestion() {
const question = inputEl.value.trim();
if (!question) return;
inputEl.value = "";
appendMessage("user", question);
appendMessage("ai", "正在思考...");
try {
const page = await getPageContent();
const messages = buildQuestionPrompt(page, question);
const result = await callAI(messages);
chatEl.lastChild.textContent = result;
} catch (error) {
chatEl.lastChild.textContent = `发生错误:${error.message}`;
}
}
summaryBtn.addEventListener("click", handleSummary);
outlineBtn.addEventListener("click", handleOutline);
sendBtn.addEventListener("click", handleQuestion);
clearBtn.addEventListener("click", () => {
chatEl.innerHTML = "";
});
需要注意的是,示例代码中直接使用了 buildSummaryPrompt、buildQuestionPrompt、callAI 等函数。实际项目中可以通过打包工具将模块合并,也可以将这些函数直接放入同一个文件中。
十九、设置页源码示例
为了方便用户配置自己的模型接口,可以增加一个设置页面。
options.html
AI浏览器助手设置
AI浏览器助手设置
options.js
const apiBaseEl = document.getElementById("apiBase");
const apiKeyEl = document.getElementById("apiKey");
const modelEl = document.getElementById("model");
const saveBtn = document.getElementById("saveBtn");
async function loadOptions() {
const config = await chrome.storage.sync.get([
"apiBase",
"apiKey",
"model"
]);
apiBaseEl.value = config.apiBase || "https://api.openai.com/v1";
apiKeyEl.value = config.apiKey || "";
modelEl.value = config.model || "gpt-4o-mini";
}
async function saveOptions() {
await chrome.storage.sync.set({
apiBase: apiBaseEl.value.trim(),
apiKey: apiKeyEl.value.trim(),
model: modelEl.value.trim()
});
alert("设置已保存");
}
saveBtn.addEventListener("click", saveOptions);
loadOptions();
二十、已修复问题汇总
本次更新还修复了多个影响使用体验的问题:
- 修复部分网页正文提取为空的问题;
- 修复侧边栏重复打开导致状态异常的问题;
- 修复长文本请求时偶发超时的问题;
- 修复某些页面按钮点击无响应的问题;
- 修复深色模式下文字对比度不足的问题;
- 修复API配置保存后未立即生效的问题;
- 修复页面切换后仍使用旧网页内容的问题;
- 修复部分站点由于CSP限制导致脚本注入失败的问题;
- 修复AI回答过长时聊天框滚动异常的问题;
- 修复复制代码块时格式丢失的问题。
这些修复让AI浏览器在复杂网页环境下更加稳定。
二十一、后续计划
AI浏览器未来还可以继续扩展以下能力:
1. 本地知识库
允许用户上传PDF、Markdown、Word等文档,并在浏览网页时结合本地资料进行问答。
2. 多标签页总结
支持同时总结多个标签页内容,适合竞品分析、资料整理和论文调研。
3. 自动化任务执行
例如自动整理网页表格、批量提取商品信息、自动生成邮件回复等。
4. 多模态能力
支持识别网页图片、图表和截图内容,让AI不仅能读文字,还能理解视觉信息。
5. 端侧模型支持
未来可以接入本地小模型,在不联网的情况下完成基础摘要、翻译和分类任务。
6. Agent模式
让AI根据用户目标自主规划操作步骤,例如:
帮我查找三款适合程序员使用的人体工学椅,并整理价格、优缺点和购买建议。
AI浏览器可以自动搜索、打开页面、提取信息并生成对比表格。
二十二、总结
本次AI浏览器更新围绕“阅读效率”和“网页理解”进行了系统升级。新增的网页总结、内容问答、侧边栏助手、划词解释、结构化大纲和搜索增强功能,让浏览器不再只是一个网页展示工具,而是逐渐成为用户的信息处理助手。
对于普通用户来说,AI浏览器可以帮助他们更快理解网页内容,减少重复复制和切换工具的成本。对于开发者来说,这类项目也非常适合作为AI应用落地的练手方向,因为它涉及浏览器插件、网页内容提取、Prompt设计、模型接口调用、前端交互和隐私安全等多个技术点。
本文附带的源码示例虽然是一个简化版本,但已经覆盖了AI浏览器的核心实现链路:
读取网页内容
↓
清洗正文数据
↓
构造Prompt
↓
调用大模型接口
↓
在侧边栏展示结果
如果你希望继续完善该项目,可以从以下几个方向入手:
- 增加Markdown渲染;
- 增加流式输出;
- 增加代码高亮;
- 增加本地模型适配;
- 增加网页内容缓存;
- 增加敏感页面过滤;
- 增加多轮会话记忆;
- 增加多标签页聚合总结。
AI浏览器的价值,不只是把AI放进浏览器里,而是让AI真正理解用户正在浏览的内容,并在合适的时机提供帮助。随着模型能力、浏览器API和端侧算力的持续提升,未来的浏览器很可能会成为每个人的智能信息中枢。