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 加载器后的标准流程
是否推荐用于生产 较少(除非数据简单) 推荐(结构清晰,可扩展性强)
相关推荐
数据库急诊室_阿哲2 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋3 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子3 小时前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
Joy T4 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡5 小时前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Aloudata5 小时前
Claude 做数据分析的这两年:一份复盘与发展线索
大数据·数据库·人工智能·数据挖掘·数据分析·dataagent
Decay__5 小时前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构
zhanghaha13145 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
韩曙亮5 小时前
【错误记录】安卓 adb 调试 5037 端口占用排查 ( adb 的三层结构 | 找出本机占用 5037 的进程 )
android·数据库·adb·安卓·错误记录
瑞雪兆丰年兮5 小时前
JavaWeb-day07-MySQL(DQL&多表设计)
java·开发语言·数据库·sql·mysql·javaweb·web