向量資料庫只回答一個問題,而且速度極快
給它一組數字,它就會回傳最接近的儲存列表。這就是它全部的功能。
這些列表就是嵌入向量。嵌入模型會把一段文字、一則商品描述或一張圖片,轉換成幾百到幾千個數字,並讓意義相近的內容彼此靠近,什麼是AI嵌入向量說明了具體做法。向量資料庫就是這些列表累積夠多之後存放的地方。它會為每個列表附上ID與一些中繼資料,建立索引,並回答最近鄰搜尋:「這是一個查詢向量,給我最接近的十個。」
困難的地方在於「快」這個字。把一個查詢向量拿去跟一百萬個各含1,536個數字的儲存向量比對,就是15億次乘法運算,而且每敲一個字就要做一次,根本無法擴展。所以向量資料庫會使用近似最近鄰索引,其中最常見的是HNSW,這是2016年Malkov與Yashunin論文提出的圖結構,只需檢視幾百個候選項目而不是全部一百萬個,而且幾乎每次都能給出正確答案。這個「幾乎」就是取捨:犧牲一點準確度,換來上千倍的速度提升。
既有的資料庫比對文字,向量資料庫比對意義
關聯式資料庫會找出值相符的資料列:WHERE customer_id = 4127。全文檢索索引會找出含有特定字詞的文件:退款 AND 政策。向量資料庫則會找出意義相近的項目:查詢「我要怎麼拿回我的錢」會回傳標題為「退貨與退款」的段落,即使兩者完全沒有共同的字詞。
| 關聯式資料庫 | 全文檢索 | 向量資料庫 | |
|---|---|---|---|
| 提問方式 | 哪些資料列符合這個值? | 哪些文件包含這些字詞? | 哪些項目的意義與這個相近? |
| 索引 | 欄位上的B樹 | 詞彙的反向索引 | 向量上的圖結構或分群(HNSW、IVF) |
| 精確嗎? | 是 | 是 | 通常是近似值 |
| 擅長 | ID、日期、金額、資料表關聯 | 名稱、代碼、精確詞組 | 同義詞、改寫、跨語言、圖片 |
| 不擅長 | 意義 | 意義 | 精確字串、計數、依數值篩選 |
| 範例 | Postgres、MySQL、SQLite | Elasticsearch、Lucene | Pinecone、Weaviate、Qdrant、Milvus、Chroma、pgvector |
最後一列顯示這個分類其實很模糊。pgvector為一般的Postgres加上向量欄位與HNSW索引,而Elasticsearch自2019年的7.0版起就有向量欄位,自2022年的8.0版起更有HNSW搜尋。「向量資料庫」往往是你已經在用的資料庫裡的一項功能,而不是全新的產品,獨立產品之間比拼的是規模與維運的成熟度,而不是做出Postgres做不到的事。
聊天文件功能其實就是「向量搜尋加上末端的模型」
檢索增強生成(什麼是RAG有詳細說明)包含搜尋和寫作兩個步驟。向量資料庫負責的就是搜尋這一步。
- 把每份文件切成幾百到一千個token的段落。
- 對每個段落做嵌入,並把向量連同段落原文與來源一起存進向量資料庫。
- 問題進來時,把問題做嵌入,再向資料庫查詢最接近的段落。
- 把這些段落連同問題交給語言模型,讓它寫出答案。
步驟1和2只在新增文件時發生一次,步驟3和4則每個問題都會發生一次。語言模型從來不會看到整個文件集,它看到的只是資料庫挑出來的五到十個段落。這就是為什麼答案的好壞完全取決於搜尋:如果最接近的向量是錯的段落,模型就會自信地答錯問題,而什麼是AI幻覺會把這種情況歸類為檢索失誤,而不是憑空捏造。
什麼時候該用它,什麼時候整份送進去反而更好
這是一個關於大小的判斷。模型一次只能考慮它的上下文視窗,而視窗裡的每個token每一輪都要付費。向量資料庫的用途就是只把相關的那一小段放到模型面前。對於一份裝得下的文件,檢索這一步是可以省略的;對於裝不下的文件集,它就是唯一的選擇。
以一份30萬token、幾百頁的報告來計算兩種設計的成本,假設問十個問題,每題檢索五段各1,000 token的段落。每次都送整份檔案是300萬個輸入token。每題檢索五段1,000 token的段落則是5萬個。以AI模型成本指數中的標價輸入費率為準(2026-08-20取自OpenRouter),每個模型的差距都是60倍。若供應商提供提示詞快取,重讀同一份檔案只收標價的十分之一到一半,差距就會縮小到約6倍至30倍。檢索仍然勝出,只是勝得沒那麼多。
當檔案的大小符合預算時,整份送進去的設計花這筆錢是有回報的:一份60頁、約4萬token的合約,能讓模型回答需要同時看整份文件的問題,例如「這裡有沒有跟第14條矛盾的地方」,這種問題檢索方式問不出來,因為它從來不會在同一批內容中同時看到第14條和那個矛盾之處。由此得出的原則是:一份文件,或少數幾份,整份送進去;一整座文件庫,則透過向量資料庫處理。介於兩者之間時,按主題拆分上傳的內容,讓模型拿到它需要的那個部分。
Whizi直接送出文字本身,單輪上限4萬個token
Whizi不會為你的聊天執行向量資料庫。當你附加一個檔案時,文件上傳功能會擷取文字,並以提示詞文字的形式送給模型,每輪固定上限為4萬個token;超出的上傳內容會被截斷,並附上提示訊息與訊息內的標記說明此事。專案檔案的運作方式相同:專案功能最多可固定10個檔案,每則訊息都會重新把文字組進提示詞,每個檔案上限3萬2千字元,整個專案區塊上限12萬字元。
這些上限就是這個設計的邊界。超過3萬2千字元的固定檔案會被截斷,超過單輪4萬token預算的附件會被裁切,而一個專案是資料夾,不是可搜尋的文件庫。這是刻意的取捨:對於裝得下單輪預算的合約或論文,讓文字直接在場勝過讓它被搜尋,而真正重要的檢驗方式,也就是要求模型引用它所使用的段落,之所以有效,正是因為那個段落確實在場。對於上千份文件,向量資料庫才是對的工具,聊天應用程式則不是。
這個機制帶來兩個延伸出來的習慣。附加多個檔案時,在問題裡點名要問的那份檔案,否則模型會自行默默選擇。而且對任何你會據以行動的答案,都要要求引用原文。檢索系統可能回傳錯誤的段落;整份送入的系統則可能憑記憶而非檔案本身作答。要求引用能同時抓出這兩種問題。
- 整份送出單一文件;把整個文件集放到向量資料庫後面
- 按主題拆分長篇上傳內容,讓模型拿到問題所需的那個部分
- 在依賴答案之前,先要求模型引用它所使用的段落
- ID、代碼和精確詞組用純文字搜尋;向量搜尋比對的是意義,不是字元
- 把檢索失誤當成搜尋問題處理:先用更好的模型或更小的段落重新嵌入,再考慮是不是寫作模型的問題
常見問題
用白話說,向量資料庫是什麼?
它是用來儲存AI模型拿來代表意義的數字列表的地方,設計目的就是快速找出最接近的項目。你給它一個問題的嵌入向量,它就會回傳意義相近的嵌入向量,以及背後對應的文字。每當文件集大到無法整份送出時,它就是聊天文件功能中負責搜尋的那一半。
用AI處理我的文件,一定需要向量資料庫嗎?
只有在文件裝不進模型的上下文視窗時才需要。單一份報告或合約可以整份送給模型,這正是Whizi處理附件與固定專案檔案的方式。上千份文件的文件庫則需要檢索,而檢索需要向量索引,不論是用專門的產品,還是像pgvector這樣的Postgres擴充套件。
向量資料庫和一般資料庫有什麼差別?
一般資料庫比對的是值:這個ID、這個日期、這個精確的字詞。向量資料庫比對的是意義,回傳嵌入向量與查詢最接近的儲存項目。它通常是近似值,使用像HNSW這樣的索引,只檢查幾百個候選項目而不是每一項,因此在一般資料庫擅長的精確比對上表現較差。
最常被使用的向量資料庫有哪些?
Pinecone、Weaviate、Qdrant、Milvus和Chroma是常見的獨立產品,pgvector則為Postgres加上相同的能力。Elasticsearch和OpenSearch也提供向量搜尋。選擇通常取決於維運面,也就是規模與代管方式,因為它們實作的都是同一套近似最近鄰的概念。
跟送整份檔案相比,檢索能省多少錢?
在Claude Sonnet 5上,對一份30萬token的報告問十個問題,如果每輪都送整份檔案要花$6.00,若改為檢索五段各1,000 token的段落則是$0.10,採用2026-08-20取自OpenRouter的標價費率計算。在GPT-5.6 Luna上,同樣的一組數字是$0.60對$0.01。因為兩種設計每個token收取的費率相同,所以每個模型上的比例都是60倍。