程式設計基礎篇 · 大模型肚子裡的資料結構

向量:RAG 檢索是在「找最近的鄰居」

學 RAG 時我們說過:Embedding 把一段話變成一串數字。這串數字到底是什麼?答案簡單得出奇——是座標。給每句話發一個「語義地圖」上的位置,意思越近、位置越近。於是「檢索資料」這件事,就變成了小學生都會的遊戲:在地圖上找離你最近的鄰居

先玩地圖 · 語義相近 = 座標相鄰

下面是一張迷你語義地圖:12 個詞已經被 Embedding 安排好了座位,自然聚成三個「街區」。拖動黑色的 ❓ 查詢點(或點選地圖任意位置放置它),留意:連線永遠指向最近的 3 個詞,距離即時變化,最近的那個戴 👑。把 ❓ 拖到兩個街區中間,看看鄰居怎麼換人。

試試把 ❓ 拖進「美食街區」,再拖去「科技街區」。
這就是 RAG 檢索的全部原理。你的知識庫裡每段資料都被 Embedding 發了一個座標(真實世界是 1536 維,不止 2 維,但道理一樣);你提問時,問題也被發一個座標;然後找離問題最近的幾段資料,塞進上下文交給大模型。「語義搜尋比關鍵詞搜尋聰明」的秘密,就是「奶茶」和「楊枝甘露」雖然一個字都不重疊,座標卻挨得很近。
再看速度 · 挨個算 vs 修高速公路

找最近的鄰居,最笨的辦法是把每個點都量一遍距離。60 個點無所謂,可 RAG 知識庫動輒百萬段、推薦系統動輒十億條。下面同一張地圖撒了 60 個點,🌟 是你的查詢。先點「挨個算」數一數要幾步,再點「HNSW 分層跳」對比——留意藍色跳躍線是怎麼「先大跳、再小跳」的。

🐢 挨個算(暴力遍歷)
次距離計算
🚀 HNSW 分層跳
次距離計算
HNSW 的直覺:先修高速公路。除了底層的完整地圖,再多存幾層越來越稀疏的「捷徑圖」——查詢時從最稀疏的高層出發,幾大步鎖定大區,逐層下降、越跳越細。又是一次空間換時間
60 個點是 60 次 vs 8 次,資料到億級就是「等幾分鐘」和「毫秒」的區別。暴力遍歷的次數跟著資料量一比一地漲;HNSW 每層跳幾步就能砍掉一大片搜尋範圍,億級向量也只要幾十步。向量資料庫(Milvus、Pinecone、FAISS 這些名字你遲早會遇到)賣的核心本事,就是把這幾層「捷徑圖」建好、維護好。
這和 AI 有什麼關係?
📚

RAG 檢索

問題和資料都變座標,找最近的幾段資料塞給大模型——你每天用的「基於知識庫回答」,底層就是本頁這兩個動畫。

🖼

以圖搜圖

圖片也能 Embedding 成座標。拍張沙發照片搜同款,就是在幾億張圖的語義地圖上找你照片的鄰居

🎯

猜你喜歡

你的口味是一個座標,每首歌每部劇也是。推薦系統天天在做的事:找離你最近的那批內容,端上來。

✅ 這一課想和你分享的