Cloud SQL for PostgreSQL은 Google Cloud Platform에서 PostgreSQL 관계형 데이터베이스를 설정, 유지 관리, 관리 및 운영할 수 있도록 지원하는 완전 관리형 데이터베이스 서비스입니다. Cloud SQL for PostgreSQL의 LangChain 통합을 활용하여 데이터베이스 애플리케이션을 확장하고 AI 기반 경험을 구축하세요.
이 노트북은 PostgresLoader 클래스를 사용하여 Cloud SQL for PostgreSQL로 Documents를 로드하는 방법을 다룹니다. GitHub에서 패키지에 대해 자세히 알아보세요. Open In Colab

시작하기 전에

이 노트북을 실행하려면 다음을 수행해야 합니다:

🦜🔗 라이브러리 설치

통합 라이브러리인 langchain_google_cloud_sql_pg를 설치합니다.
pip install -qU  langchain_google_cloud_sql_pg
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)

🔐 인증

이 노트북에 로그인한 IAM 사용자로 Google Cloud에 인증하여 Google Cloud Project에 액세스합니다.
  • Colab을 사용하여 이 노트북을 실행하는 경우 아래 셀을 사용하고 계속 진행하세요.
  • Vertex AI Workbench를 사용하는 경우 여기에서 설정 지침을 확인하세요.
from google.colab import auth

auth.authenticate_user()

☁ Google Cloud Project 설정

이 노트북 내에서 Google Cloud 리소스를 활용할 수 있도록 Google Cloud 프로젝트를 설정합니다. 프로젝트 ID를 모르는 경우 다음을 시도해 보세요:
  • gcloud config list를 실행합니다.
  • gcloud projects list를 실행합니다.
  • 지원 페이지를 참조하세요: 프로젝트 ID 찾기.
# @title Project { display-mode: "form" }
PROJECT_ID = "gcp_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 = "vector_store"  # @param {type: "string"}

Cloud SQL Engine

PostgreSQL을 document loader로 설정하기 위한 요구 사항 및 인수 중 하나는 PostgresEngine 객체입니다. PostgresEngine은 Cloud SQL for PostgreSQL 데이터베이스에 대한 연결 풀을 구성하여 애플리케이션에서 성공적인 연결을 가능하게 하고 업계 모범 사례를 따릅니다. PostgresEngine.from_instance()를 사용하여 PostgresEngine을 생성하려면 다음 4가지만 제공하면 됩니다:
  1. project_id : Cloud SQL 인스턴스가 위치한 Google Cloud Project의 Project ID.
  2. region : Cloud SQL 인스턴스가 위치한 Region.
  3. instance : Cloud SQL 인스턴스의 이름.
  4. database : Cloud SQL 인스턴스에서 연결할 데이터베이스의 이름.
기본적으로 IAM 데이터베이스 인증이 데이터베이스 인증 방법으로 사용됩니다. 이 라이브러리는 환경에서 가져온 Application Default Credentials (ADC)에 속한 IAM principal을 사용합니다. 선택적으로, 사용자 이름과 비밀번호를 사용하여 Cloud SQL 데이터베이스에 액세스하는 기본 제공 데이터베이스 인증도 사용할 수 있습니다. PostgresEngine.from_instance()에 선택적 userpassword 인수를 제공하기만 하면 됩니다:
  • user : 기본 제공 데이터베이스 인증 및 로그인에 사용할 데이터베이스 사용자
  • password : 기본 제공 데이터베이스 인증 및 로그인에 사용할 데이터베이스 비밀번호.
참고: 이 튜토리얼은 async 인터페이스를 보여줍니다. 모든 async 메서드에는 해당하는 sync 메서드가 있습니다.
from langchain_google_cloud_sql_pg import PostgresEngine

engine = await PostgresEngine.afrom_instance(
    project_id=PROJECT_ID,
    region=REGION,
    instance=INSTANCE,
    database=DATABASE,
)

PostgresLoader 생성

from langchain_google_cloud_sql_pg import PostgresLoader

# Creating a basic PostgreSQL object
loader = await PostgresLoader.create(engine, table_name=TABLE_NAME)

기본 테이블을 통해 Documents 로드

loader는 첫 번째 열을 page_content로, 다른 모든 열을 metadata로 사용하여 테이블에서 Documents 목록을 반환합니다. 기본 테이블은 첫 번째 열을 page_content로, 두 번째 열을 metadata(JSON)로 갖습니다. 각 행은 하나의 document가 됩니다. documents에 id를 포함하려면 직접 추가해야 합니다.
from langchain_google_cloud_sql_pg import PostgresLoader

# Creating a basic PostgresLoader object
loader = await PostgresLoader.create(engine, table_name=TABLE_NAME)

docs = await loader.aload()
print(docs)

사용자 정의 테이블/metadata 또는 사용자 정의 page content 열을 통해 documents 로드

loader = await PostgresLoader.create(
    engine,
    table_name=TABLE_NAME,
    content_columns=["product_name"],  # Optional
    metadata_columns=["id"],  # Optional
)
docs = await loader.aload()
print(docs)

page content 형식 설정

loader는 Documents 목록을 반환하며, 행당 하나의 document가 있고 page content는 지정된 문자열 형식(예: text(공백으로 구분된 연결), JSON, YAML, CSV 등)으로 제공됩니다. JSON 및 YAML 형식에는 헤더가 포함되지만 text 및 CSV에는 필드 헤더가 포함되지 않습니다.
loader = await PostgresLoader.create(
    engine,
    table_name="products",
    content_columns=["product_name", "description"],
    format="YAML",
)
docs = await loader.aload()
print(docs)

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I