把 AI 浏览器装进企业内网:从插件到私有模型的落地方案(含源码)
AI浏览器 私有化部署方案|附源码
一、为什么需要“AI浏览器”私有化部署?
随着大模型能力快速成熟,越来越多企业开始将 AI 能力嵌入到日常办公、知识检索、数据分析、客户服务、研发协作等业务流程中。其中,“AI浏览器”是一种非常实用的入口形态:用户可以像使用普通浏览器一样访问网页、检索资料、阅读文档,同时通过内置 AI 助手完成网页总结、内容问答、表格提取、知识库检索、自动化操作等任务。
但是,直接使用公网 AI 浏览器或第三方插件,往往会面临以下问题:
-
数据安全风险
企业内部网页、业务系统、客户信息、合同文档、研发资料等可能被上传到外部服务,存在泄露风险。 -
权限不可控
外部 AI 工具通常无法与企业现有的统一身份认证、权限体系、审计系统深度集成。 -
模型不可控
公有云 AI 服务可能存在模型版本变化、接口限制、调用成本波动、数据合规不透明等问题。 -
网络环境限制
政企、金融、能源、制造等行业往往部署在内网、专网或隔离环境中,无法直接访问外部大模型服务。 -
业务定制能力不足
通用型 AI 浏览器难以针对企业业务系统、内部知识库、专属流程进行深度定制。
因此,面向企业场景的最佳实践是:构建可私有化部署的 AI 浏览器方案。它既保留浏览器作为信息入口的便利性,又将模型、数据、插件、权限和审计能力全部部署在企业可控环境中。
二、AI浏览器的核心能力设计
一个完整的 AI 浏览器并不只是“浏览器 + 聊天框”,而应该是一个集成了网页理解、知识增强、任务执行和安全管控的智能工作台。通常可以包含以下能力。
1. 网页内容理解
用户打开任意网页后,AI 能够读取当前页面正文、标题、表格、链接等内容,并支持:
- 一键总结网页内容;
- 提取关键观点;
- 生成思维导图大纲;
- 对当前网页进行问答;
- 将网页内容翻译成指定语言;
- 提取联系人、公司名、产品名、时间、金额等结构化信息。
2. 文档阅读与问答
企业内部常见文档包括 PDF、Word、Excel、PPT、HTML 页面、Markdown、接口文档等。AI 浏览器可以提供统一阅读入口:
- 上传文档后自动解析;
- 支持长文档分段向量化;
- 基于文档内容进行精准问答;
- 给出答案引用来源;
- 支持多文档联合检索。
3. 企业知识库检索
AI 浏览器可以连接企业已有知识库,例如:
- 产品手册;
- 运维文档;
- 客服话术;
- 研发规范;
- 项目资料;
- 法务合同模板;
- 内部制度文件。
通过 RAG,即检索增强生成技术,用户在浏览器侧提出问题时,系统先从知识库检索相关内容,再交给大模型生成答案,从而减少幻觉,提高专业性。
4. 私有大模型接入
私有化部署方案应支持多种模型后端:
- 本地部署开源大模型,例如 Qwen、DeepSeek、Llama、GLM 等;
- 企业内网大模型推理服务;
- vLLM、Ollama、TGI、LMDeploy 等推理框架;
- 兼容 OpenAI API 格式的模型服务;
- 多模型路由,根据任务选择不同模型。
5. 浏览器插件化能力
为了降低用户使用门槛,可以将 AI 能力封装成浏览器插件,支持 Chrome、Edge 或基于 Chromium 的国产浏览器。插件侧主要负责:
- 获取当前网页内容;
- 展示 AI 对话窗口;
- 向后端服务发送请求;
- 展示流式回答;
- 支持右键菜单、划词解释、一键总结等功能。
6. 安全审计与权限控制
企业级 AI 浏览器必须具备安全体系:
- 用户登录认证;
- 角色权限管理;
- API 调用鉴权;
- 文档访问权限控制;
- 对话日志审计;
- 敏感词过滤;
- 数据脱敏;
- 操作留痕;
- 模型调用限流。
三、总体架构设计
私有化 AI 浏览器可以采用典型的前后端分离架构,整体分为五层:
┌──────────────────────────────────────┐
│ 浏览器插件 / Web 前端 │
│ 网页读取、划词问答、AI侧边栏、配置管理 │
└──────────────────────────────────────┘
│ HTTPS / WebSocket
▼
┌──────────────────────────────────────┐
│ AI 网关服务层 │
│ 鉴权、会话管理、提示词编排、模型路由 │
└──────────────────────────────────────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌──────────┐
│ 大模型服务 │ │ 知识库服务 │ │ 文档解析服务 │
│ LLM API │ │ Vector DB │ │ Parser/OCR│
└─────────┘ └──────────┘ └──────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────────────┐
│ 私有化基础设施与数据层 │
│ PostgreSQL / Redis / MinIO / Milvus │
└──────────────────────────────────────┘
1. 浏览器插件层
插件层通常由以下部分组成:
manifest.json:插件配置文件;content.js:注入网页,用于获取页面内容;popup.html:插件弹窗页面;sidebar.html:AI 侧边栏页面;background.js:后台脚本,用于消息通信和 API 请求。
插件不应保存敏感数据,尽量只做轻量交互和页面内容采集,核心逻辑放在服务端。
2. AI 网关服务层
AI 网关是整个系统的核心。它负责:
- 用户鉴权;
- 接收浏览器插件请求;
- 管理会话上下文;
- 拼接系统提示词;
- 调用向量数据库;
- 调用大模型推理服务;
- 以流式方式返回结果;
- 记录审计日志。
3. 大模型服务层
私有模型服务可以使用不同方案:
| 方案 | 适用场景 | 优点 |
|---|---|---|
| Ollama | 中小团队、本地测试 | 部署简单,模型管理方便 |
| vLLM | 企业生产环境 | 高并发、高吞吐、OpenAI API 兼容 |
| LMDeploy | 国产模型部署 | 对部分中文模型优化较好 |
| TGI | HuggingFace 生态 | 标准化程度高 |
| 云内私有 API | 混合云环境 | 运维成本低 |
4. 知识库服务层
知识库服务通常包括:
- 文档上传;
- 文档切分;
- 文本向量化;
- 向量存储;
- 相似度检索;
- 引用来源返回。
常见向量数据库包括 Milvus、Qdrant、Weaviate、pgvector、Elasticsearch 向量检索等。
5. 数据存储层
推荐基础组件:
- PostgreSQL:存储用户、会话、文档元数据;
- Redis:缓存、限流、任务队列;
- MinIO:保存上传文件;
- Milvus/Qdrant:保存文档向量;
- Nginx:反向代理和 HTTPS 接入。
四、部署模式选择
1. 单机部署
适合测试环境、小团队、轻量应用。
一台服务器部署:
- AI 网关
- PostgreSQL
- Redis
- MinIO
- Ollama/vLLM
- 向量数据库
优点是简单、成本低;缺点是高可用能力弱,扩展能力有限。
2. Docker Compose 部署
适合中小企业私有化交付。通过 Docker Compose 将所有组件编排起来,安装和迁移方便。
优点:
- 部署简单;
- 环境一致;
- 易于备份;
- 适合项目交付。
3. Kubernetes 部署
适合大型企业生产环境。可以将 AI 网关、模型服务、数据库、中间件等拆分部署,支持弹性伸缩和滚动升级。
优点:
- 高可用;
- 可扩展;
- 支持灰度发布;
- 适合多租户和大规模并发。
五、源码示例:浏览器插件端
下面给出一个简化版 Chrome 插件源码,用于实现“读取当前网页正文,并发送到私有 AI 后端进行总结”。
1. manifest.json
{
"manifest_version": 3,
"name": "Private AI Browser Assistant",
"version": "1.0.0",
"description": "企业私有化 AI 浏览器助手",
"permissions": [
"activeTab",
"scripting",
"storage"
],
"host_permissions": [
"http://127.0.0.1:8000/*",
"https://ai.example.local/*"
],
"action": {
"default_popup": "popup.html",
"default_title": "AI 助手"
},
"background": {
"service_worker": "background.js"
}
}
2. popup.html
AI 助手
点击按钮后,AI 将总结当前页面内容。
3. popup.js
const API_URL = "http://127.0.0.1:8000/api/summarize";
document.getElementById("summaryBtn").addEventListener("click", async () => {
const resultEl = document.getElementById("result");
resultEl.innerText = "正在读取网页内容...";
const [tab] = await chrome.tabs.query({
active: true,
currentWindow: true
});
const injectionResults = await chrome.scripting.executeScript({
target: { tabId: tab.id },
func: () => {
const title = document.title;
const url = location.href;
const article =
document.querySelector("article") ||
document.querySelector("main") ||
document.body;
const text = article.innerText
.replace(/\s+/g, " ")
.trim()
.slice(0, 12000);
return { title, url, text };
}
});
const pageData = injectionResults[0].result;
resultEl.innerText = "正在请求私有 AI 服务...";
try {
const response = await fetch(API_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer demo-token"
},
body: JSON.stringify(pageData)
});
if (!response.ok) {
throw new Error("请求失败:" + response.status);
}
const data = await response.json();
resultEl.innerText = data.summary;
} catch (err) {
resultEl.innerText = "调用失败:" + err.message;
}
});
4. background.js
chrome.runtime.onInstalled.addListener(() => {
console.log("Private AI Browser Assistant installed.");
});
以上插件实现了一个最小可用版本:点击按钮后,插件读取当前网页内容,然后请求私有化部署的后端接口,由后端调用本地大模型生成摘要。
六、源码示例:后端 AI 网关服务
下面使用 Python FastAPI 实现一个简单 AI 网关,兼容 OpenAI 风格接口的本地模型服务,例如 vLLM、Ollama OpenAI API、LMDeploy 等。
1. 项目结构
ai-browser-server/
├── main.py
├── requirements.txt
├── .env
└── docker-compose.yml
2. requirements.txt
fastapi==0.115.0
uvicorn==0.30.6
openai==1.44.0
python-dotenv==1.0.1
pydantic==2.8.2
3. .env
LLM_BASE_URL=http://127.0.0.1:11434/v1
LLM_API_KEY=ollama
LLM_MODEL=qwen2.5:7b
如果使用 vLLM,可以改成:
LLM_BASE_URL=http://127.0.0.1:8001/v1
LLM_API_KEY=EMPTY
LLM_MODEL=Qwen2.5-7B-Instruct
4. main.py
import os
from typing import Optional
from dotenv import load_dotenv
from fastapi import FastAPI, Header, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from openai import OpenAI
from pydantic import BaseModel
load_dotenv()
LLM_BASE_URL = os.getenv("LLM_BASE_URL")
LLM_API_KEY = os.getenv("LLM_API_KEY", "EMPTY")
LLM_MODEL = os.getenv("LLM_MODEL")
client = OpenAI(
base_url=LLM_BASE_URL,
api_key=LLM_API_KEY
)
app = FastAPI(title="Private AI Browser Gateway")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class PageRequest(BaseModel):
title: str
url: str
text: str
class SummaryResponse(BaseModel):
summary: str
def verify_token(authorization: Optional[str]):
"""
示例鉴权逻辑。
生产环境应替换为企业 SSO、LDAP、OAuth2、JWT 或 API Key 鉴权。
"""
if not authorization:
raise HTTPException(status_code=401, detail="Missing authorization header")
if authorization != "Bearer demo-token":
raise HTTPException(status_code=403, detail="Invalid token")
@app.post("/api/summarize", response_model=SummaryResponse)
async def summarize_page(
req: PageRequest,
authorization: Optional[str] = Header(default=None)
):
verify_token(authorization)
if not req.text:
raise HTTPException(status_code=400, detail="Page text is empty")
prompt = f"""
你是企业内部 AI 浏览器助手。请对用户正在浏览的网页进行专业总结。
网页标题:{req.title}
网页地址:{req.url}
网页正文:
{req.text}
请按以下格式输出:
1. 核心摘要:用 3-5 句话概括主要内容;
2. 关键要点:列出 5 条以内重点;
3. 适用场景:说明该内容可能对哪些业务有帮助;
4. 注意事项:如果内容中存在不确定信息,请明确说明。
"""
completion = client.chat.completions.create(
model=LLM_MODEL,
messages=[
{
"role": "system",
"content": "你是严谨、专业、可信赖的企业级 AI 助手。"
},
{
"role": "user",
"content": prompt
}
],
temperature=0.3
)
summary = completion.choices[0].message.content
return SummaryResponse(summary=summary)
5. 启动服务
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000
启动后,插件即可访问:
http://127.0.0.1:8000/api/summarize
七、Docker Compose 私有化部署示例
下面给出一个简化版 Docker Compose,用于部署 AI 网关、PostgreSQL、Redis、MinIO 等基础服务。实际生产环境还需要加入向量数据库和模型推理服务。
version: "3.9"
services:
ai-gateway:
build: ./ai-browser-server
container_name: ai-browser-gateway
ports:
- "8000:8000"
environment:
- LLM_BASE_URL=http://host.docker.internal:11434/v1
- LLM_API_KEY=ollama
- LLM_MODEL=qwen2.5:7b
depends_on:
- postgres
- redis
restart: always
postgres:
image: postgres:16
container_name: ai-browser-postgres
environment:
- POSTGRES_USER=ai
- POSTGRES_PASSWORD=ai_password
- POSTGRES_DB=ai_browser
ports:
- "5432:5432"
volumes:
- ./data/postgres:/var/lib/postgresql/data
restart: always
redis:
image: redis:7
container_name: ai-browser-redis
ports:
- "6379:6379"
restart: always
minio:
image: minio/minio
container_name: ai-browser-minio
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=admin_password
ports:
- "9000:9000"
- "9001:9001"
volumes:
- ./data/minio:/data
restart: always
如果使用 Ollama,可在宿主机执行:
ollama pull qwen2.5:7b
ollama serve
如果使用 vLLM,可参考:
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 8001
八、知识库 RAG 能力扩展
仅总结当前网页还不够。企业更常见的需求是:用户浏览某个页面或提出问题时,AI 能结合企业内部知识库进行回答。
1. RAG 流程
用户问题
↓
问题向量化
↓
向量数据库检索 TopK 文档片段
↓
拼接上下文
↓
大模型生成回答
↓
返回答案与引用来源
2. 文档切分策略
文档切分会直接影响问答质量。建议:
- 按标题层级切分;
- 每段控制在 300-800 中文字;
- 保留文档标题、章节、页码等元数据;
- 设置 10%-20% 重叠内容;
- 表格内容转换为 Markdown 再入库。
3. 向量模型选择
中文场景推荐使用中文或多语言 Embedding 模型,例如:
- bge-large-zh;
- bge-m3;
- m3e;
- text2vec;
- jina-embeddings-v2;
- 企业自训练 embedding 模型。
4. 答案可信度设计
企业应用中,AI 回答必须可追溯。建议返回:
- 命中的文档标题;
- 章节名称;
- 页码或段落编号;
- 相似度分数;
- 原文片段;
- 文件访问链接。
这可以让用户判断答案是否可靠,也方便审计。
九、安全与合规设计
私有化部署不是简单地把服务搬到内网,更重要的是建立完整安全体系。
1. 网络隔离
建议采用以下原则:
- 插件只能访问企业 AI 网关;
- AI 网关不能随意访问公网;
- 模型服务只允许内网访问;
- 数据库不暴露给普通用户网段;
- 所有接口使用 HTTPS;
- 管理后台单独授权访问。
2. 身份认证
可接入企业已有认证体系:
- LDAP;
- Active Directory;
- OAuth2;
- OpenID Connect;
- SAML;
- CAS;
- 企业微信、钉钉、飞书统一登录。
3. 权限控制
权限粒度建议包括:
- 用户是否可使用 AI 浏览器;
- 用户可访问哪些知识库;
- 用户可上传哪些文档;
- 用户可调用哪些模型;
- 用户每日 Token 配额;
- 管理员是否可查看审计日志。
4. 数据脱敏
对于敏感内容,建议在进入模型前进行脱敏,例如:
- 手机号;
- 身份证号;
- 银行卡号;
- 客户姓名;
- 合同金额;
- 邮箱;
- 地址;
- 内部项目代号。
可以通过正则规则、敏感词典、NER 模型等方式实现。
5. 审计日志
审计日志应至少记录:
- 用户 ID;
- 请求时间;
- 访问页面 URL;
- 请求类型;
- 消耗 Token;
- 命中的知识库;
- 模型名称;
- 响应状态;
- 风险标签。
需要注意的是,审计日志也可能包含敏感信息,因此应设置访问权限和保存周期。
十、性能优化建议
1. 流式输出
AI 浏览器的交互体验非常依赖响应速度。建议后端支持 SSE 或 WebSocket 流式输出,让用户尽快看到首字。
2. 页面内容压缩
网页正文可能很长,不应直接把整个页面传给模型。可以在服务端做:
- HTML 清洗;
- 正文提取;
- 去除导航、广告、页脚;
- 长文本分段摘要;
- Token 预算控制。
3. 多模型路由
不同任务使用不同模型:
| 任务 | 推荐模型 |
|---|---|
| 简单摘要 | 7B/8B 模型 |
| 文档问答 | 14B/32B 模型 |
| 代码分析 | Code 专用模型 |
| SQL 生成 | 强推理模型 |
| 高价值决策 | 更大参数模型 |
4. 缓存机制
对于同一 URL 的网页总结,可以缓存结果。缓存 Key 可以由:
hash(url + page_title + page_text_digest)
组成,避免重复调用模型,降低 GPU 成本。
5. 并发与限流
生产环境中应对用户、部门、接口分别限流:
- 每分钟请求次数;
- 每日 Token 上限;
- 单次最大输入长度;
- 最大并发会话数;
- 文件上传大小限制。
十一、生产环境落地清单
上线前建议检查以下内容:
- [ ] 浏览器插件是否完成企业签名或内部分发;
- [ ] 后端接口是否启用 HTTPS;
- [ ] 是否接入统一身份认证;
- [ ] 是否配置用户权限和知识库权限;
- [ ] 是否限制跨域来源;
- [ ] 是否启用审计日志;
- [ ] 是否启用敏感信息脱敏;
- [ ] 是否配置模型服务访问白名单;
- [ ] 是否配置数据库备份;
- [ ] 是否配置日志轮转;
- [ ] 是否压测并评估 GPU 资源;
- [ ] 是否制定异常降级方案;
- [ ] 是否准备用户使用手册。
十二、常见问题
1. AI 浏览器是否必须自己开发浏览器内核?
不需要。大多数场景只需要开发浏览器插件即可。基于 Chrome、Edge 或 Chromium 内核浏览器,可以快速实现网页读取和 AI 侧边栏能力。只有在需要完全定制浏览器外壳、安全沙箱、内置证书体系时,才需要考虑基于 Electron 或 Chromium 二次开发。
2. 插件读取网页内容是否有安全风险?
有一定风险。因此需要控制插件权限,不要申请不必要的权限;同时要通过企业内部插件商店或浏览器策略统一分发,避免用户安装来源不明的插件。
3. 私有化部署是否一定需要 GPU?
如果只是轻量测试,可以使用 CPU 或较小模型,但生产环境建议使用 GPU。对于 7B 级模型,单张消费级高显存 GPU 或服务器 GPU 可以支撑基础场景;如果并发较高,应使用 vLLM 等推理框架提升吞吐。
4. 如何降低模型幻觉?
可以从几个方面入手:
- 使用 RAG 引入企业知识库;
- 要求答案引用来源;
- 限制模型不得编造;
- 对高风险问题增加“无法确定”输出策略;
- 使用更强模型处理关键问题;
- 增加人工审核流程。
十三、总结
AI 浏览器是企业落地大模型应用的高价值入口。它让用户无需切换复杂系统,就能在浏览网页、阅读文档、处理信息的过程中直接调用 AI 能力。相比公有云插件,私有化部署方案在数据安全、权限控制、模型可控、合规审计和业务定制方面更适合企业长期使用。
本文给出了一套可落地的 AI 浏览器私有化部署方案,包括整体架构、插件源码、后端 AI 网关源码、Docker Compose 部署示例、RAG 扩展、安全合规和性能优化建议。实际项目中,可以先从“网页总结 + 文档问答 + 企业知识库检索”三个核心功能做最小可用版本,再逐步扩展多模型路由、自动化操作、流程编排和智能 Agent 能力。
最终,一个成熟的私有化 AI 浏览器不只是一个工具,而会成为企业知识流转、信息处理和智能协作的新入口。