Symbolic Index for LLM Knowledge — 神经符号搜索架构。

用64位整数检索。不需要向量数据库、ANN图、嵌入模型。

GitHub 仓库

核心命题

搜索从来不是难题,而是无结构数据的症状。 在写入时赋予64位结构,症状就消失了。

results = index[(index & mask) == pattern]

在1.3GB内存中亚秒级检索维基数据1亿实体。 仅用Python(NumPy)就胜过优化的C++/Rust向量数据库——架构的胜利。

为什么不用向量嵌入

向量嵌入会碾碎结构。

"诸葛亮是三国时期蜀汉的丞相"
 → 人类立刻把握:中国人、军事家/政治家、3世纪

嵌入模型:
 [0.234, -0.891, 0.445, ..., 0.112] (384维 float)
 → 结构消失。无法判断是人物还是地点。

为了恢复被碾碎的结构:
 ANN图 (HNSW, IVF-PQ)、交叉编码器、重排器、元数据过滤器……

SILK保留结构。

SIDX: [Human / military / east_asia / ancient]
 → 结构保留在比特中。可读。
 → 无需恢复。因为从未碾碎过。

关键在于顺序的反转。

传统方式:先写入 → 后结构化(索引)
SILK:    写入时结构化 → 检索免费

SIDX 比特布局

SIDX遵循GEUL语法 Entity Node规范。

[prefix 7 | mode 3 | entity_type 6 | attrs 48]
 MSB(63)                                  LSB(0)
字段比特宽度说明
prefix63-577GEUL协议头(0001001固定,检索时忽略)
mode56-543量化/数模式(注册实体=0,定冠、普遍、存在等8种)
entity_type53-48664个顶级类型(Human=0 ~ Election=62,未分类=63)
attrs47-048按类型的属性编码(由码本定义)

检索目标:entity_type 6位 + attrs 48位 = 54位。 QID不包含在SIDX中,存储在单独的数组中。

attrs 48位 — 按类型模式

Human(0):       subclass 5 | occupation 6 | country 8 | era 4 | decade 4 | gender 2 | notability 3 | ...
Star(12):       constellation 7 | spectral_type 4 | luminosity 3 | magnitude 4 | ra_zone 4 | dec_zone 4 | ...
Settlement(28): country 8 | admin_level 4 | admin_code 8 | lat_zone 4 | lon_zone 4 | population 4 | ...
Organization(44): country 8 | org_type 4 | legal_form 6 | industry 8 | era 4 | size 4 | ...
Film(51):       country 8 | year 7 | genre 6 | language 8 | color 2 | duration 4 | ...

目前5个类型已定义属性比特布局。其余仅编码entity_type。

架构

SILK有两条流水线:编码(写入时)和检索(查询时)。 两者遵循同一原理:符号掌控结构,LLM处理语义。

编码流水线(写入时)
┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│  LLM 标注    │──►│  VALID 验证  │──►│  码本编码    │
│  文档 → JSON │   │  码本有效值  │   │ JSON → SIDX  │
│  (语义分类)│   │  一致性检查  │   │(比特组装)  │
│              │   │  幻觉 → 丢弃│   │              │
└──────────────┘   └──────────────┘   └──────────────┘
   LLM标注          代码验证          基于码本编码
检索流水线(查询时)
┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│  查询解析    │──►│比特 AND 过滤 │──►│  LLM 判定    │
│  码本查找    │   │  NumPy SIMD  │   │ 少量候选     │
│  + LLM辅助   │   │1亿条 → 数十条│   │数十条 → 答案 │
└──────────────┘   └──────────────┘   └──────────────┘
   语义提取          广泛过滤          精准判定

核心策略:SIDX比特AND不遗漏地广泛过滤,然后LLM只判定少量候选

各司其职:
 人类:结构设计(码本)
 LLM: 语义分类(标注)+ 语义判定(检索)
 代码:规则验证(VALID)+ 比特组装
 CPU: 大量比较(NumPy SIMD)

