先编译再检索:一个不用 embedding 的开源知识库
市面上大多数「知识库问答」工具的套路都差不多把文档切块、算 embedding、塞进向量库提问时按相似度召回若干碎片喂给 LLM。KaaS 做了两个和主流不太一样的选择先编译再检索不直接对原始碎片做 RAG。先用 LLM 把散乱内容编译成一篇篇结构化的 Markdown Wiki 文章再在这上面做检索。不用 embedding检索阶段没有向量库、没有相似度计算。文章目录直接喂给 LLM让它像人翻目录一样选页、读全文。这篇讲整套系统的骨架和几个关键取舍单个机制的细节留给后续文章。解决什么问题KaaS 最初是我们内部的一个工具。知识散落在文档、会议、邮件里每当有人转岗或离开他积累的上下文就跟着走了接手的人要花几周重新拼凑。我们要的是让散乱输入沉淀成可读、可编辑、能长期演进的知识资产人能直接打开读的 Markdown而不是黑盒向量库。这也定了架构的走向编译质量第一检索只是编译产物之上的一层薄导航。带来了什么价值对使用者来说KaaS 的价值集中在几点散乱的笔记、文档、会议记录被编译成分类清晰、带溯源的 Markdown Wiki能长期积累复用。用自然语言提问拿到带引用的回答同一个问题不用反复被问第二遍。产出是纯 Markdown可读、可 git 版本管理、可手改。AI 生成、人工校准质量随用随涨。部署轻docker compose up或 CLI 一键启动默认 SQLite无向量库重依赖。通过 MCP 的ask工具Claude Code、Codex、openclaw 都能把这套 Wiki 当知识源直接查询。对接任意 OpenAI-compatible 端点可以全本地跑数据不出境。怎么做到的整体架构三层分工层技术职责Web UIReact Vite shadcn/uiChat / Submit / Wiki / Status 四个页面Go Backend标准库net/httpREST/SSE API、Worker Pool、任务队列、MCP 端点Python AI 引擎kb-aiuv编译流水线、LLM 迭代检索、Chat存储默认 SQLite零依赖go run即可跑存任务队列和编译状态检索走纯 LLM 迭代不依赖任何嵌入模型。检索不用 embedding让 LLM 直接翻目录这是 KaaS 和 naive RAG 的关键差别。编译阶段会维护一份master-index.md作为全量文章目录标题加摘要。检索时不做向量召回而是把这份目录连同问题一起喂给 LLM让它选出最相关的文章路径再把选中的文章整篇读进来做回答上下文。核心就三步storeKBStore(kb_dir,read_onlyTrue)catalogstore.existing_articles()# 1. 读 master-index 目录ifnotcatalog:return[]meta_by_path{a.path:aforaincatalog}selected_select_relevant(catalog,query,model,max_selectmax_articles)# 2. LLM 选页return_read_selected(store,meta_by_path,selected)# 3. 读全文LLM 选页就是一段结构化 prompt让模型从目录里挑路径并返回{paths: [...]}选中的页整篇读入仅按MAX_ARTICLE_CHARS 12_000截断以控制 prompt 预算。全流程没有一处 import 向量库或 embedding 模型。这套方案能成立是因为编译已经把噪声去掉了进入检索的是结构化、去重后的文章目录里的标题和摘要足以让 LLM 导航。好处是部署轻不需要 chromadb / sentence-transformers / pytorch 这些重依赖镜像小、无需预下载模型。代价是只靠目录摘要导航一篇文章如果只在正文深处才和问题相关、标题摘要里没体现就可能选不到。这个「body-depth 召回」缺口是否值得引入向量检索留待后续按价值评估。编译流水线Extract → Classify → Write → Index检索能这么轻前提是编译够重。KaaS 的编译是一条 4 阶段流水线Extract从原始文本提取概念、实体、决策、行动项Classify把提取结果映射到已有文章或标记为新建Write创建/合并 Markdown 文章Index更新 Markdown 索引master-index / topic-index服务端把 Classify→Write→Index 编排成一条带并发和 SSE 进度的流水线。工程难点在去噪单个 LLM 调用卡死不能拖垮整批和去重并行分组不能各自「发明」同名文章这两点在系列首篇《4 阶段编译流水线先编译再检索如何去噪去重》里已经展开这里不再重复。接进任意 AI agent一个asktool 的 MCP 设计编译好的 Wiki 不只给自家 Web UI 用还能被任意支持 Model Context Protocol 的 agentClaude Code / Codex / openclaw当成可问答的知识源。KaaS 的 MCP server 只暴露一个ask工具mcp.tool()defask(query:str,paths:list[str]|NoneNone,model:str|NoneNone)-dict:它不重写检索逻辑而是直接复用 chat corerun_server_chat_http跑一遍 LLM 迭代检索再让 LLM 生成带内联[Title](path)引用的答案。MCP 的tools/call是请求/响应式的chat core 是流式的所以ask用一个 collector 把流事件收集成完整答案再返回。两种传输stdio默认agent 本地 spawnkb-ai mcp自包含和 streamable-http。远程场景由 Go 后端在/mcp原生服务保持:8080单一对外 origin。小结KaaS 的核心做法是把成本压在编译阶段编译时做足去噪、去重、结构化检索就能很轻不用 embedding只让 LLM 翻目录读全文。也因为产出是 Markdown它能用 git 管理、手动编辑、被任意 agent 当知识源接入。几个实现选择也遵循同一个思路能简单就不复杂。检索用 LLM 迭代翻目录没有额外堆一个向量库。后续每篇会钻进一个机制编译流水线的去噪去重已发布、为什么敢不用 embedding、Worker 并发与故障恢复、asktool 的 MCP 设计。代码都是公开的感兴趣可以直接翻 GitHub 仓库。致谢KaaS 的核心思路受 Andrej Karpathy 的 「LLM Wiki」gist 启发把知识编译成一个持续演进、相互链接的 Wiki随时间沉淀复用省掉每次提问都对原始数据重跑 RAG 的老路。感谢他把这个模式讲清楚了。项目地址https://github.com/bybit-exchange/kaas欢迎使用 KaaS 并 star 支持我们

