当前位置: 首页 > news >正文

大模型RAG (二)

一、RAG核心

1、传统 VS 大模型

智能客服系统下面是两则设计的原理:

2、向量与Embeddings嵌入向量

2.1. 向量(Vector)

由一组有序数字排成的一维数组,用来表示一个对象在某个空间中的位置或特征。

  • 形式:[x₁, x₂, x₃, ..., xₙ]
  • 维度:数字的个数 n 就是向量的维度
  • 作用:用来量化事物,让计算机能计算、比较、处理

例子:

  • 二维向量:[2, 3]
  • 三维向量:[0.1, 0.5, 0.9]

2.2. Embeddings(嵌入向量)

文字、图片、声音、用户行为非结构化信息,通过模型(如 Word2Vec、BERT、Transformer)转化成的低维稠密向量

核心特点:

  • 语义相近 → 向量距离近
  • 语义无关 → 向量距离远
  • 可用于:搜索、推荐、分类、聚类、相似度计算

简单理解:

Embeddings = 把现实世界的东西翻译成计算机能懂的 “语义向量”

举个最经典的例子(词向量)

假设模型训练后得到:

  • 国王:[0.9, 0.1, 0.3, ...]
  • 王后:[0.88, 0.12, 0.31, ...]
  • 苹果:[0.05, 0.8, 0.02, ...]

你会发现:

  • 国王 ↔ 王后:向量很接近
  • 国王 ↔ 苹果:向量离得很远

2.3、两者关系

  • 向量:是数学基础,是通用工具。
  • Embedding:是带有语义信息的特殊向量,专门给 AI 用。

2.4、典型应用

  • 搜索:把问题转 embedding,找最相似的文档
  • 推荐:把用户、商品转 embedding,匹配相似兴趣
  • 聊天 AI:把你的话转 embedding,理解你想表达什么
  • 人脸识别:把人脸转 embedding,比对相似度

3、向量间的相似度计算

核心就是:用数学方法衡量两个向量像不像,在 Embedding 里就等于衡量语义 / 特征近不近

1. 欧式距离(Euclidean Distance)

定义:空间中两点的直线距离。

公式:

  • 距离越小→ 越相似
  • 距离越大→ 越不相似

适用:坐标类、位置类、低维特征。

2. 余弦相似度(Cosine Similarity)

最常用在 Embedding、文本、推荐里

定义:两个向量夹角的余弦值,只关心方向,不关心长度。

公式:

  • 结果范围:[-1, 1]
  • 越接近 1→ 方向越一致 → 越相似
  • 接近 0→ 不相关
  • 接近 -1→ 相反

适用:文本 Embedding、语义相似度、推荐、搜索(几乎所有 NLP 场景)。

3. 点积(Dot Product)

公式:

  • 越大越相似
  • 但受向量长度影响,一般不如余弦相似度稳定

欧式距离与余弦距离图

案例1:文本向量化(Embedding)模型

from openai import OpenAI from dotenv import load_dotenv import os # 默认加载项目根目录下的 .env 文件 load_dotenv() # 会自动读取环境变量 client=OpenAI() # 生成文本的嵌入 def get_embeddings(texts,model="text-embedding-v4"): data=client.embeddings.create(input=texts,model=model).data print(data) return [x.embedding for x in data] test_query=['大模型'] vec=get_embeddings(test_query) print(vec) print(vec[0]) print(len(vec[0]))

案例2:「聊天、回答问题、写内容、思考推理」的超强大模型

from openai import OpenAI from dotenv import load_dotenv # 默认加载项目根目录下的 .env 文件 load_dotenv() # 会自动读取环境变量 # 1. 获取client对象,OpenAI类对象 client = OpenAI() # 若直接通过 ‌阿里云百炼平台‌ 调用 Qwen3-Max 的标准 API(非免费版) #阿里云Qwen3-Max是通义千问系列的旗舰级推理大模型 # 2. 调用模型 response = client.chat.completions.create( model="qwen3-max", messages=[ {"role":"system","content":"你是AI助理,回答很简洁"}, {"role":"user","content":"小明有2条宠物狗"}, {"role":"assistant","content":"好的"}, {"role":"user","content":"小红有3只宠物猫"}, {"role":"assistant","content":"好的"}, {"role":"user","content":"总共有几个宠物"} ], stream=True # 开启了流式输出的功能 ) # 3. 处理结果 for chunk in response: print(chunk.choices[0].delta.content,end=' ',flush=True) # end=' '每一段之间以空格分隔, # flush=True立刻刷新缓冲区

说明:

调用模型传入的参数messages,是list对象,即表明其支持非常多的消息在内。

