我用 VPS 搭了个 AI 私人助理,从此文档随便问

上周翻笔记,突然意识到一个问题:我存了将近 200 篇 PDF 和 Markdown 文档,分散在本地文件夹、Notion、Obsidian 里,想找某个东西全靠记忆——有时候连自己存过什么都记不清。

然后我在 Twitter 上刷到有人推 Khoj,说是一个开源的 AI 第二大脑,能帮你搜文档、本地跑模型、还能自定义智能体。我第一反应是又一个"AI 改变世界"的玩具吧?结果随手搭了一下,发现还真有点东西。

Khoj 在 GitHub 上有 34000 多颗星,不是一时热。它最大的特点是能自托管,代码是 AGPL-3.0 开源的。说白了,你的文档和查询永远不会离开你的服务器——这点对隐私敏感的人来说是刚需。

能干什么?

  • 搜你的文档。PDF、Markdown、Word、图片(带 OCR)、Notion 导出都能搜,而且是语义搜索,不是关键词匹配
  • 跟任何 LLM 聊天。本地用 Ollama 跑 Qwen3、Llama,或者接 GPT、Claude、DeepSeek 都行
  • 创建自定义智能体。给不同场景配不同的知识库和模型
  • 联网搜索。接 SearXNG 或 Serper,随时查新信息
  • 还能自动摘要、通知推送到邮箱

为什么要在 VPS 上跑?

本地部署当然也行,但我个人选 VPS 是因为:

  1. 一直在线。不用开电脑,手机随时能问
  2. 数据完全在自己手里。文档和查询不会跑到任何第三方服务器上
  3. 可以接本地模型。在同一台 VPS 上跑 Ollama,完全离线

推荐配置

组件最低推荐
CPU2 核4 核
内存4 GB8 GB+
存储20 GB50 GB+ SSD
系统Ubuntu 22.04+Ubuntu 24.04

如果你打算同时跑 Ollama 的本地模型,内存建议 8 GB 以上。内存不够的话,模型推理会慢到让你怀疑人生。

安装 Docker

先装 Docker,这是基础:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
docker --version
docker compose version

没什么好说的,照着跑就行。

部署 Khoj

mkdir -p ~/khoj && cd ~/khoj
wget https://raw.githubusercontent.com/khoj-ai/khoj/master/docker-compose.yml

官方 docker-compose 文件里有四个服务:

  • database — 带 pgvector 扩展的 PostgreSQL,用来存向量
  • sandbox — Terrarium,代码执行沙箱
  • search — SearXNG,元搜索引擎
  • server — Khoj 主应用

配置环境变量

打开 docker-compose.yml,找到 server 服务下的 environment 部分:

nano docker-compose.yml

改这几个关键变量:

environment:
  - POSTGRES_PASSWORD=改一个强密码
  - KHOJ_DJANGO_SECRET_KEY=生成随机密钥
  - KHOJ_DEBUG=False
  - KHOJ_ADMIN_EMAIL=你的邮箱
  - KHOJ_ADMIN_PASSWORD=改一个强密码

生成随机密钥:

python3 -c "import secrets; print(secrets.token_urlsafe(50))"

然后启动:

cd ~/khoj
docker compose up -d
docker compose logs -f server

启动成功后,Khoj 会在 http://你的VPS_IP:42110 开放。打开浏览器就能用。

接 Ollama 跑本地模型

这一步是重点。用本地模型的好处是:不依赖任何 API Key,不花一分钱,完全离线。

curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3:8b

Qwen3 的中英双语效果不错。如果你内存只有 4 GB,pull 小一点的模型也行:

ollama pull phi4-mini:3.8b

然后在 docker-compose.yml 的 server 环境变量里加两行:

- OPENAI_BASE_URL=http://host.docker.internal:11434/v1/
- KHOJ_DEFAULT_CHAT_MODEL=qwen3

改完重启:

docker compose down && docker compose up -d

现在 Khoj 默认就用你本地的 Ollama 了。

说实话,本地模型的速度和云端没法比,尤其是 4 GB 内存的机器跑 8B 模型的时候。但胜在隐私和数据完全可控——问什么都行,不用担心被审计。

配 HTTPS(别跳这一步)

用 VPS 的话,HTTPS 最好配置。两个方案,Caddy 最简单,Nginx 最灵活。

Caddy(推荐新手)

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy

创建 /etc/caddy/Caddyfile

khoj.yourdomain.com {
    reverse_proxy localhost:42110
}

Caddy 会自己申请 Let’s Encrypt 证书,不需要管 certbot。

