TiDB 向量搜尋實戰:2026年用 TiDB 建構 AI 應用完全指南
分布式数据库
2026年,為什麼 TiDB 向量搜尋是 AI 應用的遊戲規則改變者
傳統 AI 應用架構有一個痛點:你需要一個關聯式資料庫存業務資料,還需要一個向量資料庫存 Embedding。兩套資料庫意味著資料同步、一致性維護、運維成本翻倍。
TiDB 8.0+ 引入的向量搜尋功能徹底改變了這個局面——一個資料庫同時支援 SQL 和向量搜尋。你可以在同一個查詢中同時做關聯式過濾和語意檢索,這就是 HTAP + Vector 的威力。
| 特性 | TiDB Vector | Milvus | Pinecone | Weaviate |
|---|---|---|---|---|
| SQL 支援 | 原生 | 無 | 無 | GraphQL |
| 向量搜尋 | 原生 | 原生 | 原生 | 原生 |
| 交易支援 | ACID | 有限 | 無 | 有限 |
| HTAP | 是 | 否 | 否 | 否 |
| 部署方式 | 自託管/雲 | 自託管/雲 | 僅雲 | 自託管/雲 |
| 混合查詢 | SQL+Vector | 標量過濾 | 元資料過濾 | GraphQL過濾 |
| 水平擴展 | 自動 | 手動 | 自動 | 手動 |
| 維度上限 | 16384 | 32768 | 2048 | 65535 |
| 索引類型 | HNSW | IVF/HNSW | 自動 | HNSW |
| 開源 | 是 | 是 | 否 | 是 |
TiDB 8.0+ 向量索引設定
pip install tidb-vector sqlalchemy pymysql
from sqlalchemy import create_engine, Column, Integer, String, Text
from sqlalchemy.orm import declarative_base, Session
from tidb_vector.sqlalchemy import VectorType
Base = declarative_base()
class Document(Base):
__tablename__ = "documents"
id = Column(Integer, primary_key=True)
content = Column(Text)
category = Column(String(50))
source = Column(String(100))
embedding = Column(VectorType(1536))
engine = create_engine("mysql+pymysql://root:@localhost:4000/testdb", echo=True)
Base.metadata.create_all(engine)
CREATE VECTOR INDEX idx_doc_embedding ON documents(embedding)
WITH METRIC = 'cosine', DIMENSION = 1536;
完整 Python 實作:插入、搜尋、混合查詢
import openai
from tidb_vector.sqlalchemy import vec_cosine_distance
client = openai.OpenAI(api_key="sk-xxx")
def get_embedding(text: str) -> list[float]:
response = client.embeddings.create(model="text-embedding-3-small", input=text)
return response.data[0].embedding
def vector_search(session, query: str, top_k: int = 10):
query_embedding = get_embedding(query)
results = session.query(
Document.id, Document.content, Document.category,
vec_cosine_distance(Document.embedding, query_embedding).label("distance")
).order_by("distance").limit(top_k).all()
return results
def hybrid_search(session, query: str, category: str = None, top_k: int = 10):
query_embedding = get_embedding(query)
q = session.query(
Document.id, Document.content, Document.category,
vec_cosine_distance(Document.embedding, query_embedding).label("distance")
)
if category:
q = q.filter(Document.category == category)
return q.order_by("distance").limit(top_k).all()
RAG 應用:用 TiDB 建構檢索增強生成
class TiDBRAG:
def __init__(self, engine, openai_api_key: str):
self.engine = engine
self.llm_client = openai.OpenAI(api_key=openai_api_key)
def retrieve(self, query: str, top_k: int = 5):
with Session(self.engine) as session:
return vector_search(session, query, top_k)
def generate(self, query: str, context: list) -> str:
context_text = "\n".join([f"[{c.category}] {c.content}" for c in context])
response = self.llm_client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": f"參考資料:\n{context_text}\n\n問題:{query}"}],
temperature=0.1
)
return response.choices[0].message.content
def query(self, question: str) -> str:
context = self.retrieve(question)
return self.generate(question, context)
5 個常見陷阱
1. 向量維度不匹配
Embedding 模型輸出的維度必須與表定義的維度一致。
2. 忽略索引建立
沒有向量索引時,搜尋退化為全表掃描。
3. 批量插入未最佳化
逐條插入效率極低,應使用批量操作。
4. 距離度量不一致
插入時和查詢時必須使用相同的距離度量。
5. 連線池未設定
高併發下,預設連線池會導致連線耗盡。
10 個錯誤排查
| # | 錯誤現象 | 可能原因 | 排查方法 |
|---|---|---|---|
| 1 | 維度不匹配錯誤 | Embedding維度與表定義不一致 | 檢查模型輸出維度和VectorType參數 |
| 2 | 搜尋結果為空 | 向量索引未建立 | SHOW INDEX FROM documents |
| 3 | 搜尋效能極慢 | 缺少向量索引 | 檢查HNSW索引是否存在 |
| 4 | 連線逾時 | 連線池耗盡 | 調整pool_size和max_overflow |
| 5 | 距離計算異常 | 度量不一致 | 確認索引和查詢使用同一度量 |
| 6 | 記憶體溢位 | 批量插入資料量過大 | 分批插入 |
| 7 | 精度不夠 | ef_search太小 | 增大ef_search值 |
| 8 | 插入失敗 | 向量包含NaN/Inf | 插入前檢查embedding有效性 |
| 9 | 混合查詢慢 | 關聯式過濾未走索引 | 為過濾列建立B-Tree索引 |
| 10 | 結果排序錯誤 | 距離和相似度混淆 | cosine距離越小越相似 |
效能調校建議
CREATE VECTOR INDEX idx_doc_embedding ON documents(embedding)
WITH METRIC = 'cosine', DIMENSION = 1536,
EF_CONSTRUCTION = 256, M = 16;
SET SESSION tidb_vector_ef_search = 128;
線上工具推薦
- JSON 格式化:/zh-TW/json/format
- Base64 編碼:/zh-TW/encode/base64
- 雜湊計算:/zh-TW/encode/hash
總結:TiDB 向量搜尋將 SQL 和向量檢索統一在一個資料庫中,是 2026 年建構 AI 應用的最佳選擇之一。它消除了關聯式資料庫和向量資料庫之間的資料同步痛點,支援 ACID 交易 + 語意檢索的混合查詢。
本站提供瀏覽器本地工具,免註冊即可試用 →
#TiDB#向量搜索#向量数据库#语义检索#HTAP#RAG#AI应用#Python