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

    • 如果需要附加元数据(如文档来源、页码、时间戳等),需通过 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 加载器后的标准流程
是否推荐用于生产 较少(除非数据简单) 推荐(结构清晰,可扩展性强)
相关推荐
小冷coding6 小时前
【MySQL】MySQL 插入一条数据的完整流程(InnoDB 引擎)
数据库·mysql
鲨莎分不晴7 小时前
Redis 基本指令与命令详解
数据库·redis·缓存
专注echarts研发20年7 小时前
工业级 Qt 业务窗体标杆实现・ResearchForm 类深度解析
数据库·qt·系统架构
周杰伦的稻香9 小时前
MySQL中常见的慢查询与优化
android·数据库·mysql
冉冰学姐9 小时前
SSM学生社团管理系统jcjyw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·学生社团管理系统·多角色管理
nvd1110 小时前
深入分析:Pytest异步测试中的数据库会话事件循环问题
数据库·pytest
appearappear10 小时前
如何安全批量更新数据库某个字段
数据库
·云扬·11 小时前
MySQL 常见存储引擎详解及面试高频考点
数据库·mysql·面试
羊小猪~~11 小时前
【QT】--文件操作
前端·数据库·c++·后端·qt·qt6.3
神云瑟瑟11 小时前
看langchain理解python中的链式调用
python·langchain·链式调用