Nginx

sudo apt install nginx

创建 /etc/nginx/sites-available/khoj

server {
    server_name khoj.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:42110;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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 $scheme;
        proxy_read_timeout 86400;
    }
}

启用并配 HTTPS:

sudo ln -s /etc/nginx/sites-available/khoj /etc/nginx/sites-enabled/
sudo certbot --nginx -d khoj.yourdomain.com
sudo nginx -t && sudo systemctl reload nginx

然后在环境变量里加上:

- KHOJ_NO_HTTPS=True
- KHOJ_DOMAIN=khoj.yourdomain.com

首次使用

打开 https://khoj.yourdomain.com,用你设置的管理员账号登录。

添加文档很简单:

  1. 设置 → 内容 → 添加内容
  2. 选来源类型(上传文件、指定目录、或 URL)
  3. Khoj 会自动索引

支持的格式:PDF、Markdown、Word、图片(OCR)、Org-mode、Notion 导出、GitHub 仓库。基本上能想到的格式都覆盖了。

索引的速度取决于文档数量和大小。我第一次上传了 50 多篇 PDF,大概等了 2-3 分钟。

创建自定义智能体

侧边栏点 智能体 → 创建智能体,配置几项:

  • 名称和人设 — 比如"技术文档助手"
  • 知识库 — 选它能访问的文档
  • 模型 — 选驱动这个智能体的 LLM
  • 工具 — 联网搜索、代码执行等
  • 指令 — 系统提示词,写清楚它该怎么回答

比如我可以建一个"代码审查助手",只读我的代码仓库,用 Qwen3 回复问题。这样每次写代码遇到问题,直接问它,上下文都在。

联网搜索

docker-compose.yml 里已经配好了 SearXNG。要开联网搜索,只需要一个 API Key:

  • serper.dev 注册,拿免费密钥
  • 或者用 Firecrawl
  • 在 docker-compose.yml 里取消 SERPER_DEV_API_KEY 的注释,填上 Key
  • 重启 docker compose down && docker compose up -d

实验性功能:计算机控制

Khoj 有一个实验性功能叫 Operator,可以让它在虚拟计算机上执行操作:

- KHOJ_OPERATOR_ENABLED=True
# - /var/run/docker.sock:/var/run/docker.sock

这东西目前还比较早期,不推荐在生产环境用。知道有这么回事就行。

遇到问题怎么办

“Connection refused”(连不上 Ollama)

docker-compose.yml 里加上这个:

extra_hosts:
  - "host.docker.internal:host.docker.internal"

启动不起来

先看日志:

docker compose logs server
docker compose logs database

常见问题:

  • 内存不够(至少 2 GB 可用)
  • PostgreSQL 还没初始化完,等 30 秒
  • 端口 42110 被别的程序占了

本地模型太慢

  • 换量化模型:Q4_K_M 或 Q5_K_M
  • 用更小的模型,比如 Phi-4-mini(3.8B)而不是 7B+
  • 有 GPU 的话开硬件加速

日常运维

# 停止
cd ~/khoj && docker compose down

# 更新(pull 最新镜像然后重启)
cd ~/khoj && docker compose pull && docker compose up -d

# 看日志
cd ~/khoj && docker compose logs -f

数据在 Docker volumes 里,默认路径 /var/lib/docker/volumes/。备份用一行命令就够了:

# 备份数据库
docker run --rm -v khoj_khoj_db:/data -v $(pwd):/backup alpine tar czf /backup/khoj-db-backup.tar.gz -C /data .
# 备份配置
docker run --rm -v khoj_khoj_config:/data -v $(pwd):/backup alpine tar czf /backup/khoj-config-backup.tar.gz -C /data .

性能优化

  • SSD 存储。向量搜索对 I/O 很敏感,机械硬盘会慢很多
  • 内存不够就加 Swap:
    sudo fallocate -l 4G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    
  • Khoj 适合个人用,不太适合多人大并发
  • 索引用大模型(7B+),日常对话用小模型(3B),各取所需

最后说两句

Khoj 搭起来不难,核心就一个 docker-compose.yml 文件。我的真实感受是:它不是一个"改变世界"的工具,但确实能解决"找不到东西"这个实际问题。

4 GB 内存的 VPS 也能跑,体验会差一些,但完全够用。8 GB 就舒服了。本地模型的速度虽然不如云端,但胜在免费和隐私。

如果你经常存文档、找东西,值得花 20 分钟搭一个试试。

官方文档:docs.khoj.dev 社区:Khoj Discord

这篇文章对你有帮助吗?