最近专注于本地优先的 AI 应用开发。主要原因当然不是为了省钱:相比云端服务,本地部署受限于资源和算力,能力要大打折扣。真正的原因在于:
- 隐私保护:某些行业受合规要求限制,业务资料不允许联网。
- 无审核的内容生成和处理:原因无需多言。
- 响应速度:在某些场景下,速度大于一切,且需求变化有限,此时微调后的本地模型足以满足业务需要。
除了以上三类典型原因,更重要的是开源模型能力的不断增强,使本地部署成为可能。由此还能演变出“云 + 端”的架构:能在本地处理的就本地处理,处理不了的再求助云端。
技术栈
以我目前研发的项目为例,典型的技术栈如下:
开发
- 前端:next
- agent:eve
- sandbox(内存):just-bash
- gen-ui:json-render
- 文档处理:docling + python
- 数据库:pgvector + drizzle
测试
- unit:node:test
- e2e:playwright
- eval:eve
- linter:i18n-check + biome
本地模型
- embedder:Qwen/Qwen3-Embedding-0.6B
- reranker:Alibaba-NLP/gte-multilingual-reranker-base
- llm:Qwen/Qwen3.6-35B-A3B-FP8
Serving
- embedding + reranking:HF TEI
- llm:vllm
- 硬件:Nvidia DGX Spark
答疑时间
- 为何使用
eve?
因为好用,且出自 vercel,加上前端用的也是 vercel 的 next,自然就选择了它。此外,它的开发体验很好,直接支持 eval,省事。更强的理由在于它提供了一站式的 agent 开发方案,比如 sandbox 和 gen-ui。优势如此明显,不选它选谁。
- sandbox 为何选择
just-bash?
首先,既然是本地优先,各类云端 sandbox provider 自然就被排除在外,剩下的就是 docker 之类支持本地部署的方案。但我目前并不需要那么复杂的功能,选择基于内存的 just-bash 是自然之选。即使后续有需要,换成 docker 也不复杂。
btw,它同样出自 vercel。
- gen-ui 为何选择
json-render?
同样出自 vercel,并且它还支持我需要的 mcp-app。
- 模型的选择理由是什么?
首先,我需要支持 CJK,embedder 和 reranker 的选择也就不言而喻了。
关于 reranker 多说一句:之前曾选过 Qwen Reranker,但效果总不如人意。后来深入查看并与 AI 讨论之后,才发现它压根不是我想当然的 BERT-style cross-encoder,完全不适合我的场景。又一番调研之后,选择了现在这个,因为它比 bge 性能更优(当然,这也是和 AI 讨论的结果)。
至于 llm,也是调研之后的自然之选。为何没选最近的 27B?因为成本。目前这台 Spark 上同时跑着 vllm + Qwen,以及 TEI + embedder + reranker,未来还打算引入 image model。跟 AI 讨论之后,决定暂不升级。而且实测下来,响应速度和质量都还能接受。
- 为何不选择 ollama?
更正一下,我并非没有用 ollama:eval 的 judge 用的就是 ollama + Qwen(没找到好用的本地类 jev 模型,故而用 Qwen 顶上)。但作为服务器,ollama 并不是好的选择,vllm 和 sglang 的口碑反而更好。至于 vllm 和 sglang 之间的权衡,当时其实没想太多,发现 ollama 不适合生产环境之后,就直接选了 vllm。
简单一句话:开发可以用 ollama,生产服务器则在 vllm 和 sglang 之间选择。更复杂的,找 AI 讨论吧,反正写多了现在也没人看了 😄。
注意事项
- 踩了若干坑之后,我们选择的 docker 镜像:
- vllm:
timothystewart6/vllm-gb10 - tei:
ghcr.io/huggingface/text-embeddings-inference:121-latest
- vllm:
这两个镜像都针对 Spark 做过优化或修正。
注:安装距今已有一段时间(3 个月以上),现在或许已经不需要了,权当最后的救命稻草吧。
thinking有成本,且并非银弹。
thinking 一词颇具迷惑性,仿佛打开开关,模型就开了智。其实不然:使用不当的话,它会在一大堆废话之后才输出实际内容,让用户觉得系统很慢,而且输出的内容甚至可能是错的!此乃过犹不及。
对于大多数本地场景,如 RAG、图片理解与识别、文档生成与处理,这个选项其实没有必要开启。加上如今 agent harness 不断增强,它在多数情况下更显多余。
将其 budget 设为 0 之后,不仅速度大幅改善,内容质量也明显提高。
- 本地运营同样有成本。
本地 AI 并非没有成本,简单盘算一下就有:硬件投入、访问安全、电力以及稳定性保障,需要综合考虑。
结语
以上是凭记忆罗列的、这几个月开发本地 AI 应用的相关事项和避坑说明。若有遗漏,会在后续文章里补上,哈哈。