[探索Google AlloyDB for PostgreSQL:打造高性能AI数据库解决方案]

75 阅读2分钟

探索Google AlloyDB for PostgreSQL:打造高性能AI数据库解决方案

Google AlloyDB for PostgreSQL 是一种全托管的关系数据库服务,旨在提供卓越的性能、无缝集成和出色的可扩展性。它与 PostgreSQL 100% 兼容,为开发者提供强大的灵活性。通过与 Langchain 的集成,AlloyDB 能够支持 AI 驱动的体验,本文将介绍如何使用 AlloyDB for PostgreSQL 存储向量嵌入(vector embeddings)以及使用 AlloyDBVectorStore 类的方法。

主要内容

1. 环境准备

在开始之前,你需要准备以下环境:

  • 创建一个 Google Cloud 项目
  • 启用 AlloyDB API
  • 创建一个 AlloyDB 群集和实例
  • 创建一个 AlloyDB 数据库
  • 添加一个用户到数据库

2. 安装库

安装集成库 langchain-google-alloydb-pg 和用于嵌入服务的库 langchain-google-vertexai

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

3. 认证和配置

通过以下代码进行谷歌云的认证:

from google.colab import auth
auth.authenticate_user()

设置 Google Cloud 项目 ID,以便在笔记本中使用 Google Cloud 资源:

PROJECT_ID = "my-project-id"
!gcloud config set project {PROJECT_ID}

4. 使用 AlloyDBEngine 和 AlloyDBVectorStore

AlloyDBEngine 连接池

配置 AlloyDBEngine 以连接到数据库:

from langchain_google_alloydb_pg import AlloyDBEngine

engine = await AlloyDBEngine.afrom_instance(
    project_id=PROJECT_ID,
    region=REGION,
    cluster=CLUSTER,
    instance=INSTANCE,
    database=DATABASE,
)
初始化向量存储表

创建并初始化 AlloyDBVectorStore:

await engine.ainit_vectorstore_table(
    table_name=TABLE_NAME,
    vector_size=768  # 向量大小,适用于 VertexAI 模型
)

创建嵌入类实例并初始化 AlloyDBVectorStore:

from langchain_google_vertexai import VertexAIEmbeddings

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

from langchain_google_alloydb_pg import AlloyDBVectorStore

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

5. 代码示例

以下是完整的代码示例,展示如何添加文本、删除文本、搜索文档并使用向量索引加速查询:

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)

# 删除文本
await store.adelete([ids[1]])

# 文本搜索
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)

6. 常见问题和解决方案

  • API访问限制:在某些地区,访问Google API可能受限,建议开发者考虑使用API代理服务以提高访问稳定性。
  • 性能优化:使用向量索引(例如IVF Flat Index)可以显著加快向量搜索速度。

7. 总结和进一步学习资源

AlloyDB for PostgreSQL 是一个强大的数据库解决方案,特别适用于构建AI驱动的应用。通过本文的介绍和示例代码,你可以轻松上手并在项目中实现高效的数据存储和检索。

进一步学习资源:

参考资料

  • Google Cloud AlloyDB 产品页面
  • Langchain 文档

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