相关新闻

AI编程助手已经知道该删哪些代码了

AI编程助手已经知道该删哪些代码了

这项由上海交通大学LLM4SE实验室联合字节跳动(抖音集团)共同完成的研究,以预印本形式发布于2026年7月20日,论文编号为arXiv:2607.18213v1,有兴趣深入了解的读者可通过该编号查询完整论文。**当AI助手开始"刷屏&qu…

2026/10/13 4:41:54 阅读更多 →
nfs服务器的相关知识

nfs服务器的相关知识

nfs服务器的相关知识一.NFS基本介绍二.安装软件包三.在node2创建共享⽬录四.修改配置文件六.验证是否成功共享七.挂载使⽤1.客户端下载软件包2.建立挂载点3.进行挂载4.查看挂载是否成功5.检查是否可以共享文件一.NFS基本介绍 CentOS Stream 9中的NFS(⽹络⽂件系统&…

2026/10/12 21:32:11 阅读更多 →
国内做工厂AR运维系统的公司有哪些

国内做工厂AR运维系统的公司有哪些

国内工厂AR运维系统技术选型与架构解析:从远程协作到数字孪生 在工业4.0的深水区,传统运维模式正面临严峻挑战。设备复杂度指数级上升,而资深专家资源稀缺且分布不均,导致现场故障排查周期长、差旅成本高、知识沉淀难。增强现实&a…

2026/10/15 4:19:38 阅读更多 →

最新新闻

递归函数一次讲透:原理、案例、坑位与迭代改写技巧

递归函数一次讲透:原理、案例、坑位与迭代改写技巧

递归函数这东西,我在初学C语言的时候一度觉得特别玄乎。“函数调用自己”听起来就像是俄罗斯套娃,一层套一层,总觉得下一秒就要把栈撑爆。但后来真正在项目里用它解决了几个实际的问题之后,才慢慢体会到:递归不是炫技&…

2026/10/15 19:56:04 阅读更多 →
C++编程实战:一套例题源码带你跑通类、多态与模板

C++编程实战:一套例题源码带你跑通类、多态与模板

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 19:56:04 阅读更多 →
openMotor开源内部弹道模拟器:从燃面退移到推力曲线预测

openMotor开源内部弹道模拟器:从燃面退移到推力曲线预测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 19:56:04 阅读更多 →
楼宇能量管理多时间尺度调度:四层架构与需求侧响应建模

楼宇能量管理多时间尺度调度:四层架构与需求侧响应建模

干楼宇能源这一行,很多东西都是“计划赶不上变化”逼出来的。日前调度排得好好的,光伏预测半天更新一次,实际出力比预报少了三成;空调还在按既定计划跑,电网需求响应邀约偏偏在这个节骨眼发过来,室内温度眼…

2026/10/15 19:56:04 阅读更多 →
从雅虎军规到现代性能预算:前端优化的变与不变

从雅虎军规到现代性能预算:前端优化的变与不变

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 19:56:04 阅读更多 →
Hive窗口函数实战:从GROUP BY到滑动窗口的进阶指南

Hive窗口函数实战:从GROUP BY到滑动窗口的进阶指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 19:55:03 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →