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 加载器后的标准流程
是否推荐用于生产 较少(除非数据简单) 推荐(结构清晰,可扩展性强)
相关推荐
catino19 分钟前
SQL调优
数据库·sql
猫咪很可爱25 分钟前
Oracle Data Pump 导入报错 ORA-02375:字符集不一致问题分析与处理
数据库·oracle
java1234_小锋35 分钟前
MySQL 宣布正式拥抱 AI
数据库·人工智能·mysql
SabrinaW71137 分钟前
基于 C++17 与 RTTR 的注册式对象工厂:配置驱动的动态对象创建
java·前端·数据库
NineData1 小时前
MySQL 迁移到 OceanBase 怎么做?NineData 全量迁移、CDC 实时同步与数据校验指南
数据库·mysql·oceanbase
standxy1 小时前
索引设计实战:pgvector HNSW × JSONB GIN × 复合索引
数据库·开发
BD_Marathon1 小时前
【RAG开发】LangChain调用大语言模型
人工智能·语言模型·langchain
guo_wen_qiang1 小时前
使用spring-data-mongodb操作mongo记录
数据库·mongodb
凤山老林1 小时前
授权模型只会RBAC?深入 ABAC 授权模型,实现权限判断做成策略引擎
大数据·数据库·算法
geovindu1 小时前
sql:SQL Views and Materialized Views using mysql 9.0
大数据·数据库·数据仓库·sql·mysql·数据库开发·数据库架构