在本地存储chroma后,读取失败或者函数无法使用的解决方法

基本代码:
存入:

embeddings = ModelScopeEmbeddings()
dir = 存储地址
db = Chroma.from_documents(documents, embedding=embeddings, persist_directory=dir)
db.persist()

存入后,会新出一个文件夹,文件夹内有三个pkl文件,一个bin文件和两个parquet文件

读取:

db = Chroma(persist_directory= dir, embedding_function=embeddings)
docs = db.similarity_search(text, k=5)

问题:但是博主在如上操作时,使用db.similarity_search()时得到的docs为空,并且原文件夹的index文件夹中缺少bin文件

解决方法:把dir的文件名改为英文,重新存入,便可正常读取

注意:不需要更改documens里面的原文为英文(中文也是可以正常使用的),只需要改存储地址的名字为英文即可。

### 使用 ChromaDB 读取本地数据库 ChromaDB 是一种用于向量相似度搜索的库,通常不直接处理传统关系型数据库的操作。然而,在某些情况下,可以将 ChromaDB 结合其他工具一起工作来间接实现对本地数据源的数据访问。 对于具体操作流程而言,如果目标是从本地 SQL 数据库中提取结构化数据并将其转换成适合于 ChromaDB 处理的形式,则一般会经历如下过程: 1. **连接到本地数据库**:利用 Python 的 `sqlite3` 库或者其他适用于特定 RDBMS(如 MySQL 或者 Oracle)的驱动程序建立与本地存储引擎之间的通信链路[^2]。 2. **查询所需记录集**:通过编写 SQL 查询语句获取待分析的目标表格中的全部或部分字段值,并可选地应用过滤条件缩小检索范围。 3. **预处理原始资料**:把来自上述步骤的结果转化为嵌入式表示形式——即将每条记录映射至高维空间内的点位坐标;这一步骤可能涉及到特征工程以及降维算法的应用。 4. **加载进 ChromaDB 实例**:创建一个新的集合对象并将之前准备好的向量化样本批量导入其中以便后续执行近似最近邻搜索等任务。 下面给出一段简单的代码片段展示如何基于 SQLite 进行基本交互,并假设已经安装好了必要的依赖包 (`chromadb`, `pandas`) 和配置好环境变量指向正确的 DB 文件路径: ```python import sqlite3 from chromadb import Collection, Client import pandas as pd # 建立SQLite连接 conn = sqlite3.connect('example.db') df = pd.read_sql_query("SELECT * FROM my_table", conn) client = Client() collection_name = "my_collection" if collection_name not in client.list_collections(): collection = client.create_collection(name=collection_name) else: collection = client.get_or_create_collection(collection_name) for index, row in df.iterrows(): vector_representation = convert_to_vector(row) # 自定义函数完成此转化逻辑 collection.add( ids=[str(index)], documents=[row['text_column']], # 文本列名替换为实际使用的名称 metadatas={"source": "local_db"}, embeddings=[vector_representation], ) def query_similar_items(text_input): embedding = generate_embedding_from_text(text_input) # 同样需要自定义方法生成输入字符串对应的向量表达 results = collection.query(query_embeddings=[embedding], n_results=5) return results ``` 这段脚本首先建立了同本地 SQLite 数据库存储文件间的链接,接着运用 Pandas 将整个表单内容载入内存形成 DataFrame 对象方便进一步加工处理。之后初始化了一个 ChromaDB 客户端实例并且尝试新建或者重用指定名字的空间容器用来容纳经过编码后的实体项。最后提供了一种方式让用户能够提交自由文本作为查询依据从而返回最接近匹配的一组候选列表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值