很早以前,注意到一个开源项目:Khoj,当时我在大脑里标注的关键词是:支持Obsidian插件,Agent和本地知识库管理。不过在那个时间段,我正在构建科技公司的知识图谱,需要调用的外部工具更多,就只能将Khoj加入到To-Do List里了(当然还有个原因是因为当时不支持Gemini的API)。
这两天,恰逢对DeepSeek-R1、GPT的o1和o3、Gemini2.0、Claude3.5等进行比较和学习,就顺手把Khoj部署了起来。
首先,是Khoj网站首页的介绍,这个页面是在线版本的界面。免费可用,但是额度很少,收费版,30美金一个月,算是贵的了。

不过,对我而言,一定是使用Self-Host的本地部署方式了,该项目开源,可以直接通过Python的PiP安装,或者直接使用docker。考虑到后台数据库,代码运行的沙箱,搜索引擎等都是容器化部署更方便,我直接选择了docker部署。
由于Windows下使用,要在WSL环境下,相对而言,Mac就更方便了(老生常谈,继续长期看衰Windows在AI时代逐渐掉队)。
进入安装过程:
下载一个docker桌面版。
在终端里安装一下docker-compose:
brew install docker-compose
下载khoj的docker-compose.yml
mkdir ~/.khoj && cd ~/.khoj
wget https://raw.githubusercontent.com/khoj-ai/khoj/master/docker-compose.yml
以上代码来自khoj的官网帮助文档:https://docs.khoj.dev/get-started/setup?os=macos
区别是,官方文档是通过brew安装docker的,因为系统里docker桌面版是标配,所以这一步我就可以省去了。对于没有安装过docker的朋友们,我还是建议直接上docker官网下载桌面版,更省心。
但是考虑到国内访问docker可能会不方便,所以一定的网络设置还是需要的。
下载完docker-compose.yml文件后,就是修改一些配置,简单期间,我就直接截图官网文档了。

有几种方式:一种是使用API,目前支持OpenAI、Claude和Gemini(终于支持了)。对我而言,毫不犹豫的就把GEMINI_API_KEY那行注释去掉,并填上了自己在Google AI Studio里的API。
我必须得继续夸奖Gemini2.0,不仅仅因为它是目前我认为最好的模型,更因为Google慷慨的给予开发者免费的额度:一天1500次调用,每分钟请求不超过10次。基本上,只要使用场景不是“蒸馏”他家模型,都差不多够用了。即使不够,还能用1.5,哪怕当下,1.5用来干活,除了慢一点没啥大毛病。


在我初步的使用中,我只修改了用户名密码和Gemini的API Key。
然后,就是运行
docker-compose up
第一次拉取镜像,初始化需要一定的时间。当命令行返回下面提示后,就可以使用了。

这里有个小坑,就是第一步不应该在浏览器打开本地应用首页(localhost:42110),而是应该进到admin页面:http://localhost:42110/server/admin/,会要求输入用户名和密码(前面修改的)。
在管理页面,要添加模型,选择如下图中左边栏的“Chat Model”,然后点击最右上角的“+”图标,添加模型。


在我的模型设置页里,调用gemini2.0 flash,如上填写,模型名字不能错,模型类别选择Google,api选择“Google Gemini”。
然后,别忘了,点击右下角的保存。
模型设置就可以了。
然后是进到首页:localhost:42110,长成下面的样子。

这时候,还是不可以聊天的。需要设置一下模型。选择左边栏的“Settings”。

在Models一栏的“Chat”下选择gemini-2.0-flash-exp。

回到首页,然后坑就来了。我在首页对话框里常规性的输入了“introduce yourself”,但是毫无反应。我一直哪里设置错了。试了很多选项,还进行了其他测试,花费了半小时。直到,我尝试性的先敲入了"/",选择了“general”命令,同时,点亮了上面的Khoj(其实是Agent)小图标,才终于有了输出。

输出是长这个样的。

坑人的地方又来了,明显这是“Khoj”的Agent的输出,而这个Agent,看起来是Gemini-1.5。

为了用上Gemini2.0,需要再添加一个Agent。就在首页左边栏的“Agents”里,我添加了一个叫做“test”的Agent。点亮它,然后,Gemini2.0快速输出token的感觉终于来了。


