不追其理,不求甚解,应用为主,但求应用于实际。
遗留问题:文本切分的原则是什么?什么是有效招回?如何有效切分长文本存入向量数据库?
- 向量数据库是什么
- 向量数据库是专门用来存储和查询向量的数据库,其存储的向量来自于对文本、语音、图像、视频等的向量化。 -- 百度百科
- 向量数据库是一种专门存储和检索高维向量数据的数据库,它通过计算向量之间的相似度来找"最像"的结果,而不是传统数据库的精确匹配。-- 百度
- 向量数据库是一种专为存储和检索被称为"向量嵌入"的特殊数据类型而构建的数据库。向量嵌入是文本、图像、视频、音频等内容的含义或特征的数字表示。
- 向量数据库是AI时代专为存储、索引和检索高维向量数据设计的专用数据库系统,是支撑大模型、多模态应用的核心基础设施。
- 向量数据库(Vector Database)是专为存储、管理和高效检索高维向量数据而设计的数据库系统。广泛应用于处理文本、语音、图像、视频等非结构化数据,是人工智能和机器学习领域的重要基础设施。
- 向量数据库的基本概念
-
向量(Vector)
- 数学定义:既有大小又有方向的量,可表示为带方向的箭头,核心关注方向与长度属性。
- 在机器学习中,向量是一组有序的数字列表(高维浮点数数组)。它是将文本、图像、音频等非结构化数据"翻译"成计算机能理解的数学形式。
- AI并不直接理解文字或图片,而是通过嵌入(Embedding)技术,将这些非结构化数据转化为一串长长的数字数组,这就是"向量"。在向量空间中,语义或特征越相似的数据,其对应的向量在几何距离上就越接近。-- 阿里
- 一串有顺序的数字序列 ,本质是给抽象数据贴"数字特征标签",无需纠结方向属性,仅用于描述数据的核心特点,是AI理解世界的"通用语言"。-- 百度
- 向量嵌入是所有向量数据库的核心,即采用数值形式表示由机器学习模型生成的数据 。机器学习模型在接收文本、图像和音频等非结构化输入后,将其转换为长数字序列(即向量),且这些数字捕捉了原始内容的本质或含义。
-
向量嵌入(Embedding)--> 编码入库:将原始数据转化为向量的过程。在这个高维数学空间中,语义或特征越相似的数据,其对应的向量在几何距离上就越近。
-
相似性搜索(Similarity Search):向量数据库不关心数据是否"完全相同",而是回答"像什么"或"最相关的是什么"。它通过计算查询向量与库中向量的距离来衡量相关性。-- 阿里
将用户的查询内容也转化为向量,在索引中快速找出最相似的向量,返回对应的原始业务数据。-- 百度
-
向量运算 a=(a1,a2,...,an),b=(b1,b2,...,bn)
-
加:a+b=(a1+b1,a2+b2,...,an+bn)
-
减:a−b=(a1−b1,a2−b2,...,an−bn)
-
乘:ka=(ka1,ka2,...,kan)
a⋅b=∑i=1->n,aixbi=(a1xb1+a2xb2+...+anxbn)=∣a∣∣b∣cosθ(θ为两向量夹角)-- 余弦相似度:θ=0,cosθ=1,两向量重合,相似匹配度高(只关注方向,不关注大小);
axb=∑i=1->n,aixbi=∣a∣∣b∣sinθ(θ为两向量夹角)
|a|=square(
+
+...
)

-
- 欧氏距离(两向量在空间中的直线距离):

- 维度
- 向量中包含的数字个数,等同于给数据贴的特征标签数量,标签越多维度越高;低维向量(≤10维,如描述人的年龄、性别、学历)、中维向量(10~1000维,如短文特征、简单图片像素)、高维向量(>1000维,如词语语义、复杂图片细节)-- 百度
- 向量嵌入(Embedding)结果中包含的浮点数个数,即高维空间中的坐标轴数量。-- 阿里
- 向量数据库与传统数据库的区别
- 传统关系型数据库主要基于**"精确匹配"** 和关键词检索,只能查找字面完全相同的内容。
而向量数据库的核心能力是基于**"语义相似性"**进行检索。它不找"完全一样"的数据,而是寻找"最像"、"最相关"的内容,这正是人类大脑联想记忆的方式。-- 阿里 - 传统数RDBMS,擅长处理行、列、表格等结构规整、定义明确的数据,采用的是精确关键词匹配查询方法。
- 向量数据库擅长在复杂的非结构化数据中发现模式与关联,能捕获远超表层信息的深层语义。这类数据库针对 AI 驱动型应用进行了优化,适用于语义搜索、图像/视频识别、生成式 AI 等任何需要理解上下文的场景。