编码:LLM标注 → VALID验证

LLM读取文档并标注为JSON。VALID按码本执行机械检查。 不在码本中的值、类型间一致性违反、约束违反在物理上无法进入索引

LLM标注:{"type": "Human", "occupation": "military", "country": "korea"}
VALID:  occupation="military" ∈ 码本? ✓  country="korea" ∈ 码本? ✓
         Human却有constellation字段? ✗ 丢弃
编码:   从码本查找 "military"→6位, "korea"→8位 → 比特组装 → SIDX uint64

LLM可能产生幻觉。但VALID充当守门人,索引污染概率为零。 只有通过VALID的JSON才会经码本编码为SIDX 64位整数。

检索:广泛过滤,LLM精准判定

1. 查询语义提取     码本查找 80% / LLM辅助 20%
2. 位掩码组装       确定性 — 算法
3. NumPy比特AND    确定性 — 1亿条全量扫描 20ms
4. LLM最终判定     仅少量候选 — 语义精准判定

80%的检索是结构化查询

"诸葛亮"         → Q181871 精确匹配。比特AND。完成。
"华为新闻"       → org/company + doc_meta/news。比特AND。完成。
"拜登-习近平会晤" → Q6279 ∩ Q15031 ∩ meeting。交集。完成。
结构化查询(80%):SILK比特AND完结。无需LLM。
语义查询 (15%):SILK缩小候选 → LLM判定5-10条。
生成查询 (5%): SILK定位文档 → LLM生成。

Multi-SIDX

一个文档/事件可以携带多个SIDX。

新闻报道"华为·英伟达·比亚迪高管会面":

SIDX[0]: [Human / business / east_asia ]  任正非
SIDX[1]: [Org   / company / east_asia ]  华为
SIDX[2]: [Human / business / n_america]  黄仁勋
SIDX[3]: [Org   / company / n_america]  英伟达
SIDX[4]: [Human / business / east_asia ]  王传福
SIDX[5]: [Org   / company / east_asia ]  比亚迪
SIDX[6]: [Event / meeting / east_asia ]  会面

全部是相同的64位SIDX。相同的索引。相同的比特AND检索。 entity_type字段区分实体(Human, Org)和事件(Event)。

索引结构

sidx_array = np.array([...], dtype=np.uint64)  # 108.8M × 8B = 870MB
qid_array  = np.array([...], dtype=np.uint32)  # 108.8M × 4B = 435MB
# 总计 ~1.3GB 内存
索引构建:
 Elasticsearch:分词 → 分析 → 倒排索引 → 段合并
 Pinecone:     嵌入 → HNSW图 → 聚类
 SILK:         sort

无需数据结构。只有一个排序数组。

向量数据库对比

SILK向量数据库
索引大小(1万亿条)12TB1.5PB(125倍)
索引构建sortHNSW 数天
冷启动打开文件即可构建图 数小时
分区扫描可以(结果相同)不可能(图断裂)
复合条件交集(精确)压缩为1个向量(近似)
结果精确(集合运算)近似(相似度排名)
可审计性JSON(白盒)不可能(黑盒)
比特AND与顺序无关、无状态、可合并。
向量数据库:整个图必须在内存中。分区 = 破坏。
SILK:     任意切割仍可工作。分区 = 变慢而已。结果相同。

审计流水线

向量嵌入是黑盒,无法审计。SIDX是JSON,完全可审计。

第1阶段 — 小型LLM标注    Llama 8B / GPT-4o-mini。准确率85-90%。
第2阶段 — VALID机械检查   有效值、一致性、约束。成本 $0。
第3阶段 — 大型LLM审计     仅confidence=low。准确率99%+。

VALID是守门人:码本有效值之外的幻觉在物理上无法进入索引。

许可证

MIT — GitHub