上周翻笔记,突然意识到一个问题:我存了将近 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 是因为:
- 一直在线。不用开电脑,手机随时能问
- 数据完全在自己手里。文档和查询不会跑到任何第三方服务器上
- 可以接本地模型。在同一台 VPS 上跑 Ollama,完全离线
推荐配置
| 组件 | 最低 | 推荐 |
|---|---|---|
| CPU | 2 核 | 4 核 |
| 内存 | 4 GB | 8 GB+ |
| 存储 | 20 GB | 50 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,用你设置的管理员账号登录。
添加文档很简单:
- 点 设置 → 内容 → 添加内容
- 选来源类型(上传文件、指定目录、或 URL)
- 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