我们可以将历史消息填入,让模型知晓对话的上下文,更好的回答。

当前的历史消息是一次性的,如果是生产系统可以将消息保存到文件、数据库等持久化工具内,需要的时候提取使用 后续学习LangChain库,会学习短期记忆和长期记忆的使用方法。

案例3:文本向量化(Embedding)模型-(余弦距离和欧式距离)

from openai import OpenAI from dotenv import load_dotenv import numpy as np #该函数用于计算两个数组的点积(内积)。 from numpy import dot #该函数用于计算向量的范数(模),默认为2范数(欧几里得范数)。 from numpy.linalg import norm import os # 默认加载项目根目录下的 .env 文件 load_dotenv() # 会自动读取环境变量 client = OpenAI() def cos_sim(vec1, vec2): '''余弦距离,越大越相似''' return dot(vec1, vec2) / (norm(vec1)*norm(vec2)) def os_line(vec1,vec2): '''欧式距离,越小越相似''' x=np.asarray(vec1)-np.asarray(vec2) return norm(x) def get_embeddings(texts,model='text-embedding-v4'): '''获取文本的向量表示''' data=client.embeddings.create(input=texts,model=model).data #返回一个包含所以嵌入表示的列表 return [d.embedding for d in data] query = "科技前沿" documents = [ "OpenAI 发布 GPT-5 模型,推理与代码能力实现重大突破", "中国自研量子计算机“九章三号”刷新光量子计算世界纪录", "俄乌冲突持续,欧盟宣布新一轮对俄能源制裁", "华为发布全新鸿蒙OS 5.0,实现全场景设备无缝互联", "联合国安理会上,俄罗斯与美国,伊朗与以色列“吵”起来了" ] # 获取查询向量 query_vec = get_embeddings([query])[0]; # 获取文档向量 doc_vecs = get_embeddings(documents); print("余弦距离:") print(cos_sim(query_vec,query_vec)) for ve in doc_vecs: print(cos_sim(query_vec,ve)) print("\n 欧式距离:") print(os_line(query_vec,query_vec)) for ve in doc_vecs: print(os_line(query_vec,ve))

http://www.jsqmd.com/news/684304/

相关文章:

  • 创新项目实训记录(三)
  • 有时候要说“我们团队“,而不是“我“
  • 2026年阿里云快速教程:怎么搭建OpenClaw?Coding Plan配置及大模型API Key设置
  • 哈希表记录
  • 终极指南:如何在Windows上零配置使用Poppler PDF处理工具
  • 揭秘PyTorch forward函数:从隐式调用到自定义模型的核心
  • 第22届智能车缩微组别的赛题形式建议
  • AI安全:多模态推理攻击与防御技术解析
  • JavaSE学习——类加载器和注解
  • 解决STM32H723双CAN通信的MessageRAM冲突:FDCAN1与FDCAN2独立滤波与FIFO配置指南
  • SPE(单对以太网):重塑工业与汽车网络的轻量化连接方案
  • 技术深度解析:Beyond Compare 5 密钥生成机制与实战部署指南
  • TS-182快速打通Modbus干变温控箱与PROFINET PLC连---简化集成步骤 提升设备运行可靠性
  • nli-MiniLM2-L6-H768部署案例:国产昇腾910B平台适配与性能实测
  • 撕下“全能模型”的伪装:Anthropic 官方揭秘长周期 Agent 的“脚手架工程”与抗焦虑指南
  • 三步法高效配置WarcraftHelper:魔兽争霸III游戏优化与性能提升完整指南
  • 按键伤企频上热搜,我用这套舆情监测系统守住了公司品牌
  • Docker配置错误导致PLC通信中断?——工业现场紧急回滚的3个不可逆配置陷阱
  • Docker镜像层存储机制全解,从aufs到overlay2的演进真相及企业级迁移 checklist(含生产环境回滚预案)
  • Neo4j 超详细入门
  • 【路由原理与路由协议-BGP边界网关协议】
  • 阳澄湖大闸蟹礼卡怎么选怎么兑?避坑攻略看这里
  • 网络协议TCP-IP深入解析
  • 《识质存在(PRAGMATA)》v1.0 十二项修改器
  • 端侧AI爆发:让手机、电脑、汽车自己思考
  • 告别FileNotFoundError:Python文件路径检查与异常处理实战指南
  • 租赁商城小程序源码|ThinkPHP+UniApp双端开发|含手机租赁系统与完整部署教程
  • 微服务配置管理进阶
  • Nano-Banana场景应用:统一品牌视觉,建立系列化产品拆解档案
  • 别再只调sklearn了!用mlxtend给你的机器学习项目加个‘瑞士军刀’(附实战代码)