【AI大模型开发】-基于FAISS的语义搜索系统(实战)

向量数据库实战:基于FAISS的语义搜索系统

一、项目概述

1.1 什么是向量数据库?

向量数据库是一种专门用于存储、索引和检索高维向量数据的数据库系统。在AI领域,向量通常是指通过预训练模型(如Transformer)将文本、图像等非结构化数据转换而成的数值表示(Embedding)。

1.2 项目背景

本项目展示了如何使用阿里云百炼Embedding API生成文本向量,并结合FAISS(Facebook AI Similarity Search)构建一个简单但功能完整的语义搜索系统。

1.3 技术栈

  • Python 3.11+:主要开发语言
  • 阿里云百炼Embedding API:生成文本向量
  • FAISS:向量相似度搜索引擎
  • NumPy:数值计算库

二、环境配置

2.1 安装依赖

项目所需依赖已在requirements.txt文件中列出:

faiss_cpu==1.7.4
openai>=1.0.0
numpy<2

使用以下命令安装依赖: ```bash pip install -r requirements.txt

2.2 配置API密钥

项目使用阿里云百炼Embedding API,需要配置API密钥:

  1. 在阿里云控制台获取API密钥(DASHSCOPE_API_KEY)
  2. 设置环境变量:
    • Windows:
      setx DASHSCOPE_API_KEY "your-api-key"
    • Linux/Mac:
      exportDASHSCOPE_API_KEY="your-api-key"

三、项目结构解析

项目包含两个核心Python脚本和一个依赖文件:

CASE-向量数据库/ ├── 1-embedding计算.py # 基础的向量生成示例 ├── 2-embedding-faiss-元数据.py # 完整的向量数据库搜索系统 └── requirements.txt # 项目依赖

四、核心功能实现

4.1 基础向量生成(1-embedding计算.py)

这个脚本展示了如何使用阿里云百炼API生成文本向量:

importosfromopenaiimportOpenAI# 初始化OpenAI客户端(兼容模式)client=OpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 生成向量completion=client.embeddings.create(model="text-embedding-v4",input='我想知道迪士尼的退票政策',dimensions=1024,# 指定向量维度encoding_format="float")# 输出结果print(completion.model_dump_json())

关键参数说明:

  • model:使用的向量模型,这里是text-embedding-v4
  • input:要生成向量的文本内容
  • dimensions:生成向量的维度,设置为1024
  • encoding_format:输出格式,这里使用float格式

4.2 完整向量搜索系统(2-embedding-faiss-元数据.py)

这个脚本实现了一个完整的语义搜索系统,包含向量生成、FAISS索引构建和相似度搜索功能:

4.2.1 系统架构
文本数据 → Embedding生成 → 向量存储(FAISS索引) ↓ 查询文本 → Embedding生成 → 向量相似度搜索 → 返回结果
4.2.2 核心功能模块

1. 初始化API客户端

try:client=OpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")exceptExceptionase:print("初始化OpenAI客户端失败,请检查环境变量'DASHSCOPE_API_KEY'是否已设置。")print(f"错误信息:{e}")exit()

2. 数据准备

documents=[{"id":"doc1","text":"迪士尼乐园的门票一经售出,原则上不予退换。但在特殊情况下,如恶劣天气导致园区关闭,可在官方指引下进行改期或退款。","metadata":{"source":"official_faq_v1.pdf","category":"退票政策","author":"Admin"}},# 更多文档...]

3. 向量生成与存储

metadata_store=[]vectors_list=[]vector_ids=[]fori,docinenumerate(documents):try:# 调用API生成向量completion=client.embeddings.create(model="text-embedding-v4",input=doc["text"],dimensions=1024,encoding_format="float")# 获取向量vector=completion.data[0].embedding vectors_list.append(vector)# 存储元数据metadata_store.append(doc)vector_ids.append(i)print(f" - 已处理文档{i+1}/{len(documents)}")exceptExceptionase:print(f"处理文档 '{doc['id']}' 时出错:{e}")continue# 转换为FAISS所需的NumPy格式vectors_np=np.array(vectors_list).astype('float32')vector_ids_np=np.array(vector_ids)

4. 构建FAISS索引

dimension=1024# 向量维度# 创建基础索引index_flat_l2=faiss.IndexFlatL2(dimension)# 使用IndexIDMap包装,支持自定义IDindex=faiss.IndexIDMap(index_flat_l2)# 添加向量和ID到索引index.add_with_ids(vectors_np,vector_ids_np)

5. 语义搜索

query_text="我想了解一下迪士尼门票的退款流程"# 生成查询向量query_completion=client.embeddings.create(model="text-embedding-v4",input=query_text,dimensions=1024,encoding_format="float")query_vector=np.array([query_completion.data[0].embedding]).astype('float32')# 搜索相似向量k=3# 返回前3个结果distances,retrieved_ids=index.search(query_vector,k)# 展示结果print("\n--- 搜索结果 ---")foriinrange(k):doc_id=retrieved_ids[0][i]retrieved_doc=metadata_store[doc_id]print(f"\n--- 排名{i+1}(相似度得分/距离:{distances[0][i]:.4f}) ---")print(f"ID:{doc_id}")print(f"原始文本:{retrieved_doc['text']}")print(f"元数据:{retrieved_doc['metadata']}")

五、运行示例

5.1 运行基础向量生成

python1-embedding计算.py

输出结果示例:

{"data":[{"embedding":[0.0123,-0.0456,...],"index":0,"object":"embedding"}],"model":"text-embedding-v4","object":"list","usage":{"prompt_tokens":12,"total_tokens":12}}

5.2 运行语义搜索系统

python2-embedding-faiss-元数据.py

输出结果示例:

正在为文档生成向量... - 已处理文档 1/4 - 已处理文档 2/4 - 已处理文档 3/4 - 已处理文档 4/4 FAISS 索引已成功创建,共包含 4 个向量。 正在为查询文本生成向量: '我想了解一下迪士尼门票的退款流程' --- 搜索结果 --- --- 排名 1 (相似度得分/距离: 0.3222) --- ID: 2 原始文本: 对于在线购买的迪士尼门票,如果需要退票,必须在票面日期前48小时通过原购买渠道提交申请,并可能收取手续费。 元数据: {'source': 'online_policy.html', 'category': '退票政策', 'author': 'E-commerceTeam'} --- 排名 2 (相似度得分/距离: 0.3312) --- ID: 0 原始文本: 迪士尼乐园的门票一经售出,原则上不予退换。但在特殊情况下,如恶劣天气导致园区关闭,可在官方指引下进行改期或退款。 元数据: {'source': 'official_faq_v1.pdf', 'category': '退票政策', 'author': 'Admin'}

六、常见问题与解决方案

6.1 NumPy版本不兼容问题

问题描述

A module that was compiled using NumPy 1.x cannot be run in NumPy 2.4.0 as it may crash.

解决方案

pipinstallnumpy<2

6.2 API密钥配置问题

问题描述

初始化OpenAI客户端失败,请检查环境变量'DASHSCOPE_API_KEY'是否已设置。

解决方案

  1. 检查API密钥是否正确获取
  2. 确保环境变量已正确设置
  3. 或直接在代码中硬编码API密钥(不推荐用于生产环境)

6.3 FAISS安装问题

问题描述

ERROR: Could not find a version that satisfies the requirement faiss_cpu

解决方案

pipinstallfaiss-cpu

七、项目扩展建议

7.1 功能扩展

  1. 批量处理:优化代码以支持大规模文档的批量处理
  2. 索引持久化:将FAISS索引保存到磁盘,避免每次重启重新构建
  3. 多模态支持:扩展支持图像、音频等其他模态的数据
  4. 实时更新:实现向量索引的实时更新和增量添加

7.2 性能优化

  1. 使用GPU加速:安装faiss-gpu版本,利用GPU加速向量搜索
  2. 索引类型选择:根据数据规模选择合适的FAISS索引类型(如IVF、HNSW等)
  3. 向量压缩:使用量化技术减小向量存储空间和加速搜索

八、总结

本项目展示了如何使用现代AI技术构建一个简单但功能完整的语义搜索系统。通过阿里云百炼Embedding API生成文本向量,结合FAISS实现高效的相似度搜索,我们可以轻松构建智能问答、文档检索等应用。

这个项目适合作为向量数据库和语义搜索领域的入门实战案例,通过学习和扩展,可以构建更复杂、更实用的AI应用系统。


关注作者:持续更新AI技术实战教程,分享最新技术动态和项目经验!

如果觉得有帮助,请点赞、收藏并关注,您的支持是我创作的最大动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1174057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年12月GESP真题及题解(C++八级): 排队

2024年12月GESP真题及题解(C八级): 排队 题目描述 小杨所在班级共有 nnn 位同学&#xff0c;依次以 1,2,…,n1,2,\dots,n1,2,…,n 标号。这 nnn 位同学想排成一行队伍&#xff0c;其中有些同学之间关系非常好&#xff0c;在队伍里需要排在相邻的位置。具体来说&#xff0c;有 …

2024年12月GESP真题及题解(C++八级): 树上移动

2024年12月GESP真题及题解(C八级): 树上移动 题目描述 小杨有一棵包含 nnn 个节点的树&#xff0c;其中节点的编号从 111 到 nnn&#xff0c;每个节点的颜色要么是白色要么是黑色&#xff0c;小杨可以任意选择节点 sss 和节点 ttt 并从节点 sss 出发移动到节点 ttt&#xff0c…

基于STM32单片机智能环境监控温湿度CO2光照PM2.5无线设计26-029

26-029、STM32智能环境监控系统设计-TFT1.44-PM2.5-CO2-BH1750-DHT11-WIFI-风扇本设计由STM32F103C8T6单片机核心板电路TFT1.44寸液晶电路PM2.5传感器电路CO2传感器电路BH1750光照检测电路DHT11温湿度传感器电路2路风扇电路WiFi-ESP8266模块电路电源电路组成。1、TFT1.44寸液晶…

基于STM32单片机智能炉温温度PID控制系统设计DIY21-615

本设计由STM32F103C8T6单片机核心板电路DS18B20防水型温度检测电路LCD1602液晶显示电路按键电路AO4405-MOS管驱动发热电阻电路组成。1、LCD1602液晶实时显示温度和温度阈值。2、如果当前温度低于温度阈值&#xff0c;则发热电阻启动加热&#xff0c;否则发热电阻断开&#xff0…

深度测评MBA必备AI论文网站TOP10:开题报告与文献综述全解析

深度测评MBA必备AI论文网站TOP10&#xff1a;开题报告与文献综述全解析 2026年MBA学术写作工具测评&#xff1a;为何需要一份权威榜单 随着AI技术在学术领域的深入应用&#xff0c;越来越多的MBA学生开始依赖智能写作工具提升论文效率。然而&#xff0c;面对市场上琳琅满目的平…

基于STM32单片机共享无线充电锂电池充电宝系统设计DIY21-640

本系统由STM32F103C8T6单片机核心板、继电器控制、蓝牙控制及电源组成。1、手机连接蓝牙设备。2、设备上贴有二维码&#xff0c;通过手机可以扫描&#xff0c;如果二维码解析正确&#xff0c;可以控制打开共享设备的继电器。3、如果使用完需要关闭设备开关&#xff08;即继电器…

LangGraph 科技详解:基于图结构的 AI 工作流与多智能体编排框架

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026-2040 年度贾子智慧 AI 战略落地任务分解表

2026-2040年贾子智慧AI战略落地任务分解&#xff1a;从技术突破到全球引领的十五年实施路径摘要&#xff1a; 本文档系统分解了2026至2040年基于贾子智慧“本质智能引领”原则的国家AI战略落地任务。规划分为三个阶段&#xff1a;深化突破期&#xff08;2026-2030&#xff09;&…

Agent设计模式学习(基于langchain4j实现)(4) - 并行工作流

书接上回,现在简历已经润色得足够好了,投递到了HR手上,假设跟候选人也做了初步的电话沟通。接下来,公司需要对候选人做如下审查:经理:针对简历,结合招聘岗位要求,审查简历是否符合要求(包括优点和不足) HR:…

达梦数据库部署安装故障一

你执行 disql 登录达梦数据库时出现 [-70028]:创建SOCKET连接失败 报错&#xff0c;核心原因是 达梦数据库实例&#xff08;dmserver&#xff09;尚未启动&#xff0c;或实例未正常监听 5236 端口&#xff0c;导致 disql 无法建立 Socket 连接&#xff0c;具体分析和解决方案如…

大庆市萨尔图龙凤让胡路红岗大同英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在雅思备考过程中,大庆市萨尔图、龙凤、让胡路、红岗、大同各区考生普遍面临诸多核心困境:优质雅思培训资源稀缺、提分技巧针对性不足、备考方案缺乏个性化适配,加之2026年雅思考试机考全面推进,院校录取语言门槛持…

大庆市林甸肇源肇州杜尔伯特英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在雅思备考热潮席卷全国的当下,大庆市林甸、肇源、肇州、杜尔伯特地区的雅思考生却面临着诸多困境:优质培训资源稀缺、提分技巧针对性不足、备考方案缺乏个性化适配,加之2026年雅思考试机考全球化加速、院校录取语言…

讲讲浩明饮品是否可靠,排名情况深度剖析 - 工业品牌热点

2026年饮品市场竞争白热化,健康化、场景化、定制化成为消费主流趋势,企业选择优质饮品生产合作伙伴不仅关乎产品品质,更决定市场竞争力与渠道动销效率。当前市场中,部分代工工厂存在生产线老旧、品控不稳定、定制化…

深度测评8个AI论文软件,专科生轻松搞定毕业论文!

深度测评8个AI论文软件&#xff0c;专科生轻松搞定毕业论文&#xff01; 从焦虑到从容&#xff0c;你只需迈出第一步 千笔AI(官网直达) 对于专科生来说&#xff0c;写论文从来不是一件轻松的事。时间紧、任务重、资料难找、思路混乱&#xff0c;这些痛点在每一个毕业季都会反复…

2026 出国英语雅思培训一对一辅导机构哪家好?权威口碑排名 + 提分效果深度解析 - 老周说教育

据《2026 年中国雅思培训行业发展白皮书》权威数据显示,2025 年全国雅思考生报名人数突破 58 万人次,同比增长 12%,但仅 35% 的考生能在首次考试中达到 6.5 + 目标分数。从北京朝阳区到上海静安区,从广州天河区到成…

2026 全国英语雅思培训辅导机构排行榜:权威深度测评,靠谱机构高性价比推荐​ - 老周说教育

从新手考生到高分冲刺者,从在职人士到留学迷茫党,全国数百万雅思考生正面临着选课难、提分慢、技巧缺失的核心痛点。据 IDP 教育集团《2025 全球雅思考试趋势报告》显示,85% 的考生因缺乏权威测评和个性化方案,陷入…

【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机

【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机我的主页&#xff1a; 寻星探路 个人专栏&#xff1a; 《JAVA&#xff08;SE&#xff09;----如此简单&#xff01;&#xff01;&#xff01; 》 《从青铜到王者&#xff0c;就差这讲数据结构&#xff01;&…

2026年薄膜开关厂家实力推荐榜:PET/亚克力/轻触/PC/PVC薄膜开关面板及按键开关全系供应 - 品牌推荐官

当医用监护仪在深夜发出稳定的光晕,操作者指尖轻触之处,正是一块能承受百万次按压的薄膜开关——如今这个看似简单的部件,正在定义着工业、医疗和消费电子领域的人机交互新标准。全球薄膜开关市场正在经历稳健增长,…

英语广州英语雅思培训教育机构哪里最好?2026 高分考生首选榜单,个性化方案推荐 - 老周说教育

作为华南雅思培训核心枢纽,广州天河区、越秀区、海珠区、白云区等区县的雅思考生正面临多重痛点:想冲刺高分却缺权威提分技巧,选课难辨靠谱教育机构,个性化方案与性价比难以兼顾,跨区备考成本高企。据 2025 年中国…

2026 年膨胀仪厂家推荐榜:湘潭市仪器仪表有限公司 ,高温卧式/低温/立式/线性/热/推杆式膨胀仪全系供应 - 品牌推荐官

在材料检测领域,膨胀仪作为关键设备,广泛应用于金属、陶瓷、高分子等材料的热膨胀系数测定。随着工业技术升级,市场对膨胀仪的精度、稳定性及功能多样性提出更高要求。湘潭市仪器仪表有限公司凭借深厚的技术积累与持…