- 向量数据库的选择

- Chroma
-
安装
python> pip install chroma Collecting chroma Downloading Chroma-0.2.0.tar.gz (5.8 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Building wheels for collected packages: chroma Building wheel for chroma (pyproject.toml) ... done Created wheel for chroma: filename=chroma-0.2.0-py3-none-any.whl size=7185 sha256=c951ea8e2d2a51c36152bb3dabc0b843fe769f716841b3d3bfa9bbf8a45552fc Stored in directory: .\appdata\local\pip\cache\wheels\d0\e6\ed\9d48f7017678c795fce0bd3f414e930e48bf6976b5f296373b Successfully built chroma Installing collected packages: chroma Successfully installed chroma-0.2.0 ## 首次下载 Chroma 的默认内置词嵌入(Embedding)模型,会慢 .cache\chroma\onnx_models\all-MiniLM-L6-v2\onnx.tar.gz: 0%| | 0.00/79.3M [00:00<?, ?iB/s] login_user\.cache\chroma\onnx_models\all-MiniLM-L6-v2\onnx.tar.gz: 0%| | 17.0k/79.3M [00:00<21:48, 63.6kiB/s] ## onnx.tar.gz,Chroma 向量数据库的预编译 ONNX 模型权重文件 ## 下载后拷贝至 login_user\.cache\chroma\onnx_models\all-MiniLM-L6-v2\onnx.tar.gz https://chroma-onnx-models.s3.amazonaws.com/all-MiniLM-L6-v2/onnx.tar.gz 或 尝试 > pip install -U huggingface-hub 或 https://mirrors.tuna.tsinghua.edu.cn/huggingface > hf --version 1.29.0 > hf download sentence-transformers/all-MiniLM-L6-v2 --local-dir ./models/all-MiniLM-L6-v2 ## 似乎所有的连接都被拒绝 --> 使用阿里魔搭社区 (ModelScope) > pip install modelscope > modelscope download --model sentence-transformers/all-MiniLM-L6-v2 --local_dir ./models/all-MiniLM-L6-v2 > pip install sentence-transformers -
向量化字符串 并 查询显示
python## 提问:将"你是谁?"向量化到chroma数据库,并显示向量化后的结果 import chromadb # 1. 初始化 Chroma 客户端(这里使用内存模式,方便测试) client = chromadb.Client() # 2. 创建或获取一个集合(Collection) # 如果未指定,Chroma 默认使用 all-MiniLM-L6-v2 模型,输出 384 维向量 collection = client.create_collection(name="test_collection") # 3. 准备要向量化的文本 text = "你是谁?" # 4. 将文本添加到 Chroma 数据库中 # Chroma 会在后台自动完成向量化并存储 collection.add( documents=[text], ids=["id_1"] ) # 5. 获取并显示向量化后的结果 # 通过 id 检索刚刚存入的数据,并请求返回其 embedding result = collection.get( ids=["id_1"], include=["documents", "embeddings"] ) # 6. 打印输出 print(f"原始文本: {result['documents'][0]}") print(f"向量维度: {len(result['embeddings'][0])}") print(f"向量化结果 (前10个浮点数): {result['embeddings'][0][:10]}") ############## 原始文本: 你是谁? 向量维度: 384 向量化结果 (前10个浮点数): [ 0.04282798 0.09308085 0.06559981 0.02423732 -0.00719316 0.03712605 0.11357371 0.01169991 -0.02707477 -0.06566047] > print(f"向量: {result}") ############## 向量: {'ids': ['id_1'], 'embeddings': array([[...]]),'documents': ['你是谁?'], 'uris': None, 'data': None, 'metadatas': None, 'included': [<IncludeEnum.embeddings: 'embeddings'>, <IncludeEnum.documents: 'documents'>]} # 7. 或 本地持久化模式;使用sqlite作为存储数据库 client = chromadb.PersistentClient(path="./chroma_db") colletion = client.get_or_create_collection(name="test_collection") print(f"向量: {colletion}") cdata = colletion.get() print(f"Data: {cdata}") result = collection.get( ids=["id_1"], include=["documents", "embeddings"] ) print(f"Result: {result}") ############# collection: [Collection(name=test_collection)] 向量: Collection(name=test_collection) Data: {'ids': ['id_1', 'id_2', 'id_3'], 'embeddings': None, 'documents': ['我是谁?', '你是谁?', '你能做什么?'], 'uris': None, 'data': None, 'metadatas': [None, None, None], 'included': [<IncludeEnum.documents: 'documents'>, <IncludeEnum.metadatas: 'metadatas'>]} Result: {'ids': ['id_1'], 'embeddings': array([[...]]), 'documents': ['我是谁?'], 'uris': None, 'data': None, 'metadatas': None, 'included': [<IncludeEnum.embeddings: 'embeddings'>, <IncludeEnum.documents: 'documents'>]}
- 向量数据库与Rag(检索增强生成,Retrieval-Augmented Generation)
-
提问:向量数据库与Rag的关系
- 向量数据库是 RAG 系统的核心基础设施("外部记忆"),而 RAG 则是向量数据库最核心的应用场景。
大模型的训练成本极高,不可能每天把公司的新数据拿去重新训练。有了向量数据库,新文档只需几分钟就能向量化入库,AI 立刻就能查到最新信息。
没有向量数据库,大模型只能依赖训练时学到的旧知识,无法胜任企业级的专业问答;而没有 RAG 架构,向量数据库的检索结果也无法转化为自然流畅的人类语言。 -- 阿里 - RAG:是一套完整的大模型增强技术框架,核心目标是通过引入外部知识库,解决大模型知识过时、幻觉、无法接入私有数据的问题,实现"检索外部相关上下文+大模型生成精准回答"的闭环。
向量数据库:是RAG框架中的核心存储与检索引擎,专门负责存储非结构化数据转换后的高维向量,实现毫秒级的语义相似性检索,是RAG能快速找到相关外部知识的关键载体。
二者是底层基础设施与上层应用架构的强依赖关系,向量数据库解决了RAG最核心的非结构化数据语义检索难题,没有向量数据库的高效支撑,RAG就无法实现精准、高效的外部知识召回。-- 百度
- 向量数据库是 RAG 系统的核心基础设施("外部记忆"),而 RAG 则是向量数据库最核心的应用场景。
-
提问:如何将rag与chromadb向量数据库关联 - embedding_function: Optional function to use to embed documents(用于将文档嵌入(向量化)的可选函数**)**
python## 管理和集成各类嵌入模型(Embedding Models),自动调用API将文本转化为向量 help(chromadb.utils.embedding_functions) Help on package chromadb.utils.embedding_functions in chromadb.utils: NAME chromadb.utils.embedding_functions PACKAGE CONTENTS amazon_bedrock_embedding_function chroma_langchain_embedding_function cohere_embedding_function google_embedding_function huggingface_embedding_function instructor_embedding_function jina_embedding_function ollama_embedding_function onnx_mini_lm_l6_v2 open_clip_embedding_function openai_embedding_function roboflow_embedding_function sentence_transformer_embedding_function text2vec_embedding_function ## ONNX 嵌入函数 help(chromadb.utils.embedding_functions.onnx_mini_lm_l6_v2.ONNXMiniLM_L6_V2) ## Get or create a collection with the given name and metadata. help(chromadb.PersistentClient().get_or_create_collection) Help on method get_or_create_collection in module chromadb.api.client: get_or_create_collection( name: str, configuration: Optional[chromadb.api.configuration.CollectionConfigurationInterface] = None, metadata: Optional[Dict[str, Any]] = None, embedding_function: Optional[chromadb.api.types.EmbeddingFunction[Union[List[str], List[numpy.ndarray[tuple[int, ...], numpy.dtype[Union[numpy.uint64, numpy.int64, numpy.float64]]]]]]] = <chromadb.utils.embedding_functions.onnx_mini_lm_l6_v2.ONNXMiniLM_L6_V2 object at 0x000001AB70F13350>, data_loader: Optional[chromadb.api.types.DataLoader[List[Optional[numpy.ndarray[tuple[int, ...], numpy.dtype[Union[numpy.uint64, numpy.int64, numpy.float64]]]]]]] = None ) -> chromadb.api.models.Collection.Collection method of chromadb.api.client.Client instance Get or create a collection with the given name and metadata. Args: name: The name of the collection to get or create metadata: Optional metadata to associate with the collection. If the collection already exists, the metadata provided is ignored. If the collection does not exist, the new collection will be created with the provided metadata. embedding_function: Optional function to use to embed documents data_loader: Optional function to use to load records (documents, images, etc.) Returns: The collection Examples: ```python client.get_or_create_collection("my_collection") # collection(name="my_collection", metadata={}) ```
- DocsGPT与Chroma
- sources,Source document management operations
参考: