LangChain 将数据加载到 Chroma 向量数据库

复制代码
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: 一个字符串列表(Liststr),每个字符串是一段文本。
    • 可选参数 metadatas: 与 texts 对应的元数据列表(Listdict),每个元素是一个字典。
  • 特点
    • 简单直接,适用于只有纯文本的情况。

    • 如果需要附加元数据(如文档来源、页码、时间戳等),需通过 metadatas 参数显式传入。

      from langchain_chroma import Chroma
      from langchain_openai import OpenAIEmbeddings

      texts = ["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 OpenAIEmbeddings

      docs = [
      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 加载器后的标准流程
是否推荐用于生产 较少(除非数据简单) 推荐(结构清晰,可扩展性强)
相关推荐
后台模板学习1 分钟前
学习的心态高频面试题
java·数据库·学习
redreamSo20 分钟前
想给产品加一个 AI 搜索,是上向量数据库还是用 MongoDB 就够了?
数据库·人工智能·mongodb
APItesterCris2 小时前
告别人工盯品!借助 Open‑Claw 快速搭建电商商品全自动监控与数据分析系统(完整实操代码)
java·大数据·前端·数据库
SKH.2 小时前
网络(5)数据库
jvm·数据库
kyrie_sakura2 小时前
MySQL数据库学习笔记3--关联(联合)查询
数据库·学习·mysql
陈皮波比茶3 小时前
计算机二级MySQL笔记
java·数据库
行业研究员3 小时前
腾讯云数据库 PostgreSQL 让相关子查询跑上多核
数据库·postgresql·腾讯云
zzzll11113 小时前
LangChain 1.3 新特性详解与实战指南
java·数据库·langchain
石小千3 小时前
MySQL 8.4设置密码策略
数据库·mysql