Google Cloud SQL for PostgreSQL - PostgresDocumentStore
和 PostgresIndexStore
¶
Cloud SQL 是一项完全托管的关系型数据库服务,提供高性能、无缝集成和出色的可扩展性。它提供 MySQL、PostgreSQL 和 SQL Server 数据库引擎。利用 Cloud SQL 的 LlamaIndex 集成,扩展您的数据库应用以构建 AI 驱动的体验。
本 Notebook 详细介绍了如何使用 Cloud SQL for PostgreSQL
通过 PostgresDocumentStore
和 PostgresIndexStore
类来存储文档和索引。
在 GitHub 上了解有关此软件包的更多信息。
开始之前¶
要运行此 Notebook,您需要执行以下操作:
🦙 库安装¶
安装集成库 llama-index-cloud-sql-pg
和嵌入服务的库 llama-index-embeddings-vertex
。
%pip install --upgrade --quiet llama-index-cloud-sql-pg llama-index-llms-vertex llama-index
仅限 Colab: 取消注释以下单元格以重启内核或使用按钮重启内核。对于 Vertex AI Workbench,您可以使用顶部的按钮重启终端。
# # Automatically restart kernel after installs so that your environment can access the new packages
# import IPython
# app = IPython.Application.instance()
# app.kernel.do_shutdown(True)
from google.colab import auth
auth.authenticate_user()
# @markdown Please fill in the value below with your Google Cloud project ID and then run the cell.
PROJECT_ID = "my-project-id" # @param {type:"string"}
# Set the project id
!gcloud config set project {PROJECT_ID}
基本用法¶
设置 Cloud SQL 数据库值¶
在Cloud SQL 实例页面中查找您的数据库值。
# @title Set Your Values Here { display-mode: "form" }
REGION = "us-central1" # @param {type: "string"}
INSTANCE = "my-primary" # @param {type: "string"}
DATABASE = "my-database" # @param {type: "string"}
TABLE_NAME = "document_store" # @param {type: "string"}
USER = "postgres" # @param {type: "string"}
PASSWORD = "my-password" # @param {type: "string"}
PostgresEngine 连接池¶
将 Cloud SQL 设置为向量存储的要求和参数之一是需要一个 PostgresEngine
对象。PostgresEngine
配置了与您的 Cloud SQL 数据库的连接池,从而使您的应用程序能够成功连接并遵循行业最佳实践。
要使用 PostgresEngine.from_instance()
创建一个 PostgresEngine
,您只需要提供以下 4 项信息:
project_id
: Cloud SQL 实例所在的 Google Cloud 项目 ID。region
: Cloud SQL 实例所在的区域。instance
: Cloud SQL 实例的名称。database
: 要连接的 Cloud SQL 实例上的数据库名称。
默认情况下,将使用IAM 数据库身份验证作为数据库身份验证方法。此库使用来自环境的应用默认凭据 (ADC) 所属的 IAM 主体进行身份验证。
有关 IAM 数据库身份验证的更多信息,请参阅:
另外,也可以使用内建数据库身份验证(使用用户名和密码)来访问 Cloud SQL 数据库。只需向 PostgresEngine.from_instance()
提供可选的 user
和 password
参数即可:
user
: 用于内建数据库身份验证和登录的数据库用户。password
: 用于内建数据库身份验证和登录的数据库密码。
注意: 本教程演示了异步接口。所有异步方法都有对应的同步方法。
from llama_index_cloud_sql_pg import PostgresEngine
engine = await PostgresEngine.afrom_instance(
project_id=PROJECT_ID,
region=REGION,
instance=INSTANCE,
database=DATABASE,
user=USER,
password=PASSWORD,
)
初始化表¶
PostgresDocumentStore
类需要一个数据库表。PostgresEngine
引擎有一个帮助方法 init_doc_store_table()
,可用于为您创建一个具有正确模式的表。
await engine.ainit_doc_store_table(
table_name=TABLE_NAME,
)
可选提示: 💡¶
您还可以通过在传递 table_name
的任何地方传递 schema_name
来指定模式名称。
SCHEMA_NAME = "my_schema"
await engine.ainit_doc_store_table(
table_name=TABLE_NAME,
schema_name=SCHEMA_NAME,
)
初始化默认的 PostgresDocumentStore¶
from llama_index_cloud_sql_pg import PostgresDocumentStore
doc_store = await PostgresDocumentStore.create(
engine=engine,
table_name=TABLE_NAME,
# schema_name=SCHEMA_NAME
)
下载数据¶
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
加载文档¶
from llama_index.core import SimpleDirectoryReader
documents = SimpleDirectoryReader("./data/paul_graham").load_data()
print("Document ID:", documents[0].doc_id)
解析为节点¶
from llama_index.core.node_parser import SentenceSplitter
nodes = SentenceSplitter().get_nodes_from_documents(documents)
设置 IndexStore¶
from llama_index_cloud_sql_pg import PostgresIndexStore
INDEX_TABLE_NAME = "index_store"
await engine.ainit_index_store_table(
table_name=INDEX_TABLE_NAME,
)
index_store = await PostgresIndexStore.create(
engine=engine,
table_name=INDEX_TABLE_NAME,
# schema_name=SCHEMA_NAME
)
添加到文档存储¶
from llama_index.core import StorageContext
storage_context = StorageContext.from_defaults(
docstore=doc_store, index_store=index_store
)
storage_context.docstore.add_documents(nodes)
与索引一起使用¶
文档存储可以与多个索引一起使用。每个索引都使用相同的底层节点。
from llama_index.core import Settings, SimpleKeywordTableIndex, SummaryIndex
from llama_index.llms.vertex import Vertex
Settings.llm = Vertex(model="gemini-1.5-flash", project=PROJECT_ID)
summary_index = SummaryIndex(nodes, storage_context=storage_context)
keyword_table_index = SimpleKeywordTableIndex(
nodes, storage_context=storage_context
)
查询索引¶
query_engine = summary_index.as_query_engine()
response = query_engine.query("What did the author do?")
print(response)
加载现有索引¶
文档存储可以与多个索引一起使用。每个索引都使用相同的底层节点。
# note down index IDs
list_id = summary_index.index_id
keyword_id = keyword_table_index.index_id
from llama_index.core import load_index_from_storage
# re-create storage context
storage_context = StorageContext.from_defaults(
docstore=doc_store, index_store=index_store
)
# load indices
summary_index = load_index_from_storage(
storage_context=storage_context, index_id=list_id
)
keyword_table_index = load_index_from_storage(
storage_context=storage_context, index_id=keyword_id
)