AI Agent与向量数据库:打造语义搜索引擎 📅 2026/7/1 12:52:40 AI Agentä¸åéæ°æ®åºï¼æé è¯ä¹æç´¢å¼æå¨ä¿¡æ¯çç¸çæ¶ä»£ï¼ä¼ ç»çå ³é®è¯æç´¢å·²é¾ä»¥æ»¡è¶³ç¨æ·å¯¹ç²¾åãè¯ä¹åä¿¡æ¯æ£ç´¢çéæ±ãAI Agentç»ååéæ°æ®åºææ¯ï¼æ£å¨éå¡æç´¢ä½éªçè¾¹çãæ¬æå°æ·±å ¥æ¢è®¨åéæ°æ®åºçæ ¸å¿åçãEmbedding模åçä½ç¨ãç¸ä¼¼åº¦æç´¢æºå¶ï¼ä»¥åå¦ä½å°è¿ä¸åéæå°AI Agentä¸ï¼æé ä¼ä¸çº§çè¯ä¹æç´¢å¼æãä¸ã为ä»ä¹éè¦åéæ°æ®åºä¼ ç»çå ³ç³»åæ°æ®åºæ é¿å¤çç»æåæ°æ®ç精确å¹é æ¥è¯¢ï¼ä¾å¦WHERE name å¼ ä¸ãä½å¨é¢å¯¹è¯ä¹ç¸ä¼¼è¿æ ·ç模ç³éæ±æ¶ï¼å®ä»¬æ¾å¾åä¸ä»å¿ãæ¯å¦ç¨æ·æç´¢å¦ä½å¦ä¹ æºå¨å¦ä¹ ï¼ä¼ ç»æç´¢åªè½å¹é å å«è¿äºå ³é®è¯çææ¡£ï¼èæ æ³çè§£å ¥é¨æç¨ãMLæåãæ·±åº¦å¦ä¹ åºç¡çè¯ä¹ç¸å ³ç表达ãåéæ°æ®åºçæ ¸å¿ææ³æ¯å°ææ¬ãå¾åãé³é¢çéç»æåæ°æ®ï¼éè¿Embedding模å转æ¢ä¸ºé«ç»´åéï¼éå¸¸æ¯æ°ç¾å°æ°åç»´çæµ®ç¹æ°ç»ï¼ï¼ç¶åå¨åé空é´ä¸åå¨åæ£ç´¢ãè¯ä¹ç¸è¿çå 容ï¼å ¶åéå¨ç©ºé´ä¸è·ç¦»ä¹æ´è¿ãè¿ç§ä»¥æææçè½åï¼æ£æ¯è¯ä¹æç´¢çåºç³ã常è§çåéæ°æ®åºå æ¬ï¼Milvusï¼å¼æºã髿§è½ï¼æ¯æå亿级åéæ£ç´¢ï¼éåå¤§è§æ¨¡ä¼ä¸çº§é¨ç½²Pineconeï¼å ¨æç®¡äºæå¡ï¼ä¸æç®åï¼éåå¿«éååéªè¯Chromaï¼è½»é级æ¬å°åéåºï¼éåå¼åæµè¯åå°ååºç¨FAISSï¼Facebook弿ºç髿ç¸ä¼¼åº¦æç´¢åºï¼æ§è½åè¶äºãEmbedding模åï¼è¯ä¹è½¬åçæ¡¥æ¢Embeddingæ¨¡åæ¯å°ææ¬æ å°å°åé空é´çå ³é®ãå®éè¿æ·±åº¦å¦ä¹ ï¼é常æ¯Transformeræ¶æï¼æè·ææ¬çè¯ä¹ä¿¡æ¯ï¼çæåºå®é¿åº¦çå¯éåé表示ã2.1 主æµEmbedding模åOpenAI text-embedding-ada-002ï¼1536ç»´åéï¼éç¨æ§å¼ºï¼ææç¨³å®BGE (BAAI General Embedding)ï¼ä¸æè¯ä¹çè§£ä¼ç§ï¼å¼æºå è´¹Sentence-BERTï¼åºäºåå¡ç»æçå¥åç¼ç 模åï¼éåè¯ä¹ç¸ä¼¼åº¦ä»»å¡E5 (Embeddings from bidirectional Encoder)ï¼å¾®è½¯å¼æºï¼æ¯æå¤è¯è¨2.2 åéè¡¨ç¤ºçæ¬è´¨ä¸æ®µææ¬ç»è¿Embedding模åç¼ç åï¼å¾å°ç±»ä¼¼è¿æ ·çåéï¼[0.023, -0.156, 0.789, ..., -0.034] # 1536ç»´æµ®ç¹æ°ç»åé空é´ä¸ï¼ä½å¼¦ç¸ä¼¼åº¦ææ¬§æ°è·ç¦»å¯ä»¥è¡¡éä¸¤ä¸ªææ¬çè¯ä¹å ³èç¨åº¦ãä¾å¦ï¼è¹ææ¯ççåæ°´æå³éå¾å¥½çåéè·ç¦»ï¼ä¼æ¯è¹ææ¯ççåè¹æå ¬å¸åå¸äºæ°iPhoneæ´è¿ãä¸ãç¸ä¼¼åº¦æç´¢åç3.1 è·ç¦»åº¦éæ¹æ³æå¸¸ç¨ç两ç§ç¸ä¼¼åº¦åº¦éæ¹å¼ï¼ä½å¼¦ç¸ä¼¼åº¦ï¼è¡¡é两个åé夹è§çä½å¼¦å¼ï¼å ³æ³¨æ¹åèéé¿åº¦ãimport numpy as np def cosine_similarity(a, b): return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)) vec1 np.array([0.1, 0.2, 0.3]) vec2 np.array([0.15, 0.25, 0.35]) print(cosine_similarity(vec1, vec2)) # è¾åºæ¥è¿1çæ°å¼ï¼è¡¨ç¤ºè¯ä¹ç¸ä¼¼æ¬§æ°è·ç¦»ï¼è¡¡éåé空é´ä¸çç´çº¿è·ç¦»ï¼è¶å°è¡¨ç¤ºè¶ç¸ä¼¼ã3.2 è¿ä¼¼æè¿é»æç´¢ï¼ANNï¼å½åéæ°éè¾¾å°ç¾ä¸çè³åäº¿çº§å«æ¶ï¼æ´å计ç®å ¨éåéçç¸ä¼¼åº¦å·²ä¸å¯è¡ãè¿ä¼¼æè¿é»ç®æ³éè¿çºç²æå°çç²¾åº¦æ¥æ¢åæ°éçº§çæ§è½æåï¼HNSWï¼Hierarchical Navigable Small Worldï¼ï¼å¾ç´¢å¼ç®æ³ï¼æå»ºå¤å±å¯¼èªå¾ï¼æç´¢æçé«IVFï¼Inverted File Indexï¼ï¼å°åé空é´åå为å¤ä¸ªèç±»ä¸å¿ï¼å å®ä½åéåºåå精确æç´¢PQï¼Product Quantizationï¼ï¼å°é«ç»´åéå缩为ä½ç»´è¡¨ç¤ºï¼å¤§å¹ åå°å åå ç¨FAISSåºæä¾äºè¿äºç®æ³çæçå®ç°ï¼æ¯å·¥ä¸ççé¦éæ¹æ¡ãåãAI Agentéæåéæ°æ®åºAI Agentéè¿éæåéæ°æ®åºï¼å¯ä»¥æå»ºå ·å¤é¿æè®°å¿åç¥è¯æ£ç´¢è½åçæºè½ç³»ç»ã以䏿¯ä¸ä¸ªå®æ´çéæç¤ºä¾ï¼ä½¿ç¨FAISSä½ä¸ºåéåå¨å¼æã4.1 ç¯å¢åå¤pip install faiss-cpu sentence-transformers numpy4.2 æ ¸å¿å®ç°ä»£ç import faiss import numpy as np from sentence_transformers import SentenceTransformer class SemanticSearchAgent: def __init__(self, embedding_modelBAAI/bge-large-zh-v1.5): # å è½½Embedding模å self.encoder SentenceTransformer(embedding_model) self.dim self.encoder.get_sentence_embedding_dimension() # åå§åFAIS