Langchain的向量存储 - Document与简单字符串列表的区别

打印 上一主题 下一主题

主题 526|帖子 526|积分 1578


媒介

在 LangChain 中,使用简单字符串列表(如 texts 列表)和使用 Document 类表示文本有一些关键区别。重要区别在于数据的布局化程度和附加信息的存储本领。以下是具体的比较:
一、 使用简单字符串列表

1. 示例

  1. texts = ["Hello world", "Machine learning is fun", "LangChain is awesome"]
复制代码
2. 优点

1) 简单直接:对于仅包含文本内容的情况,使用字符串列表非常简单明确。
2) 快速原型:对于快速创建和处理小规模文本数据,字符串列表是一个方便的选择。
3. 缺点

1) 缺乏布局:字符串列表无法存储与文本相关的元数据(如标题、作者、时间等)。
2) 扩展性差:当需要存储复杂的信息或举行更复杂的操纵时,字符串列表的机动性较低。

二、 使用 Document 类

1. 示例

  1. from langchain_core.documents import Document
  2. doc = Document(
  3.     page_content="Machine learning is a method of data analysis that automates analytical model building.",
  4.     metadata={"title": "Introduction to Machine Learning", "author": "John Doe", "date": "2024-06-06"}
  5. )
复制代码
2. 优点

1) 布局化数据:Document 类允许将文本内容和元数据一起存储,使数据更加布局化。
2) 丰富的元数据支持:可以附加任意多的元数据,这对于需要具体上下文信息的应用非常有效。
3) 同一接口:与 LangChain 的其他组件(如向量存储、检索系统等)无缝集成,简化处理流程。
4) 机动性:可以根据需要扩展和修改,顺应更复杂的应用场景。
3. 缺点

1) 复杂性增长:相比简单的字符串列表,使用 Document 类需要更多的代码和设置。
2) 学习曲线:需要了解 Document 类的使用方法和相关的 API。

三、 综合比较

特性简单字符串列表 (texts)Document 类简洁性高较低布局化数据支持低高元数据支持无支持丰富的元数据扩展性差高与 LangChain 集成较简单更强实用场景简单的文本处理和快速原型计划需要附加信息和更复杂操纵的文本处理和分析
四、 示例对比

1:简单字符串列表

  1. texts = ["Hello world", "Machine learning is fun", "LangChain is awesome"]
  2. # 假设我们有一个嵌入模型from langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()# 将文本数据转换为向量vectors = [embeddings.embed(text) for text in texts]# 使用 FAISS 存储向量from langchain.vectorstores import FAISSvector_store = FAISS()for vector, text in zip(vectors, texts):    vector_store.add_vector(vector, text)# 查询相似文本query_text = "I love learning"query_vector = embeddings.embed(query_text)results = vector_store.similarity_search(query_vector)print("Most similar texts:", results)
复制代码
2:使用 Document 类

  1. from langchain_core.documents import Document
  2. # 创建一些文档对象
  3. docs = [
  4.     Document(
  5.         page_content="Machine learning is a method of data analysis that automates analytical model building.",
  6.         metadata={"title": "Introduction to Machine Learning", "author": "John Doe", "date": "2024-06-06"}
  7.     ),
  8.     Document(
  9.         page_content="LangChain is a powerful framework for building applications with large language models.",
  10.         metadata={"title": "LangChain Overview", "author": "Jane Doe", "date": "2024-06-05"}
  11.     )
  12. ]
  13. # 假设我们有一个嵌入模型
  14. from langchain.embeddings import OpenAIEmbeddings
  15. embeddings = OpenAIEmbeddings()
  16. # 将文档内容转换为向量
  17. vectors = [embeddings.embed(doc.page_content) for doc in docs]
  18. # 使用 FAISS 存储向量
  19. from langchain.vectorstores import FAISS
  20. vector_store = FAISS()
  21. for vector, doc in zip(vectors, docs):
  22.     vector_store.add_vector(vector, doc)
  23. # 查询相似文档
  24. query_text = "Data analysis automation"
  25. query_vector = embeddings.embed(query_text)
  26. results = vector_store.similarity_search(query_vector)
  27. print("Most similar documents:", results)
复制代码

总结

选择使用简单字符串列表还是 Document 类,重要取决于具体的应用需求。如果仅需处理简单的文本数据,可以选择字符串列表;如果需要更丰富的上下文信息和更复杂的操纵,Document 类会是更符合的选择。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表