Chroma.afrom_texts与Chroma.from_texts的区别及向量可视化方法
LangChain中ChromaDB的from_texts与afrom_texts区别及向量可视化方法
一、两个方法的区别与用途
Chroma.from_texts()是同步阻塞方法,直接返回Chroma向量存储实例(也就是你看到的<langchain.vectorstores.chroma.Chroma at ...>),是日常开发里最常用的常规写法,适合简单的同步代码场景。Chroma.afrom_texts()是异步非阻塞方法,返回的是协程对象。它专门用于异步编程环境(比如基于asyncio的代码、FastAPI这类异步Web框架),需要配合await关键字才能获取真正的Chroma实例,示例代码:
这种写法的优势是在异步场景下不会阻塞事件循环,能提升代码的并发处理效率。import asyncio async def main(): db = await Chroma.afrom_texts(docs, embedding_function) asyncio.run(main())
二、协程对象的含义
你看到的<coroutine object VectorStore.afrom_texts at ...>是Python异步编程中的协程对象,它本身不是最终执行结果,只是一个待触发的异步任务单元。如果直接把它赋值给变量而不执行,这个变量只是保存了一个未启动的异步任务,无法直接用来做向量查询、检索等操作。必须通过await关键字,或者asyncio.run()、asyncio.create_task()这类方式触发执行,才能得到可用的Chroma向量存储实例。
三、向量数值的可视化探索方法
要可视化高维向量,核心是先把向量降维到2D或3D,再用绘图工具展示,常用方案如下:
1. UMAP降维+Matplotlib绘图
UMAP适合保留向量间的局部结构,可视化效果更贴近原始数据的聚类关系:
import umap import matplotlib.pyplot as plt from langchain.vectorstores import Chroma # 获取已存储的所有向量 db = Chroma.from_texts(docs, embedding_function) embeddings = db.get()['embeddings'] # 降维到2D reducer = umap.UMAP(n_components=2) reduced_embeddings = reducer.fit_transform(embeddings) # 绘制散点图 plt.scatter(reduced_embeddings[:, 0], reduced_embeddings[:, 1]) plt.title("向量嵌入2D可视化") plt.show()
2. PCA降维+Plotly交互式绘图
PCA是基础降维方法,Plotly可以生成交互式3D图,方便你拖拽、缩放探索:
from sklearn.decomposition import PCA import plotly.express as px # 降维到3D pca = PCA(n_components=3) reduced_embeddings = pca.fit_transform(embeddings) # 生成交互式3D散点图 fig = px.scatter_3d(x=reduced_embeddings[:,0], y=reduced_embeddings[:,1], z=reduced_embeddings[:,2]) fig.show()
3. 单条向量数值分布查看
如果只想探索单个向量的数值分布,可以直接绘制直方图:
import numpy as np import matplotlib.pyplot as plt # 取第一条向量 single_embedding = embeddings[0] plt.hist(single_embedding, bins=20) plt.title("单条向量数值分布") plt.show()
内容的提问来源于stack exchange,提问作者Oliva
相关产品推荐
相关产品推荐

