RAG调试笔记:如何查看 Chroma 向量库 & 避坑
🔍 一、如何查看向量数据库内容(核心代码)
1 2 3 4 5 6 7 8
| data = vector_store._collection.get( include=["documents", "metadatas", "embeddings"] )
print("ids:", data["ids"]) print("documents:", data["documents"]) print("metadatas:", data["metadatas"]) print("数量:", len(data["documents"]))
|
🧠 说明
ids 👉 每条数据的唯一标识(默认自动生成)
documents 👉 原始文本
metadatas 👉 你自己传的附加信息
embeddings 👉 向量(默认不会返回,需要 include)
🔎 查看 embedding(调试神器)
1 2
| for i, emb in enumerate(data["embeddings"]): print(f"doc{i} 前5维:", emb[:5])
|
👉 用来判断:
🚨 二、常见 Bug:检索结果重复(你刚踩的这个)
❗现象
💥 根本原因
1 2
| 不是检索器问题 ❌ 而是数据库里有大量重复数据 ✅
|
🧪 如何判断?
1 2
| print("数量:", len(data["documents"])) print("唯一文本数:", len(set(data["documents"])))
|
👀 如果看到:
👉 💥 说明你重复写入了很多次!
🧠 三、为什么会重复?
因为:
👉 默认使用同一个 collection(通常叫 "langchain")
所以:
1 2 3 4
| 每运行一次代码 → 就往同一个数据库追加数据 → 数据越来越多 → 检索命中多个“重复副本”
|
🚑 四、解决方案(必须记住!!!)
✅ 方案1:每次运行前清空数据库(推荐)
1
| vector_store._client.delete_collection("langchain")
|
✅ 方案2:指定新的 collection_name
1 2 3 4 5
| vector_store = Chroma.from_texts( texts=[doc['text'] for doc in documents], embedding=embeddings, collection_name="my_test_db" )
|
👉 避免污染旧数据
✅ 方案3:开发时使用“真内存模式”(最干净)
1 2 3 4 5 6 7
| from chromadb.config import Settings
vector_store = Chroma.from_texts( texts=[doc['text'] for doc in documents], embedding=embeddings, client_settings=Settings(persist_directory=None) )
|
👉 进程结束自动清空
✅ 方案4:手动清空数据(不删表)
1
| vector_store._collection.delete(where={})
|
💡 五、RAG 调试四步法(强烈建议收藏)
1 2 3 4
| 1️⃣ embedding 正常吗? 2️⃣ 数据库里有多少条? 3️⃣ 有没有重复数据? 4️⃣ 检索结果是否合理?
|
🎯 六、一句话总结(记住这个就够了)
👉 “检索重复 ≠ 检索错,往往是数据库里有重复数据”
🫶 小贴士(给未来的你)
以后每次写完向量库,先跑一句:
1
| print("当前数据量:", vector_store._collection.count())
|
👉 一秒避免这类坑