ChromaDB教程_2024最新版(下)

前言

Embeddings(嵌入)是表示任何类型数据的AI原生方式,它非常适用于各种AI驱动的工具和算法中。它们可以表示文本、图像,很快还可以表示音频和视频。有许多创建嵌入的选项,无论是在本地使用已安装的库,还是通过调用API。

Chroma为流行的嵌入提供商提供了轻量级的封装,使其易于在你的应用程序中使用。你可以在创建Chroma集合时设置一个嵌入函数,该函数将自动使用,也可以自己直接调用它们。

下面是提供嵌入函数的厂商,当然也包括国内厂商,可以自行了解,这里不再罗列。

下面博主通过Hugging Face提供的all-MiniLM-L6-v2模型创建嵌入,请各位紧随博主,以防迷路。

Q:如何通过langchain结合chroma完成检索

langchain提供了各种嵌入的接口,所以你根据它可以很容易完成数据的embedding。在试用前,必须安装相关模块:

序号 模块名称 模块用途
1 langchain 安装langchain框架,集成嵌入接口
2 langchain-chroma 集成chroma数据库
3 sentence-transformers hugging face模型库sdk,可以加载嵌入模型
4 langchain_text_splitters 集成文本切割器
5 chroma chroma数据库

1. 安装langchain

python 复制代码
 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain
 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain-core
 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain-community

2. 安装langchain-chroma

python 复制代码
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain-chroma

3. 安装langchain_text_splitters

python 复制代码
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain_text_splitters

4. 安装sentence-transformers

sentence-transformers是一个python库,该库提供了一种简单的方法来计算句子、段落和图像的密集向量表示。这些模型基于BERT/RoBERTa/XLM RoBERTa等网络,在各种任务中实现了最先进的性能。同时也支持文本嵌入在向量空间中,使得相似的文本更接近,并且可以使用余弦相似度有效地找到。

python 复制代码
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple sentence-transformers 

5. 安装chroma

请参考 ChromaDB教程_2024最新版(上)完成。

6. 下载all-MiniLM-L6-v2

hugging face官网,将该模型下载至本地后,保持原目录存储,如下所示:

7. 基于all-MiniLM-L6-v2嵌入并查询的示例

python 复制代码
from langchain_community.document_loaders import UnstructuredHTMLLoader
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.vectorstores import Chroma

# 加载txt/html文件为document
file_path = "html/云原生.txt"
# 数据存储位置
vector_dir = 'chromadb/col01'
# embedding模型
model_path = 'embedding/all-MiniLM-L6-v2'

loader = UnstructuredHTMLLoader(file_path)
mydata = loader.load()

# 创建文本分割器
text_splitter = CharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=0
)
# 创建文档
docs = text_splitter.split_documents(mydata)
# 集成embedding函数
my_embedding = SentenceTransformerEmbeddings(
   model_name=model_path
)
vectordb = Chroma.from_documents(
    documents=docs,
    embedding=my_embedding,
    persist_directory=vector_dir
)

query = '一叶飞舟在哪里'
retriever = vectordb.as_retriever(search_type="mmr")
s = retriever.get_relevant_documents(query)
print(f'相似的文档:{s}')

执行结果如下:

当然你可以通过sqlite工具,看看这个库长什么样:

all-MiniLM-L6-v2支持384维的向量存储(适合学习、研究),如果维度更大,相对的存储要求更高。


结语

本文通过langchain结合chromadb实现相似建设,并且基于自定义embedding函数(依赖all-MiniLM-L6-v2)完成embedding。在这个基础上,可以结合大模型,完成最佳实践。

走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~

精彩回顾

ChromaDB教程_2024最新版(上)
基于LangChain的大模型学习手册之Embedding(保姆级)
基于DashScope+Streamlit构建你的机器学习助手(入门级)
基于LangChain的大模型学习手册(入门级)
基于Python的大模型学习手册(入门级)


相关推荐
曲辕RPA2 分钟前
深度解析GEO技术及背后的机器人曲辕RPA
python·ai·自动化·rpa
2301_764441338 分钟前
使用python构建的STAR实验ΛΛ̄自旋关联完整仿真
开发语言·python·算法
xifangge202513 分钟前
Python 爬虫实战:爬取豆瓣电影 Top250 数据并进行可视化分析
开发语言·爬虫·python
Flittly18 分钟前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(10)Team Protocols (团队协议)
笔记·python·ai·ai编程
阿_旭18 分钟前
基于YOLO26深度学习的蓝莓成熟度检测与分割系统【python源码+Pyqt5界面+数据集+训练代码】图像分割、人工智能
人工智能·python·深度学习·毕业设计·蓝莓成熟度检测
勇往直前plus20 分钟前
LangChain 动态系统提示词(@dynamic_prompt)深入解析
langchain·prompt
lxmyzzs21 分钟前
使用Python分析COCO数据集标注信息:一个简单脚本实现统计与可视化
python·深度学习·目标检测·计算机视觉
wertyuytrewm22 分钟前
自动化与脚本
jvm·数据库·python
qq_4176950527 分钟前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python
problc28 分钟前
在 OpenClaw 里一句话记账:消费说出来,账单自动进乖猫记账 App
开发语言·python