让本地大模型读懂你的笔记,Khoj 部署小记

本地大模型跑起来之后遇到一个问题:它能聊天,能写代码,但它不知道我的笔记里写了什么。几百篇 Markdown 堆在 NAS 上,想问点什么得先自己翻出来,再粘贴给模型。这太蠢了。

后来发现 Khoj——一个自托管的 AI 知识库。你把文档丢给它,它用向量检索从你的文件里找答案,再交给大模型组织语言。35k 星,AGPL-3.0,Python 写的,支持接 Ollama 跑本地模型。刚好我有本地模型在跑,接上去应该能变成一个能”记住事”的 AI 助手。

Khoj - AI for Humans

Docker 部署

配置文件在 GitHub 仓库根目录就有。拉下来改几个环境变量就能跑:

mkdir ~/.khoj && cd ~/.khoj
wget https://raw.githubusercontent.com/khoj-ai/khoj/master/docker-compose.yml
# 改 KHOJ_ADMIN_PASSWORD 和 KHOJ_DJANGO_SECRET_KEY
docker-compose up -d

容器起来后访问 http://localhost:42110 就能看到 Web 界面。第一次启动会比较慢,要初始化 PostgreSQL 和 pgvector 扩展。

这里有个坑:官方文档说第一次跑完要重启一次,不然有些配置不生效。我一开始没重启,后台管理面板里什么都没有,还以为部署失败了。

Khoj GitHub 仓库

接本地大模型

Khoj 通过 OpenAI 兼容 API 接入本地模型。如果你的本地模型已经跑了兼容服务端(比如 Ollama),在 docker-compose.yml 里把 OPENAI_BASE_URL 取消注释,指向你的模型地址就行。

Khoj 管理面板 - 配置 AI Model API

然后在后台管理面板创建一个 AI Model API 配置,填上 API 地址。再创建一个 Chat Model,把模型名填进去。整个过程不用写代码。

有个细节容易漏:管理面板必须用 localhost 访问,不能用 127.0.0.1,不然报 CSRF 错误。官方文档里提了,但我还是踩了。

Khoj 管理面板 - 配置 Chat Model

导入文档

Khoj 支持索引 Markdown、PDF、Word、org-mode、纯文本,还能通过 API 同步 Notion 页面和 GitHub 仓库。我把 NAS 上的 Markdown 笔记目录挂载进容器,在 Web 界面里拖进去就行。

索引过程会调用 embedding 模型把文档向量化,存到 PostgreSQL 的 pgvector 里。第一次全量索引比较吃内存——我几百篇 Markdown,索引过程吃了差不多 2G。NAS 内存不大的话建议分批导入,别一次全塞进去。

增量同步很快。Obsidian 有官方插件,装上之后自动把 vault 同步到 Khoj 服务器,改了文件不用手动重新上传。

实际效果

问它”我之前写过什么关于 Docker 网络的内容”,它能从笔记里找到相关文件,总结出来,还附上来源文件名。这比全文搜索好太多了——全文搜索只能告诉你关键词出现在哪,Khoj 能理解问题意图。

v2.0 beta 加了 Long Term Memories,会记住你之前问过什么、聊过什么。目前还是 beta,偶尔会忘事。Deep Research 模式也试了,自动多轮搜索网页和文档,然后整合成报告。慢是慢了点,但出来的东西确实有用。

还有定时任务功能,设一个周期性任务让 AI 帮你做研究然后发邮件。我设了个每天早上扫技术新闻的自动化,理论上行得通,但还没跑够几天不好下结论。

踩过的坑

  • 内存:PostgreSQL + pgvector + Khoj 本身,空闲状态占 1G 左右。索引时飙到 2-3G。
  • 反向代理:通过反代访问需要设 KHOJ_DOMAINKHOJ_NO_HTTPS=True,不然报 DISALLOWED HOST。
  • Safari:后台管理面板在 Safari 上可能登不进去,换 Chrome 或 Firefox。
  • 离线 embedding:默认用云端 embedding API。想完全离线需要自己配本地 embedding 模型,配置稍麻烦,官方文档有说明。

如果你已经在跑本地大模型,又有一堆文档想让 AI 能查到,Khoj 是目前最完整的开源自托管方案。Notion AI 能做的事它基本都能做,但数据在你自己手里。

发表评论