工作原理
KaaS 采用先编译、后检索的架构。不同于将原始文本切块放入向量数据库的传统 RAG 方案,KaaS 通过 LLM 流水线将内容编译为结构化、人类可读的 Markdown 文章,查询时再从这些文章中检索。
两个阶段
阶段一:编译
当你提交内容(粘贴文本、上传文件或提供 URL)时,内容进入 4 阶段流水线:
原始内容 → Extract(提取) → Classify(分类) → Write(写入) → Index(索引) → 结构化 Wiki每个阶段都是一次 LLM 调用,对材料进行进一步转化:
| 阶段 | 功能 |
|---|---|
| Extract | 从原始文本中提取概念、实体、决策和行动项 |
| Classify | 将提取结果映射到现有 wiki 文章或标记为新建 |
| Write | 创建新文章或合并到现有文章(输出 Markdown) |
| Index | 更新 master-index 和 topic-index 以供检索导航 |
最终产出是一组互相链接的 Markdown 文件——人类可读、git 可管理、LLM 可检索。
阶段二:检索
当你提出问题时,KaaS 使用 LLM 迭代检索(无需嵌入模型、无需向量数据库):
- 将
master-index.md作为导航目录喂给 LLM - LLM 选择最相关的 wiki 页面
- 读取这些页面的完整内容作为上下文
- 通过 SSE 流式生成带引用的回答
这种方式消除了分块检索的噪声——LLM 读取的是完整的、结构良好的文章,而非任意的文本片段。
为什么先编译?
| 先编译后检索 | 切块+嵌入(传统 RAG) |
|---|---|
| 结构化、去重的文章 | 有冗余的原始切块 |
| 人类可读、可编辑的输出 | 不透明的向量存储 |
| LLM 导航精心编排的索引 | 对噪声嵌入做相似度搜索 |
| 上下文是完整文章 | 上下文是 512 token 的片段 |
| 零嵌入依赖 | 需要嵌入模型 + 向量数据库 |
Worker 并发加速
编译阶段由 Go Worker Pool 并行化执行,管理并发、容错和增量处理:
核心机制:
- Dispatcher(调度器)——基于信号量的并发控制;每用户 goroutine 上限
- Extract Worker Pool(提取工作池)——多 worker 并行执行 Extract 阶段(通过
extract_workers配置) - Pipeline Worker(流水线工作器)——按用户批量处理 Classify/Write/Index
- Circuit Breaker(断路器)——LLM 连续失败 N 次后自动熔断;冷却期后通过半开探针自动恢复
- Lease + Heartbeat(租约 + 心跳)——防止重复处理;崩溃后自动恢复孤立任务
详见 编译流水线 了解各阶段的详细说明。