企业内网 AI 浏览器落地指南:架构、安全与配置文件全套方案
AI浏览器 私有化部署方案|附配置文件
面向企业内网、政企客户、金融/医疗/制造等对数据安全要求较高的场景,AI浏览器的私有化部署不仅能够提升员工检索、阅读、总结、问答与办公自动化效率,还能有效避免敏感数据流向公有云模型平台。本文将从架构设计、部署环境、组件选型、安全策略、配置文件、运维建议等方面,完整介绍一套可落地的 AI 浏览器私有化部署方案。
一、为什么需要私有化部署 AI 浏览器?
随着大模型技术在办公场景中的普及,越来越多企业开始将 AI 能力嵌入浏览器中,例如:
- 网页内容总结
- 网页问答
- 文档解析
- 内部知识库检索
- 表单自动填写
- 多页面信息对比
- 会议纪要生成
- 企业应用智能助手
- 内网系统自然语言操作
传统浏览器只负责访问网页,而 AI 浏览器则进一步承担“理解网页内容”和“辅助用户完成任务”的角色。
但是在企业真实环境中,直接使用公有云 AI 浏览器或外部大模型服务,往往会遇到以下问题:
1. 数据安全风险
用户访问的网页、复制的文本、上传的文档、内部系统页面内容,可能包含:
- 客户信息
- 合同数据
- 财务数据
- 研发文档
- 源代码
- 员工信息
- 经营报表
- 内部流程数据
如果这些内容被发送到外部模型平台,就可能产生合规和泄密风险。
2. 内网系统无法访问外部服务
很多企业核心系统部署在内网环境,例如 OA、ERP、CRM、MES、BI、知识库、文档系统等。这些系统无法暴露到公网,外部 AI 服务也无法直接访问。
私有化 AI 浏览器可以部署在企业内网,与内部系统、内网知识库、本地模型服务打通。
3. 合规要求
金融、政务、能源、医疗等行业通常要求:
- 数据不出域
- 日志可审计
- 权限可控
- 模型调用可追踪
- 账号统一认证
- 敏感信息可脱敏
- 支持国产化或信创环境
私有化部署能够更好满足这些合规要求。
4. 成本可控
对于高频使用 AI 能力的企业,如果长期调用公有云模型 API,费用可能不可控。通过本地部署大模型、向量库和推理服务,可以在一定规模后降低边际成本。
二、整体方案目标
本文设计的 AI 浏览器私有化部署方案,主要实现以下目标:
-
浏览器端提供 AI 助手能力
支持网页总结、选中文本问答、页面翻译、知识库检索、内部系统问答等能力。 -
服务端完全私有化部署
AI 网关、模型服务、向量数据库、文档解析服务、权限系统等均部署在企业内网。 -
支持本地大模型或私有云模型
可接入 Ollama、vLLM、Xinference、OpenAI Compatible API、通义千问私有化、百川、智谱、DeepSeek 私有部署等。 -
支持知识库增强 RAG
企业可上传制度文档、产品手册、技术文档、FAQ,浏览器助手可结合知识库回答问题。 -
支持统一身份认证
可对接 LDAP、AD、OIDC、企业微信、钉钉、飞书或内部 SSO。 -
支持安全审计
对用户请求、模型调用、敏感词命中、文件上传、知识库访问进行记录。 -
支持 Docker Compose 快速部署
提供可直接改造使用的配置文件,便于测试和生产落地。
三、系统架构设计
AI 浏览器私有化部署可分为五层:
┌──────────────────────────────────────────────┐
│ 用户终端层 │
│ AI浏览器 / 浏览器插件 / 企业定制浏览器 │
└──────────────────────────────────────────────┘
│ HTTPS
▼
┌──────────────────────────────────────────────┐
│ 接入网关层 │
│ Nginx / API Gateway / WAF / TLS / 限流 │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ AI服务层 │
│ AI Gateway / Prompt管理 / 会话管理 / 权限控制 │
└──────────────────────────────────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ 模型推理层 │ │ 知识库层 │
│ Ollama/vLLM/Xinference│ │ Embedding/向量库/RAG │
└──────────────────────┘ └──────────────────────┘
│ │
▼ ▼
┌──────────────────────────────────────────────┐
│ 数据存储层 │
│ PostgreSQL / Redis / MinIO / Milvus / Qdrant │
└──────────────────────────────────────────────┘
四、核心组件说明
1. AI 浏览器客户端
客户端可以有三种形态:
| 形态 | 说明 | 适用场景 |
|---|---|---|
| 浏览器插件 | 基于 Chrome / Edge 插件开发 | 快速上线、低成本 |
| 企业定制浏览器 | 基于 Chromium 二次开发 | 强管控、安全浏览 |
| Web 端 AI 工作台 | 通过网页访问 AI 助手 | 轻量使用、跨平台 |
在多数企业中,推荐先采用“浏览器插件 + 私有化 AI 后端”的方式落地,成本低、迭代快、用户迁移成本小。
2. AI Gateway
AI Gateway 是整个方案的核心后端,主要负责:
- 接收浏览器端请求
- 校验用户身份
- 判断用户权限
- 拼接 Prompt
- 调用模型服务
- 调用知识库检索
- 记录审计日志
- 对敏感信息进行过滤或脱敏
- 统一返回结果
它相当于企业 AI 能力的统一出口。
3. 大模型推理服务
根据企业环境,可以选择以下方案:
| 方案 | 特点 |
|---|---|
| Ollama | 部署简单,适合测试和中小规模使用 |
| vLLM | 高性能推理,适合生产环境 |
| Xinference | 管理多模型方便,支持多种模型后端 |
| 私有云模型 API | 由厂商提供专属实例,企业内网访问 |
| 国产化推理平台 | 适合信创、政企场景 |
如果是试点阶段,推荐使用 Ollama 或 Xinference;如果是高并发生产环境,推荐使用 vLLM。
4. 向量数据库
知识库问答通常需要向量数据库,常见选择包括:
- Milvus
- Qdrant
- Elasticsearch Vector
- pgvector
- Weaviate
本文示例采用 Qdrant,因为它部署简单、性能较好、易于维护。
5. 结构化数据存储
推荐使用 PostgreSQL 存储:
- 用户信息
- 会话记录
- Prompt 模板
- 知识库元数据
- 文件索引
- 权限配置
- 审计日志
6. Redis
Redis 用于:
- 会话缓存
- 访问令牌缓存
- 限流计数
- 异步任务状态
- 热点 Prompt 缓存
7. MinIO
MinIO 用于存储用户上传的原始文件,例如:
- Word
- Excel
- PPT
- Markdown
- HTML
- 图片 OCR 结果
五、服务器规划建议
测试环境配置
适用于 20~100 人试点:
| 组件 | 配置建议 |
|---|---|
| CPU | 16 核 |
| 内存 | 64GB |
| GPU | 可选,1 张 24GB 显存 GPU |
| 磁盘 | 1TB SSD |
| 系统 | Ubuntu 22.04 / Rocky Linux 9 |
| 部署方式 | Docker Compose |
生产环境配置
适用于 500~3000 人企业使用:
| 组件 | 配置建议 |
|---|---|
| 接入网关 | 2 台,负载均衡 |
| AI Gateway | 2~4 台 |
| 模型服务 | 独立 GPU 服务器 |
| 数据库 | PostgreSQL 主从或高可用集群 |
| Redis | Sentinel 或 Cluster |
| 对象存储 | MinIO 分布式 |
| 向量库 | Qdrant/Milvus 集群 |
| 监控 | Prometheus + Grafana |
| 日志 | Loki / ELK |
六、Docker Compose 部署目录结构
建议目录如下:
ai-browser-private/
├── docker-compose.yml
├── .env
├── nginx/
│ └── nginx.conf
├── ai-gateway/
│ └── config.yaml
├── postgres/
│ └── init.sql
├── qdrant/
│ └── config.yaml
├── minio/
│ └── data/
├── logs/
└── data/
七、环境变量配置文件
下面是 .env 示例:
# =========================
# 基础配置
# =========================
DEPLOY_ENV=production
TZ=Asia/Shanghai
# =========================
# 域名配置
# =========================
AI_BROWSER_DOMAIN=ai-browser.example.local
AI_GATEWAY_PORT=8080
# =========================
# PostgreSQL 配置
# =========================
POSTGRES_DB=ai_browser
POSTGRES_USER=ai_browser_user
POSTGRES_PASSWORD=ChangeMe_Postgres_2025
POSTGRES_PORT=5432
# =========================
# Redis 配置
# =========================
REDIS_PASSWORD=ChangeMe_Redis_2025
REDIS_PORT=6379
# =========================
# MinIO 配置
# =========================
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=ChangeMe_Minio_2025
MINIO_API_PORT=9000
MINIO_CONSOLE_PORT=9001
# =========================
# Qdrant 配置
# =========================
QDRANT_PORT=6333
QDRANT_GRPC_PORT=6334
# =========================
# Ollama 配置
# =========================
OLLAMA_PORT=11434
OLLAMA_MODEL=qwen2.5:14b
# =========================
# JWT 配置
# =========================
JWT_SECRET=ChangeMe_JWT_Secret_Key_At_Least_32_Chars
JWT_EXPIRE_SECONDS=7200
# =========================
# 安全配置
# =========================
ENABLE_AUDIT_LOG=true
ENABLE_DATA_MASKING=true
ENABLE_REQUEST_RATE_LIMIT=true
RATE_LIMIT_PER_MINUTE=60
生产环境中务必修改所有 ChangeMe 字段,并使用密钥管理工具保存敏感信息,例如 Vault、KMS 或 Kubernetes Secret。
八、Docker Compose 配置文件
以下是 docker-compose.yml 示例:
version: "3.9"
services:
nginx:
image: nginx:1.25
container_name: ai-browser-nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./logs/nginx:/var/log/nginx
- ./nginx/certs:/etc/nginx/certs:ro
depends_on:
- ai-gateway
networks:
- ai-browser-net
ai-gateway:
image: registry.example.local/ai-browser/ai-gateway:1.0.0
container_name: ai-browser-gateway
restart: always
env_file:
- .env
ports:
- "${AI_GATEWAY_PORT}:8080"
volumes:
- ./ai-gateway/config.yaml:/app/config.yaml:ro
- ./logs/ai-gateway:/app/logs
depends_on:
- postgres
- redis
- qdrant
- minio
- ollama
networks:
- ai-browser-net
postgres:
image: postgres:16
container_name: ai-browser-postgres
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
TZ: ${TZ}
ports:
- "${POSTGRES_PORT}:5432"
volumes:
- ./data/postgres:/var/lib/postgresql/data
- ./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
networks:
- ai-browser-net
redis:
image: redis:7.2
container_name: ai-browser-redis
restart: always
command:
[
"redis-server",
"--requirepass",
"${REDIS_PASSWORD}",
"--appendonly",
"yes"
]
ports:
- "${REDIS_PORT}:6379"
volumes:
- ./data/redis:/data
networks:
- ai-browser-net
qdrant:
image: qdrant/qdrant:v1.9.5
container_name: ai-browser-qdrant
restart: always
ports:
- "${QDRANT_PORT}:6333"
- "${QDRANT_GRPC_PORT}:6334"
volumes:
- ./data/qdrant:/qdrant/storage
- ./qdrant/config.yaml:/qdrant/config/production.yaml:ro
networks:
- ai-browser-net
minio:
image: minio/minio:RELEASE.2024-06-13T22-53-53Z
container_name: ai-browser-minio
restart: always
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
TZ: ${TZ}
ports:
- "${MINIO_API_PORT}:9000"
- "${MINIO_CONSOLE_PORT}:9001"
volumes:
- ./data/minio:/data
networks:
- ai-browser-net
ollama:
image: ollama/ollama:latest
container_name: ai-browser-ollama
restart: always
ports:
- "${OLLAMA_PORT}:11434"
volumes:
- ./data/ollama:/root/.ollama
networks:
- ai-browser-net
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
networks:
ai-browser-net:
driver: bridge
如果服务器没有 GPU,可以删除 ollama 服务中的 deploy.resources 配置,但模型推理速度会明显下降。
九、Nginx 反向代理配置
nginx/nginx.conf 示例:
user nginx;
worker_processes auto;
events {
worker_connections 4096;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$request_time"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
sendfile on;
keepalive_timeout 65;
client_max_body_size 100m;
gzip on;
gzip_types text/plain application/json application/javascript text/css text/xml;
upstream ai_gateway {
server ai-gateway:8080;
}
server {
listen 80;
server_name ai-browser.example.local;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name ai-browser.example.local;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy no-referrer-when-downgrade always;
location / {
proxy_pass http://ai_gateway;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
location /api/chat/stream {
proxy_pass http://ai_gateway;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
注意:如果浏览器端使用流式输出,Nginx 必须关闭 proxy_buffering,否则用户无法看到模型逐字输出效果。
十、AI Gateway 配置文件
ai-gateway/config.yaml 示例:
server:
host: "0.0.0.0"
port: 8080
base_url: "https://ai-browser.example.local"
enable_stream: true
request_timeout_seconds: 300
auth:
mode: "oidc"
jwt_secret: "${JWT_SECRET}"
jwt_expire_seconds: 7200
oidc:
issuer: "https://sso.example.local"
client_id: "ai-browser"
client_secret: "ChangeMe_OIDC_Client_Secret"
redirect_uri: "https://ai-browser.example.local/auth/callback"
scopes:
- "openid"
- "profile"
- "email"
database:
type: "postgres"
host: "postgres"
port: 5432
name: "${POSTGRES_DB}"
username: "${POSTGRES_USER}"
password: "${POSTGRES_PASSWORD}"
max_open_connections: 50
max_idle_connections: 10
redis:
host: "redis"
port: 6379
password: "${REDIS_PASSWORD}"
db: 0
storage:
type: "minio"
endpoint: "minio:9000"
access_key: "${MINIO_ROOT_USER}"
secret_key: "${MINIO_ROOT_PASSWORD}"
bucket: "ai-browser-files"
use_ssl: false
llm:
provider: "ollama"
default_model: "qwen2.5:14b"
temperature: 0.3
max_tokens: 4096
ollama:
base_url: "http://ollama:11434"
chat_endpoint: "/api/chat"
generate_endpoint: "/api/generate"
embedding:
provider: "ollama"
model: "bge-m3"
dimension: 1024
base_url: "http://ollama:11434"
vector_store:
provider: "qdrant"
endpoint: "http://qdrant:6333"
collection: "enterprise_knowledge"
distance: "Cosine"
top_k: 5
score_threshold: 0.35
rag:
enabled: true
chunk_size: 800
chunk_overlap: 120
rerank_enabled: false
cite_source: true
security:
audit_log_enabled: true
data_masking_enabled: true
block_external_url: true
allow_upload_file_types:
- ".pdf"
- ".docx"
- ".xlsx"
- ".pptx"
- ".txt"
- ".md"
- ".html"
sensitive_words:
- "绝密"
- "机密"
- "身份证号"
- "银行卡号"
- "客户手机号"
rate_limit:
enabled: true
per_user_per_minute: 60
per_ip_per_minute: 120
prompt:
system_prompt: |
你是企业内部AI浏览器助手,只能基于用户授权访问的网页内容、用户输入内容和企业知识库回答问题。
如果问题涉及未知信息,请明确说明无法确认,不得编造。
如果引用知识库内容,请尽量给出来源。
对涉及敏感数据的问题,应遵循企业安全策略,必要时拒绝回答。
该配置文件中,auth.mode 可根据企业实际情况调整:
auth:
mode: "ldap"
或者:
auth:
mode: "local"
如果是生产环境,建议优先对接企业统一身份认证系统,避免 AI 浏览器形成独立账号体系。
十一、PostgreSQL 初始化 SQL
postgres/init.sql 示例:
CREATE TABLE IF NOT EXISTS users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(128) NOT NULL UNIQUE,
display_name VARCHAR(128),
email VARCHAR(255),
department VARCHAR(128),
role VARCHAR(64) DEFAULT 'user',
status VARCHAR(32) DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS chat_sessions (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
title VARCHAR(255),
source_url TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS chat_messages (
id BIGSERIAL PRIMARY KEY,
session_id BIGINT NOT NULL,
role VARCHAR(32) NOT NULL,
content TEXT NOT NULL,
model_name VARCHAR(128),
token_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS knowledge_files (
id BIGSERIAL PRIMARY KEY,
file_name VARCHAR(255) NOT NULL,
file_type VARCHAR(64),
file_size BIGINT,
storage_path TEXT,
uploader_id BIGINT,
status VARCHAR(32) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS audit_logs (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT,
username VARCHAR(128),
action VARCHAR(128),
resource_type VARCHAR(128),
resource_id VARCHAR(128),
ip_address VARCHAR(64),
user_agent TEXT,
request_summary TEXT,
risk_level VARCHAR(32) DEFAULT 'low',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_chat_sessions_user_id ON chat_sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_chat_messages_session_id ON chat_messages(session_id);
CREATE INDEX IF NOT EXISTS idx_audit_logs_user_id ON audit_logs(user_id);
CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON audit_logs(created_at);
该 SQL 只是基础示例,生产环境还应补充:
- 组织架构表
- 角色权限表
- 知识库权限表
- Prompt 模板表
- 模型调用统计表
- 敏感词策略表
- 操作审计归档表
十二、Qdrant 配置文件
qdrant/config.yaml 示例:
log_level: INFO
storage:
storage_path: ./storage
snapshots_path: ./snapshots
on_disk_payload: true
service:
host: 0.0.0.0
http_port: 6333
grpc_port: 6334
enable_cors: false
cluster:
enabled: false
telemetry_disabled: true
对于单机部署,cluster.enabled 设置为 false 即可。生产环境如需高可用,可部署 Qdrant Cluster 或改用 Milvus 集群。
十三、模型初始化
容器启动后,需要拉取模型。以 Ollama 为例:
docker exec -it ai-browser-ollama ollama pull qwen2.5:14b
docker exec -it ai-browser-ollama ollama pull bge-m3
其中:
qwen2.5:14b用于对话、总结、问答bge-m3用于文本向量化
如果机器显存有限,可以选择更小模型:
docker exec -it ai-browser-ollama ollama pull qwen2.5:7b
如果企业有更高性能要求,可将 Ollama 替换为 vLLM,例如部署 Qwen、DeepSeek、Llama、Yi 等模型,并通过 OpenAI Compatible API 接入 AI Gateway。
十四、部署启动步骤
1. 创建目录
mkdir -p ai-browser-private/{nginx,ai-gateway,postgres,qdrant,logs,data}
cd ai-browser-private
2. 放置配置文件
将前文提供的:
.envdocker-compose.ymlnginx/nginx.confai-gateway/config.yamlpostgres/init.sqlqdrant/config.yaml
分别放入对应目录。
3. 准备证书
测试环境可以使用自签名证书:
mkdir -p nginx/certs
openssl req -x509 -nodes -days 3650 \
-newkey rsa:2048 \
-keyout nginx/certs/server.key \
-out nginx/certs/server.crt \
-subj "/CN=ai-browser.example.local"
生产环境建议使用企业内部 CA 签发证书。
4. 启动服务
docker compose up -d
5. 查看服务状态
docker compose ps
6. 查看日志
docker logs -f ai-browser-gateway
docker logs -f ai-browser-ollama
7. 拉取模型
docker exec -it ai-browser-ollama ollama pull qwen2.5:14b
docker exec -it ai-browser-ollama ollama pull bge-m3
8. 验证模型服务
curl http://127.0.0.1:11434/api/tags
9. 验证网关服务
curl https://ai-browser.example.local/health -k
如果返回:
{
"status": "ok"
}
说明服务已正常启动。
十五、浏览器端接入配置
如果使用浏览器插件,可在插件配置中填写:
{
"apiBaseUrl": "https://ai-browser.example.local",
"authMode": "oidc",
"enablePageSummary": true,
"enableSelectionAsk": true,
"enableKnowledgeSearch": true,
"enableStreaming": true,
"maxPageContentLength": 120000,
"uploadEnabled": true
}
浏览器端建议实现以下安全策略:
- 默认不自动上传页面全文
- 用户点击“总结当前页面”后才上传页面内容
- 对密码框、身份证号、银行卡号字段进行前端过滤
- 对内网系统页面设置白名单
- 对上传内容进行长度限制
- 对用户行为提供明确提示
- 支持管理员下发统一策略
十六、RAG 知识库处理流程
AI 浏览器的知识库能力一般包括以下流程:
文件上传
↓
文件解析
↓
文本清洗
↓
文本切分
↓
生成向量
↓
写入向量库
↓
用户提问
↓
问题向量化
↓
向量检索
↓
召回相关片段
↓
组装Prompt
↓
大模型生成答案
↓
返回答案与引用来源
为了提升知识库效果,建议:
- PDF 文档优先使用可复制文本版本
- 扫描件需要 OCR
- 文档标题、章节层级要保留
- 表格数据需要结构化处理
- 长文档应按语义切分,而不是机械按长度切分
- 重要制度文件应设置版本号
- 召回结果应带来源引用
- 不同部门知识库应设置访问权限
十七、安全与权限设计
私有化部署不是简单地把服务放到内网,更重要的是权限和安全治理。
1. 用户认证
推荐对接企业统一身份认证:
- LDAP
- Active Directory
- OIDC
- SAML
- CAS
- 企业微信
- 钉钉
- 飞书
2. 权限控制
至少应包括:
| 权限对象 | 示例 |
|---|---|
| 用户权限 | 普通用户、管理员、审计员 |
| 知识库权限 | 部门可见、项目组可见、全员可见 |
| 模型权限 | 不同用户可调用不同模型 |
| 功能权限 | 上传文件、网页总结、批量分析 |
| 数据权限 | 是否允许访问历史会话 |
3. 数据脱敏
常见脱敏规则:
- 手机号:
138****1234 - 身份证号:
110101********1234 - 银行卡号:仅保留后四位
- 邮箱:
u***@example.com - 客户名称:按规则替换为客户 A、客户 B
4. 审计日志
审计日志应记录:
- 用户
- 时间
- IP
- 访问来源
- 调用模型
- 请求类型
- 知识库命中
- 上传文件
- 风险等级
- 失败原因
注意:审计日志不一定要完整保存用户输入原文。对于高敏环境,可只保存摘要、哈希或脱敏后的内容。
十八、生产环境优化建议
1. 模型服务独立部署
不要将模型服务与数据库、网关部署在同一台服务器上。模型推理通常占用大量 CPU、内存、GPU 显存,会影响其他组件稳定性。
2. 使用队列处理文档解析
大文件解析、向量化任务建议异步执行,例如:
- RabbitMQ
- Kafka
- Redis Stream
- Celery
- Argo Workflow
3. 增加限流与熔断
必须限制:
- 单用户每分钟请求数
- 单用户每日 Token 用量
- 单文件上传大小
- 单次网页内容长度
- 单会话最大轮数
4. 增加监控指标
建议监控:
- API QPS
- 请求平均耗时
- 模型推理耗时
- Token 消耗
- GPU 利用率
- 显存占用
- 向量库查询耗时
- 数据库连接数
- Redis 内存使用
- 失败率
5. 日志集中化
建议使用:
- Grafana Loki
- ELK
- OpenSearch
- ClickHouse
日志集中化后,管理员可以快速定位问题,也便于安全审计。
十九、常见问题排查
1. 浏览器无法访问服务
检查:
docker compose ps
docker logs ai-browser-nginx
确认:
- 域名是否解析到服务器
- 端口 80/443 是否开放
- Nginx 配置是否正确
- 证书路径是否正确
2. 模型响应很慢
可能原因:
- 使用 CPU 推理
- 模型过大
- 显存不足
- 并发过高
- Prompt 太长
- RAG 召回内容过多
优化方式:
- 换用更小模型
- 使用 GPU
- 降低上下文长度
- 开启模型量化
- 使用 vLLM
- 做请求排队和限流
3. 知识库问答不准确
可能原因:
- 文档切分不合理
- Embedding 模型效果较差
- top_k 太小或太大
- 没有 rerank
- 文档内容过旧
- 权限过滤后召回内容不足
优化方式:
- 优化 chunk_size 和 overlap
- 使用更好的 embedding 模型
- 增加 rerank
- 保留标题层级
- 增加引用来源
- 定期重建索引
4. 流式输出不生效
检查 Nginx 是否配置:
proxy_buffering off;
proxy_cache off;
同时确认后端接口是否使用 SSE 或 chunked streaming。
二十、总结
AI 浏览器的价值不只是“在浏览器里加一个聊天窗口”,而是将大模型能力与企业网页、内部系统、知识库、文档中心和业务流程结合起来,让员工在浏览、阅读、检索和处理信息的过程中获得实时智能辅助。
对于企业而言,私有化部署 AI 浏览器的核心收益包括:
- 数据不出内网
- 权限可控
- 日志可审计
- 模型可替换
- 知识库可沉淀
- 成本更可控
- 能与内部系统深度集成
本文提供的 Docker Compose、Nginx、AI Gateway、PostgreSQL、Qdrant 等配置文件,可以作为试点项目的基础模板。实际生产落地时,还需要根据企业规模、安全等级、模型选型、并发压力和合规要求进行进一步增强。
如果是从零开始建设,建议采用“三步走”路线:
-
第一阶段:试点验证
使用 Docker Compose 部署单机版本,接入本地模型,实现网页总结和知识库问答。 -
第二阶段:部门推广
对接统一身份认证,增加权限控制、审计日志和知识库管理。 -
第三阶段:生产级建设
引入高可用架构、GPU 推理集群、监控告警、日志审计和安全治理体系。
当 AI 浏览器真正与企业内部知识和业务流程结合后,它将不再只是一个浏览工具,而会成为企业员工日常工作的智能入口。