推动你的搜索引擎:使用Vespa和LangChain实现高效搜索
引言
在现代信息检索中,结合经典检索技术和向量搜索的混合搜索方法越来越受欢迎。Vespa作为一个功能齐全的搜索引擎和向量数据库,能够同时支持向量搜索、词法搜索和结构化数据搜索。这篇文章将深入探讨如何使用Vespa.ai作为LangChain的向量存储,并提供从基础安装到高级查询的实用指导。
主要内容
Vespa安装及应用创建
首先,需要安装基础组件:
%pip install --upgrade --quiet pyvespa
%pip install -qU langchain-community
使用pyvespa
包可以连接到Vespa Cloud实例或者本地Docker实例。我们将在本地创建和部署一个新的Vespa应用。
from vespa.package import ApplicationPackage, Field, RankProfile
# 创建Vespa应用包
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:
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)
常见问题和解决方案
- 网络访问问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来访问Vespa服务。
- 嵌入向量尺寸不匹配:确保向量存储和查询使用相同的嵌入模型。
总结和进一步学习资源
Vespa为现代信息检索提供了强大的工具,结合LangChain,开发者可以快速实现复杂的检索功能。更多文档和参考资源可以帮助开发者深入理解和优化其应用。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—