到此,算是完成了(其实不需要选择"/"命令,点亮一个agent之后,直接对话就可以)。
既然跑通了,我就开始了第二个想法:使用本地的deepseek-r1。当然方法是使用ollama(ollama的安装很简单,去官网下载即可)。
考虑到在笔记本上的性能,模型,我选择了基于llama3-8B蒸馏的版本:deepseek-r1:8b-llama-distill-q8_0。
拉取模型的方式也很简单,直接运行:
ollama pull deepseek-r1:8b-llama-distill-q8_0
权重文件8.5GB,下载时间取决于网速了。
下载好后,停止之前的docker-compose(两种方式,一种是直接回到之前运行docker-compose up的终端按“Ctrl+C”停止,还有一种如果之前是后台启动的,那么在同目录下docker-compose down即可),修改docker-compose.yml文件,将“OPENAI_BASE_URL”一行前面的注释“#”去掉即可。
然后“docker-compose up”启动,进入admin页面配置模型。
这里先要添加一个api。

名字和key随意,base url如上填写。
然后添加模型,模型名字是8b-llama-distill-q8_0,模型类型必须选择“openai”,api选择ollama(很可能上面的设置api的一步是不需要的,这里api也可以留空白,不选,但是保险期间,我还是按照其他场惊喜啊调用api的方式进行了)。

当然,在对话页面,也要添加agent,我命名为deepseek-llama。
做到数学题,输出过程跟在线的完整版r1非常接近,当然,答案是一样的。

除了聊天和Agent之外,Khoj还有一系列功能:搜索(web和本地知识库)、图像生成(需要配置)、语音生成(需要配置)、代码生成。
由于图像生成和语音生成需要花些时间另外配置,这里我只测试了代码生成和运行。接着上题,有直接计算的python代码(这代码多少有点鸡贼),也有直接运行得到结果(从后台日志看,确实跑了程序)。

当然,如果能够直接输出图表,就更直观了。

到此,无论是调用在线的Gemini2.0,还是使用本地版的DeepSeek-R1,都算是成功了。我很满意Khoj的完整性,开始有一点集大成的味道了。
当然,我还非常看重它的另一大功能:Obsidian插件。直接在Obisidian里社区插件选择搜索就能找到,下载量超过34K,看起来确实热度已经很可以了。

然后是设置,在“URL”里填上本地地址和端口即可了。
可惜的是没有Agent的选择,那我理解为,默认的就是使用khoj的Agent了,Gemini-1.5的那个。我暂时找不到如何修改这些设置。

安装好后,在obsidian的右栏可以打开对话窗口。现在的对话,直接带搜索功能(搜索可以在khoj的amin里配置,时间关系,我就用了默认设置)了,上图的链接看起来都很ok。
当然,在我其他对话中,它还返回了我的obsidian文档的搜索结果,个人知识库的积累变得越来越重要了。
当然,看起来目前插件的功能还需要进一步完善。但是安装后,逐步的obsidian的文档会同步到本地数据库中,作为Khoj的知识库,这个过程可以做到“无感知”,体验还是不错的。
当然,无论Khoj还是插件,都是代码开源的,所以更多功能的开发,难度变小了,可能性也变多了。
一个新工具的初步尝试这就算完成了。
后记
过去几年,类似于这样的新工具尝试,应该没到千,但是大几百次肯定是有的。强迫症的我总想找到完美的解决方案:简单、直接,All-in-One。
每一次的尝试,一定都是带着对现有工具和流程的缺憾,但是每一次的尝试后,都会让自己再次回到熟悉的现有工具上。就拿现在开始越来越热的“第二大脑”的概念来说,我使用Obsidian已经超过五年时间了,这五年多里,我应该是尝试过了所有能够找到的类笔记工具,从收费的Notion(使用notion的时间更远远早于Obsidian)到那些只有几十个star的新项目,甚至自己都写了几个简单的笔记工具。然而,现在几乎所有的文档资料还是都在Obsidian中,不甘中却始终带着这样的相信:总有人会跟我想法一样,但是比我能力强,比我勤快,可以把插件写出来。
Khoj的出现进一步加强了我的信念。
因为最好而且可以免费的Gemini2.0 API让尝试门槛成为了零,因为DeepSeek-R1将本地可部署的开放权重模型的能力又提升了一层,然后才有Khoj优秀架构想法的落地可能性。
这种信念,也许真正的源头是开放与开源的生态:Obsidian其实给了一个很完美的结合,应用是闭源的,可以免费使用但也可以付费购买,插件是完全开放和开源的(个别好插件也可以收费);Gemini也是这样的,模型是闭源的,但是给了开发者足够的免费额度来尝试各种新想法;类似于Khoj的很多AI工具也是这样的,工具的核心代码是开源的,但是有包装更好的商业收费版本供选择……
无论是国内还是国外,纯软件开发和服务,从来都是很艰难的,坚持开源则更为艰难。
然而,正如我一直说的,如今的AI就是从开源生态里长出来的,任何离开开放环境的分支,都将因失去足够的养分而快速枯萎。