AnalyticDB

AnalyticDB

Alibaba Cloud의 AnalyticDB for PostgreSQL을 LlamaIndex 벡터 스토어로 사용하는 데모예요. 대용량 데이터를 온라인으로 분석하도록 설계된 MPP 데이터 웨어하우스에 벡터를 저장하고 질의하는 흐름을 볼게요.

출처: 문서

본문

AnalyticDB for PostgreSQL은 대용량 데이터를 온라인으로 분석하도록 설계된 MPP(대규모 병렬 처리) 데이터 웨어하우스 서비스입니다.

이 노트북을 실행하려면 클라우드에서 실행 중인 AnalyticDB for PostgreSQL 인스턴스가 필요합니다(common-buy.aliyun.com에서 받을 수 있습니다).

인스턴스를 만든 뒤에는 API 또는 인스턴스 상세 웹페이지의 'Account Management'를 통해 관리자 계정을 만들어야 합니다.

llama-index가 설치돼 있는지 확인해야 합니다:

%pip install llama-index-vector-stores-analyticdb
!pip install llama-index

파라미터 제공

import os
import getpass


# alibaba cloud ram ak and sk:
alibaba_cloud_ak = ""
alibaba_cloud_sk = ""


# instance information:
region_id = "cn-hangzhou"  # region id of the specific instance
instance_id = "gp-xxxx"  # adb instance id
account = "test_account"  # instance account name created by API or 'Account Management' at the instance detail web page
account_password = ""  # instance account password

필요 패키지 의존성 import

from llama_index.core import (
    VectorStoreIndex,
    SimpleDirectoryReader,
    StorageContext,
)
from llama_index.vector_stores.analyticdb import AnalyticDBVectorStore

예제 데이터 로드

!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'

데이터 읽기

# load documents
documents = SimpleDirectoryReader("./data/paul_graham/").load_data()
print(f"Total documents: {len(documents)}")
print(f"First document, id: {documents[0].doc_id}")
print(f"First document, hash: {documents[0].hash}")
print(
    "First document, text"
    f" ({len(documents[0].text)} characters):\n{'='*20}\n{documents[0].text[:360]} ..."
)

AnalyticDB Vector Store 객체 생성

analytic_db_store = AnalyticDBVectorStore.from_params(
    access_key_id=alibaba_cloud_ak,
    access_key_secret=alibaba_cloud_sk,
    region_id=region_id,
    instance_id=instance_id,
    account=account,
    account_password=account_password,
    namespace="llama",
    collection="llama",
    metrics="cosine",
    embedding_dimension=1536,
)

문서로부터 인덱스 구축

storage_context = StorageContext.from_defaults(vector_store=analytic_db_store)


index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context
)

인덱스로 쿼리

query_engine = index.as_query_engine()
response = query_engine.query("Why did the author choose to work on AI?")


print(response.response)

컬렉션 삭제

analytic_db_store.delete_collection()

AnalyticDBVectorStore.from_params로 Alibaba Cloud RAM 자격증명(access key/secret), 인스턴스 정보, namespace·collection 이름, metrics(여기서는 cosine), embedding_dimension을 지정해 스토어를 만들고, 이를 벡터 스토어로 사용해 문서들을 인덱싱합니다.

더 알아보기 (Learn more)