from langchain_community.vectorstores import Chroma
from langchain_ollama import OllamaEmbeddings
datas = [
"小明喜欢吃苹果",
"小红喜欢吃香蕉",
"小明的女朋友是小青",
"李老师是一个好老师",
"小李喜欢吃橘子",
"小王的朋友是大帅哥"
]
embed = OllamaEmbeddings(model="qwen3-embedding:0.6b")
db = Chroma.from_texts(texts=datas, embedding=embed)
res = db.similarity_search("谁是老师")
print(res)
添加元数据 (可选) 如果你想记录每条文本的来源或标签,可以传入 metadatas:
metadatas = [
{"id": "1", "type": "food"},
{"id": "2", "type": "food"},
{"id": "3", "type": "relation"},
{"id": "4", "type": "person"},
{"id": "5", "type": "food"},
{"id": "6", "type": "relation"}
]
db = Chroma.from_texts(texts=datas, embedding=embed, metadatas=metadatas)
增强检索效果
- 可以设置
k=3返回前3个结果:
res = db.similarity_search("谁是老师", k=3)
-
或者用
similarity_search_with_score()查看相似度分数:res = db.similarity_search_with_score("谁是老师") -
模型选择
-
qwen3-embedding:0.6b是轻量级模型,适合本地部署。确保 Ollama 已正确安装并拉取了模型:ollama pull qwen3-embedding:0.6
1. Chroma.from_texts
- 用途:直接从原始文本列表创建向量存储。
- 输入 :
texts: 一个字符串列表(List[str]),每个字符串是一段文本。- 可选参数
metadatas: 与 texts 对应的元数据列表(List[dict]),每个元素是一个字典。
- 特点 :
-
简单直接,适用于只有纯文本的情况。
-
如果需要附加元数据(如文档来源、页码、时间戳等),需通过
metadatas参数显式传入。from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddingstexts = ["Hello world", "LangChain is great"]
metadatas = [{"source": "doc1"}, {"source": "doc2"}]vectorstore = Chroma.from_texts(
texts=texts,
embedding=OpenAIEmbeddings(),
metadatas=metadatas
)
-
2. Chroma.from_documents
- 用途 :从 LangChain 的
Document对象列表创建向量存储。 - 输入 :
documents: 一个List[Document],每个Document包含:.page_content(文本内容).metadata(元数据字典)
- 特点 :
-
更结构化,推荐在使用 LangChain 文档加载器(如
PyPDFLoader,TextLoader等)后使用。 -
元数据自动从
Document对象中提取,无需额外处理。from langchain.schema import Document
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddingsdocs = [
Document(page_content="Hello world", metadata={"source": "doc1"}),
Document(page_content="LangChain is great", metadata={"source": "doc2"})
]vectorstore = Chroma.from_documents(
documents=docs,
embedding=OpenAIEmbeddings()
)
-
总结对比
| 特性 | from_texts |
from_documents |
|---|---|---|
| 输入类型 | List[str] |
List[Document] |
| 元数据支持 | 需通过 metadatas 参数传入 |
自动从 Document.metadata 提取 |
| 适用场景 | 简单文本,快速原型 | 使用 LangChain 加载器后的标准流程 |
| 是否推荐用于生产 | 较少(除非数据简单) | 推荐(结构清晰,可扩展性强) |