← 返回概念解读

Concept Fable精修版

Weaviate

Weaviate · Open-source vector database

先读故事。这里不急着给定义,先让问题自己长出来。

寓言故事

药店掌柜把药性、方子和禁忌放在同一张药斗上

老字号的药店有三套独立的检索整套装置:一套按药名查,一套按症状查,一套按方剂查。掌柜说分开管最清楚,配药师傅也习惯了。直到有个急症方子:'找和麻黄汤功效接近的方剂,但要排除含麻黄的药,适合三岁以上儿童,能用医保。'配药师傅先翻方剂柜,再翻药名柜查成分,再翻症状柜查禁忌,然后对着三摞纸手动交叉。

小徒弟写了一张对照表贴在墙上,列着'麻黄汤→近似方→减麻黄→加年龄→加医保'的查找路径。两个星期后这张表已经被画满了例外和箭头,比直接查还让人头晕。

有人提议把三套整套装置合并成一个大总账柜,所有属性写在同一行。合并后查询确实简单了,但新问题出现:有些药方是文字描述,有些是数字指标,有些是草药配伍图谱,全塞进固定列里很快就字段爆炸。

新来的配药总监换了一套路子。他把每个药方当作一个独立对象,上面同时挂着:一组描述密文用于相似度匹配,一组结构化属性用于精确筛选,一组关键词用于字面搜索,还留出空间挂自定义的问答对和摘要。

查询时,药房可以同时调用这三种方式:用文字描述找功效最接近的方子,用结构化字段筛掉禁忌和年龄,用关键词锁定'健脾''祛湿'这样的术语。三个信号加权融合,一次返回结果。

他还在数据机关上做了类定义:每一类都预先声明了属性类型和索引方式。'方剂'类有药材列表、功效向量、禁忌条件;'药材'类有性味归经向量、价格、库存。不同类之间可以关联引用。

后来药房又接入了外部数据源:医保目录、疫情通报、新药审批公告。每个数据源以相同的数据机关接入,药方对象自动继承新信息。

老掌柜终于承认:药方不是一堆独立字段的拼凑,它是一个有结构、有语义、可以同时从多种角度检索的完整物。

揭示

这个故事讲的是:Weaviate

Weaviate 是一个开源向量数据库,结合了向量搜索、结构化过滤、关键词搜索(BM25)和基于 schema 的对象存储。它的核心设计理念是'向量化一切':每个数据对象可以同时拥有向量、结构化属性和关键词倒排索引,查询时可以混合加权使用。Weaviate 支持 GraphQL 和 RESTful API、自动向量化(通过集成 embedding 模型)、多租户、模块化扩展(如 summarizer、QA、NER 等),以及 hybrid search 的原生实现。在企业 RAG 场景中,Weaviate 适合需要 schema 管理、混合搜索和多模态数据(文本、图片等)的统一检索平台。它的 GraphQL 接口对有复杂查询逻辑的应用特别友好。

它重要的地方在于:它不只是一个术语,而是在真实 AI / Agent 系统里会反复出现的结构性问题。理解它,才能判断什么时候该加模型,什么时候该改流程,什么时候该补治理。

隐喻映射

  • 三套独立检索系统:向量库、SQL 库和搜索引擎分离,查询要在应用层拼合
  • 墙上贴查找路径:应用层编排多数据源的硬编码逻辑,脆弱且难维护
  • 字段爆炸:将所有属性塞进扁平表,忽视不同数据类型需要不同的索引策略
  • 独立对象挂三种信息:Weaviate 的数据模型,向量 + 属性 + 关键词索引共存
  • 描述密文:向量 embedding,用于语义相似度
  • 结构化字段:用于精确过滤的标量属性(数字、日期、布尔、字符串等)
  • 三个信号加权融合:hybrid search 的 rank fusion,关键词 + 向量混合打分
  • 类定义和属性类型:Weaviate schema,预先声明数据结构和索引策略

Soloharness 判断

这个概念的实战价值,是帮你把“看起来聪明的 AI 功能”拆成可交付、可验收、可治理的工作单元。

vector databasehybrid searchGraphQLsemantic searchRAG