用LangChain在Google BigQuery中实现高效向量搜索

87 阅读2分钟

引言

在大数据时代,文本数据的管理和搜索变得尤为重要。Google BigQuery向量搜索允许您使用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

配置您的项目ID:

! gcloud config set project {PROJECT_ID}

设置地区

指定BigQuery使用的区域:

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

设置数据集和表名

这将是您的BigQuery Vector Store:

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

创建嵌入类实例

确保启用Vertex AI API:

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)

常见问题和解决方案

  • 网络限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。
  • 数据同步:使用.to_vertex_fs_vector_store()方法在低延迟应用中进行数据同步。

总结和进一步学习资源

本文介绍了如何在Google BigQuery中使用LangChain实现向量搜索。你可以探索Google Cloud的向量存储概念指南向量存储使用指南以获取更多信息。

参考资料

  • Google Cloud 官方文档
  • LangChain 文档

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

---END---