AI Agent与向量数据库:打造语义搜索引擎

AI Agent与向量数据库:打造语义搜索引擎

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 numpy

4.2 æ ¸å¿ƒå®žçŽ°ä»£ç 

import faiss import numpy as np from sentence_transformers import SentenceTransformer class SemanticSearchAgent: def __init__(self, embedding_model='BAAI/bge-large-zh-v1.5'): # åŠ è½½Embedding模型 self.encoder = SentenceTransformer(embedding_model) self.dim = self.encoder.get_sentence_embedding_dimension() # 初始化FAIS