知识库

把笔记、文件、网址统一分块并生成向量,供对话检索与语义搜索使用。入口:左侧导航「知识库」(路由 /knowledge-base)。

笔记 文件(上传) 网址(抓取正文) 分块 按结构切分,记录序号与方式 向量化 embedding 用途模型 向量与元数据 SQLite:vec0 虚拟表 PostgreSQL:pgvector 列 维度 = Embedding:Dimensions 检索出口 对话工具带 · 搜索测试 · Wiki 生成 · 模型主动调用的检索工具
索引管线与检索出口:分块 → 向量化 → 写向量表与元数据;对话、搜索测试、Wiki 与模型工具都从同一份向量里召回。

三种来源

来源添加方式说明
笔记编辑器顶部「生成索引」,或知识库批量补索引按 Markdown 结构分块
文件知识库页上传记录文件名、大小、MIME,正文抽取后分块
网址知识库页填入 URL抓取网页正文(含标题)后分块

索引管线

  1. 分块:按结构切分内容,每块记录序号、分块方式与内容。
  2. 向量化:调用 embedding 用途的模型生成向量,写入向量表(SQLite 用 sqlite-vec 的 vec0 虚拟表;PostgreSQL 用 pgvector 列)。
  3. 记录元数据:每块保存模型名与维度,供状态页展示与校验。
  4. 任务化:整个过程是后台任务(类型 GenerateEmbedding / GenerateKnowledgeItemEmbedding),可在「后台任务」页看到耗时与失败原因。

三个页签

页签内容
概览知识项总数、已索引数、覆盖率、向量维度、按类型(笔记 / 文件 / 网址)分布、运行中任务数
索引管理逐项状态:分块数、模型、维度、最近索引时间、是否有运行中任务;单项重新索引与「批量生成索引」(只处理未索引项)
搜索测试输入查询直接看向量召回结果,可调 Top-K,命中片段高亮——用来验证索引质量
知识库页:索引覆盖率、向量维度与索引管理
点图看原图

索引相关字段

表字段
KnowledgeItemsType(Note / File / Url)、Title、Content、SourceUrl、FileName、FileSize、MimeType、NoteId、IsDeleted
NoteChunksKnowledgeItemId、ChunkIndex、ChunkMethod、Content、Summary
NoteChunkEmbeddingsChunkId、Model、Dimensions、UpdatedAt、Embedding(SQLite 侧向量在 vec_chunk_embeddings)

状态接口返回 totalItems / indexedItems / unindexedItems / noteCount / fileCount / urlCount / hasEmbeddingProvider / dimensions / runningTaskCount;索引列表每项含 chunkCount、embeddingModel、embeddingDimensions、embeddingUpdatedAt、hasRunningTask。

检索如何被使用

  • 对话输入框的「知识库」开关:召回结果作为上下文注入,并在界面给出命中列表。
  • 模型也可通过工具主动检索(笔记搜索、知识库检索),由权限模式与工具白名单约束。
  • Wiki 生成时可叠加语义检索,从项目资料里挑相关内容。

配置与限制

项说明
Embedding:Dimensions向量维度,默认 1536;必须与模型实际维度一致,否则 SQLite 侧写入会失败
换模型换 Embedding 模型后需重新索引(旧向量维度不匹配)
Anthropic无公开 Embedding 接口,需用 OpenAI 兼容供应商
删除语义笔记进回收站只软删知识项,分块与向量保留,恢复后仍是已索引状态

性能相关

  • 状态统计在数据库侧聚合(按类型 GROUP BY、DISTINCT 计数、按知识项分组的分块摘要),不把全部向量元数据读进内存。
  • 页面只在「存在未索引项或有运行中任务」时轮询,状态接口带短时响应缓存。