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 加载器后的标准流程
是否推荐用于生产 较少(除非数据简单) 推荐(结构清晰,可扩展性强)
相关推荐
jiayou6417 小时前
KingbaseES 表级与列级加密完全指南
数据库·后端
GBASE2 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr2 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
吃糖的小孩3 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
大模型真好玩4 天前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent
笃行3504 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3504 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3504 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
SelectDB5 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc