Embedding模型和向量数据库的使用
一、知识储备Embedding、LLM、向量数据库、RAG的区别Embedding 模型把文本转换成向量 一串数字像 text-embedding-v4、BGE-M3大语言模型 (LLM) 理解并生成文本、人类可读的文字像 GPT、Qwen、Claude向量数据库存储高维向量数据适合非结构化数据。向量存储把 Embedding 模型生成的向量存起来。创建向量索引为了在海量数据中找得快数据库会提前把向量建立成特殊的数学结构比如树形结构、图结构等。相似性搜索核心注意向量数据库才是相似性搜索Embedding模型只是把东西转成向量。RAG Embedding 检索 Text Splitter切分器 LLM生成注意Embedding不做切分切分由RAG的Text Splitter切分器做。二、Embedding计算将一段文本如 我想知道迪士尼的退票政策通过 AI 模型转换成一组数字向量这个向量可以用来衡量文本之间的语义相似度。因为要调用连接阿里云百炼服务的 SDK工具包所以要openai。pip install openaiimport os from openai import OpenAI client OpenAI( api_key你的API, # 你访问阿里云服务的钥匙 base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1 # 阿里云服务的地址 ) completion client.embeddings.create( modeltext-embedding-v4, #model 选择阿里云提供的翻译员Embedding 模型 input我想知道迪士尼的退票政策, #input 你要转换成数字的那句话 dimensions1024, # 指定向量维度数字越多描述越精确 encoding_formatfloat ) print(completion.model_dump_json())输入我想知道迪士尼的退票政策↓这段代码调用阿里云服务↓输出[0.123, -0.456, 0.789, ...] (1024个小数)三、向量数据库FAISS的使用存储向量和向量的相似检索此代码实现了一个智能搜索功能把文档存入数据库用户提问后自动找到最相关的文档并返回。准备文档 → 转换成向量 → 存入数据库 → 用户提问 → 返回最相关的文档第一步准备钥匙第二步准备文档第三步把文档变成数字第四步把向量存入 FAISS 数据库第五步用户提问搜索最相关的文档import os import numpy as np import faiss from openai import OpenAI # Step1. 初始化 API 客户端 try: client OpenAI( api_key你的key, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1 ) except Exception as e: print(初始化OpenAI客户端失败请检查环境变量DASHSCOPE_API_KEY是否已设置。) print(f错误信息: {e}) exit() # Step2. 准备示例文本和元数据 # 在实际应用中这些数据可能来自数据库、文件等 documents [ { id: doc1, text: 迪士尼乐园的门票一经售出原则上不予退换。但在特殊情况下如恶劣天气导致园区关闭可在官方指引下进行改期或退款。, metadata: {source: official_faq_v1.pdf, category: 退票政策, author: Admin} }, { id: doc2, text: 购买“奇妙年卡”的用户可以享受一年内多次入园的特权并且在餐饮和购物时有折扣。, metadata: {source: annual_pass_rules.docx, category: 会员权益, author: MarketingDept} }, { id: doc3, text: 对于在线购买的迪士尼门票如果需要退票必须在票面日期前48小时通过原购买渠道提交申请并可能收取手续费。, metadata: {source: online_policy.html, category: 退票政策, author: E-commerceTeam} }, { id: doc4, text: 园区内的“加勒比海盗”项目因年度维护将于下周暂停开放。, metadata: {source: maintenance_notice.txt, category: 园区公告, author: OpsDept} } ] # Step3. 创建元数据存储和向量列表 # 我们使用一个简单的列表来存储元数据。列表的索引将作为FAISS的ID。 # 这种方式简单直接适用于中小型数据集。 # 对于大型数据集可以考虑使用字典或数据库如Redis, SQLite metadata_store [] #保存原始文档内容和标签 vectors_list [] #保存 Embedding 模型生成的向量 vector_ids [] #建立向量和元数据之间的关联 print(正在为文档生成向量...) for i, doc in enumerate(documents): try: # 调用API生成向量 completion client.embeddings.create( modeltext-embedding-v4, inputdoc[text], dimensions1024, encoding_formatfloat ) # 获取向量 vector completion.data[0].embedding vectors_list.append(vector) # 存储元数据并使用列表索引作为唯一ID metadata_store.append(doc) vector_ids.append(i) # 自定义ID与列表索引一致 print(f - 已处理文档 {i1}/{len(documents)}) except Exception as e: print(f处理文档 {doc[id]} 时出错: {e}) continue # 将向量列表转换为NumPy数组FAISS需要这种格式 vectors_np np.array(vectors_list).astype(float32) vector_ids_np np.array(vector_ids) # Step4. 构建并填充 FAISS 索引 dimension 1024 # 向量维度 k 2 # 查找最近的3个邻居 # 创建一个基础的L2距离索引 index_flat_l2 faiss.IndexFlatL2(dimension) # 使用IndexIDMap来包装基础索引能够映射我们自定义的ID # 这就是关联向量和元数据的关键 index faiss.IndexIDMap(index_flat_l2) # 将向量和它们对应的ID添加到索引中 index.add_with_ids(vectors_np, vector_ids_np) print(f\nFAISS 索引已成功创建共包含 {index.ntotal} 个向量。) # Step5. 执行搜索并检索元数据 query_text 我想了解一下迪士尼门票的退款流程 print(f\n正在为查询文本生成向量: {query_text}) try: # 为查询文本生成向量 query_completion client.embeddings.create( modeltext-embedding-v4, inputquery_text, dimensions1024, encoding_formatfloat ) query_vector np.array([query_completion.data[0].embedding]).astype(float32) # 在FAISS索引中执行搜索 # search方法返回两个NumPy数组 # D: 距离 (distances) # I: 索引/ID (indices/IDs) distances, retrieved_ids index.search(query_vector, k) # Step6. 展示结果 print(\n--- 搜索结果 ---) # retrieved_ids[0] 包含与查询最相似的k个向量的ID for i in range(k): doc_id retrieved_ids[0][i] # 检查ID是否有效 if doc_id -1: print(f\n排名 {i1}: 未找到更多结果。) continue # 使用ID从我们的元数据存储中检索信息 retrieved_doc metadata_store[doc_id] print(f\n--- 排名 {i1} (相似度得分/距离: {distances[0][i]:.4f}) ---) print(fID: {doc_id}) print(f原始文本: {retrieved_doc[text]}) print(f元数据: {retrieved_doc[metadata]}) except Exception as e: print(f执行搜索时发生错误: {e})

相关新闻

Intel vt-d 与 risc-v aia 对比

Intel vt-d 与 risc-v aia 对比

2026/10/15 11:32:45 阅读更多 →
PCB贴片打样服务解析:快速打样如何缩短电子产品研发周期?

PCB贴片打样服务解析:快速打样如何缩短电子产品研发周期?

PCB贴片打样是电子产品研发阶段非常关键的一环。无论是消费电子、工业控制设备还是智能硬件产品,在进入批量生产之前,通常都需要通过PCB贴片打样进行功能验证和电路测试,从而确保产品设计的可靠性和稳定性。在电子制造行业中,PCB贴…

2026/10/16 3:34:56 阅读更多 →
Qwen3.8-Max-Preview部署指南:2.4T参数大模型本地化实践

Qwen3.8-Max-Preview部署指南:2.4T参数大模型本地化实践

阿里刚刚发布了Qwen3.8-Max-Preview模型,参数规模达到2.4T,这是目前开源大模型领域的一个重要突破。这个模型最值得关注的是其巨大的参数规模和对多模态能力的支持,预计将在代码生成、数学推理、文本理解等多个领域展现强大性能。对于技术开发…

2026/10/16 4:52:19 阅读更多 →

最新新闻

C#+OpenCV二维码识别:图像预处理与透视矫正实战解析

C#+OpenCV二维码识别:图像预处理与透视矫正实战解析

这个项目看起来很直接,但实际落地时坑不少。标题是“C#OpenCV识别图片二维码”,拆开看就是三件事:C#做宿主程序、OpenCV做图像处理、二维码识别作为最终目标。很多人一上来就找OpenCV的二维码识别模块,结果发现识别率惨不忍睹&…

2026/10/18 2:59:06 阅读更多 →
Flutter多因子排序:动态权重与概率统计在鸿蒙适配中的实践

Flutter多因子排序:动态权重与概率统计在鸿蒙适配中的实践

如果你维护过带排序列表的App,大概率在某个版本上被多因子业务混战折磨过:用户要综合分,运营要热度加权,产品要新品加权,风控要防刷降权,几个团队各提各的需求,最后全压在ranking模块上。我最初…

2026/10/18 2:59:06 阅读更多 →
Qwen-Agent实战:从对话到代码执行的智能体自动化框架

Qwen-Agent实战:从对话到代码执行的智能体自动化框架

如果你的工作里有一半时间是用来“搬运数据、整理表格、复制粘贴、改格式”,那么Qwen-Agent值得你花半个小时来试一下。这不是那种“跟我对话聊天”的玩具型AI工具,而是一个真正能接手干活的全能助手——给它一个任务描述,它能自动拆解步骤、…

2026/10/18 2:59:06 阅读更多 →
视频流分段返回实战:HTTP Range 原理、实现与避坑指南

视频流分段返回实战:HTTP Range 原理、实现与避坑指南

1. 视频流分段返回到底在解决什么问题第一次接触“视频流分段返回”这个需求,是在一个后台管理系统里。前端要预览一段监控回放,视频文件放在对象存储上,单个文件动辄两三百兆。最开始的做法很粗暴:后端一次性把整个文件读进内存&…

2026/10/18 2:59:06 阅读更多 →
Moonfire NVR:Rust 编写的轻量级本地 IP 摄像机录像系统

Moonfire NVR:Rust 编写的轻量级本地 IP 摄像机录像系统

简介:Moonfire NVR 是一款轻量高效、开源的网络视频录像机(NVR)系统,面向嵌入式安防开发人员、边缘视频存储方案设计者及 Rust/JavaScript 全栈工程师,解决 IP 摄像机 RTSP 流的低开销持久化存储与按需回放问题。资源包…

2026/10/18 2:59:06 阅读更多 →
开源Newsletter系统多租户安全设计:MailCheap从账户隔离到API Key撤销全链路指南

开源Newsletter系统多租户安全设计:MailCheap从账户隔离到API Key撤销全链路指南

【免费下载链接】mailcheap Newsletters where you pay for the emails you send, not for dormant subscribers, at a fraction of the price of beehiiv and the like. Open source: self-host it, or use mailcheap.ai. 项目地址: https://gitcode.com/gh_mirror…

2026/10/18 2:58:05 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →