RAG实践(二)安装并使用向量数据库(chromadb)

1. 环境

环境:
miniconda==24.11.1
python==3.12.1

2. 介绍

chromadb 是一个开源的向量数据库,专门用于存储和检索高维向量数据,轻量级,适合快速原型开发,适合新手练习。

3. 安装

pip install chromadb

3.1 持久客户端运行

chroma run --path /path

/path 是文件存储磁盘的路径
这样就说明已经启动,默认是8000端口
http://localhost:8000/docs
启动后可以打开swagger文档,有接口可以操作数据库
官方文档
启动后Getting started guide后是官方文档可以自行查看
在这里插入图片描述

3.X 安装过程的问题

这是因为chroma-hnswlib,它依赖于 hnswlib,而 hnswlib 需要 C++ 编译器和 cmake
在这里插入图片描述
下载 Visual Studio Build Tools
并确保勾选 C++ 编译器和 CMake。
在这里插入图片描述

4.代码实践增、删、改、查

import chromadb

chroma_client = chromadb.HttpClient(host='localhost', port=8000)
chroma_client.heartbeat
##创建一个集合、类似于传统数据库的表
collection = chroma_client.get_or_create_collection(name ="test_collection")
##插入数据
collection.add( 
    embeddings=[[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]], #向量数据
    metadatas=[{"name": "item1"}, {"name": "item2"}],#元数据,描述向量的数据
    ids=["id1", "id2"] 
)
##删除数据
collection.delete(
    ids=["id1"]
)
##更新数据
collection.update( 
    ids=["id1", "id2", ],
    embeddings=[[1.1, 2.3, 3.2], [4.5, 6.9, 4.4]],
    metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}],
    documents=["doc1", "doc2"],
)
# 查询数据
results = collection.get(
   
    where={"verse": "5"}
)


print(results)

# 查询数据
results = collection.query(
   query_embeddings=[1.0, 2.0, 3.0],
    where={"verse": "16"}
)
#删除集合
chroma_client.delete_collection("test_collection")
### 使用RAG构建向量数据库的方法 #### 构建流程概述 为了实现高效的信息检索,RAG系统依赖于一系列精心设计的工作流。首先,文档被分割成更小的片段,这一过程确保了后续处理阶段能够更加灵活地操作数据[^3]。 ```python from langchain.text_splitter import CharacterTextSplitter text = "这里是你想要存储的大段文字" splitter = CharacterTextSplitter(separator=" ", chunk_size=100, chunk_overlap=20) chunks = splitter.split_text(text) ``` #### 文本嵌入与索引创建 接下来,利用预训练的语言模型将这些文本块转换为稠密向量表示形式,将其存入支持相似度搜索的数据结构中。这一步骤对于提高查询效率至关重要。 ```python from sentence_transformers import SentenceTransformer import faiss model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(chunks) dimension = embeddings.shape[1] index = faiss.IndexFlatL2(dimension) faiss.normalize_L2(embeddings) index.add(embeddings) ``` #### 查询处理机制 当接收到新的询问时,同样采用上述相同的方式对其进行编码计算最邻近匹配项;随后基于此结果集构造提示词(Prompt),最终传递给大型语言模型以生成自然流畅的回答内容。 ```python query_embedding = model.encode([user_query]) faiss.normalize_L2(query_embedding) _, indices = index.search(query_embedding, k=top_k_results) retrieved_chunks = [chunks[i] for i in indices.flatten()] prompt = f"Given the context {retrieved_chunks}, answer this question: {user_query}" response = llm.generate(prompt=prompt).choices[0].text.strip() print(response) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值