다음을 통해 공유


Azure Database for PostgreSQL에 Azure AI 기능 통합

적용 대상: Azure Database for PostgreSQL - 유연한 서버

이 확장은 azure_ai Azure AI 서비스의 기능을 통합하여 LLM(대규모 언어 모델) 을 사용하고 Azure Database for PostgreSQL 데이터베이스 내에서 생성 AI 애플리케이션을 빌드하는 기능을 추가 합니다.

생성형 AI는 자연어 입력을 기반으로 하여 독창적인 콘텐츠를 생성하도록 LLM이 학습되는 인공 지능의 한 형태입니다. 확장을 사용하면 azure_ai 생성 AI의 기능을 사용하여 데이터베이스에서 직접 자연어 쿼리를 처리할 수 있습니다.

이 문서에서는 azure_ai 확장을 사용하여 Azure Database for PostgreSQL의 유연한 서버 환경에 강력한 AI 기능을 추가하는 방법을 설명합니다. 확장을 사용하여 Azure OpenAIAzure AI Language 서비스를 데이터베이스에 통합하는 방법을 보여 줍니다.

필수 구성 요소

  • Azure 구독. 체험 계정 만들기

  • 원하는 Azure 구독의 Azure OpenAI에 대한 액세스 권한. 현재 애플리케이션은 이 서비스에 대한 액세스 권한을 부여합니다. Azure OpenAI 서비스에 대한 제한된 액세스에서 양식을 완료하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다.

  • Azure OpenAI 리소스에 text-embedding-ada-002 모델(버전 2)이 배포되어 있습니다. 이 모델은 현재 특정 지역에서만 사용할 수 있습니다. 이 리소스가 없는 경우 리소스 만들기 프로세스는 Azure OpenAI 리소스 배포 가이드에서 설명하고 있습니다.

  • Azure AI 언어 리소스 언어 리소스가 없는 경우 요약을 위해 빠른 시작에 제공된 지침에 따라 Azure Portal에서 리소스를 만들 수 있습니다. 무료 가격 책정 계층(Free F0)을 사용하여 서비스를 사용해 보고 나중에 프로덕션에 대한 유료 계층으로 업그레이드할 수 있습니다.

  • Azure 구독의 Azure Database for PostgreSQL 유연한 서버입니다. 이 리소스가 없는 경우 Azure Database for PostgreSQL 유연한 서버 만들기를 참조하세요.

Azure Cloud Shell에서 psql을 사용하여 데이터베이스에 연결

웹 브라우저에서 Azure Cloud Shell을 엽니다. 환경으로 Bash를 선택합니다. 메시지가 표시되면 Azure Database for PostgreSQL 데이터베이스에 사용한 구독을 선택한 다음 스토리지 만들기를 선택합니다.

데이터베이스 연결 세부 정보를 검색하려면 다음을 수행합니다.

  1. Azure Portal에서 Azure Database for PostgreSQL 유연한 서버로 이동합니다.

  2. 왼쪽 메뉴의 설정에서 연결을 선택합니다. 연결 세부 정보 블록을 복사합니다.

  3. 환경 변수에 대해 복사한 선언 줄을 Azure Cloud Shell 터미널에 붙여넣습니다. 토큰을 {your-password} 데이터베이스를 만들 때 설정한 암호로 바꿉다.

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    
  4. psql 명령줄 도구를 사용하여 데이터베이스에 연결합니다. 프롬프트에서 다음 명령을 입력합니다.

    psql
    

azure_ai 확장 설치

확장을 azure_ai 사용하여 Azure OpenAI 및 Azure Cognitive Services를 데이터베이스에 통합할 수 있습니다. 자세한 내용은 Azure Database for PostgreSQL에서 Azure OpenAI를 사용하여 벡터 포함 생성을 참조하세요.

데이터베이스에서 확장을 사용하도록 설정하려면 다음을 수행합니다.

  1. 허용 확장에 설명된 대로 허용 목록에 확장을 추가합니다.

  2. 확장을 사용 azure_ai 하려는 데이터베이스에서 확장 만들기에 설명된 대로 확장을 설치합니다.

azure_ai 확장의 개체를 확인하세요.

확장에 포함된 개체를 azure_ai 검토하면 확장이 제공하는 기능을 더 잘 이해할 수 있습니다. 명령 프롬프트에서 psql\dx 메타 명령을 사용하여 확장의 개체를 나열할 수 있습니다.

\dx+ azure_ai

메타 명령 출력에서는 azure_ai 확장에서 세 개의 스키마, 여러 UDF(사용자 정의 함수) 및 여러 복합 형식을 데이터베이스에 만든다는 것을 보여줍니다. 다음 표에서는 확장이 추가하는 스키마에 대해 설명합니다.

스키마 설명
azure_ai 구성 테이블과 상호 작용을 위한 UDF가 있는 주 스키마를 제공합니다.
azure_openai Azure OpenAI 엔드포인트를 호출할 수 있는 UDF가 포함됩니다.
azure_cognitive 데이터베이스를 Azure Cognitive Services와 통합하는 데 관련된 UDF 및 복합 형식을 제공합니다.

함수와 형식은 모두 스키마 중 하나와 연결됩니다. azure_ai 스키마에 정의된 함수를 검토하려면 \df 메타 명령을 사용하세요. 함수를 표시해야 하는 스키마를 지정합니다. \x auto 명령 앞의 \df 명령은 확장된 디스플레이를 자동으로 켜고 끄기 때문에 명령의 출력을 Azure Cloud Shell에서 더 쉽게 볼 수 있습니다.

\x auto
\df+ azure_ai.*

이 함수를 azure_ai.set_setting() 사용하여 Azure AI 서비스에 대한 엔드포인트 및 중요 값을 설정합니다. 을 사용하여 할당합니다. azure_ai.get_setting() 함수는 set_setting() 함수를 사용하여 설정한 값을 검색할 수 있는 방법을 제공합니다. 보려는 설정의 키를 허용합니다. 두 방법 모두에서 키는 다음 중 하나여야 합니다.

설명
azure_openai.endpoint 지원되는 Azure OpenAI 엔드포인트(예: https://example.openai.azure.com).
azure_openai.subscription_key Azure OpenAI 리소스에 대한 구독 키입니다.
azure_cognitive.endpoint 지원되는 Cognitive Services 엔드포인트(예: https://example.cognitiveservices.azure.com)
azure_cognitive.subscription_key Cognitive Services 리소스에 대한 구독 키

중요합니다

API 키를 포함한 Azure AI 서비스에 대한 연결 정보는 데이터베이스 azure_ai 의 구성 테이블에 저장되므로 확장은 해당 역할이 있는 사용자만 이 정보를 보호하고 액세스할 수 있도록 하기 위해 호출 azure_ai_settings_manager 되는 역할을 정의합니다. 이 역할을 통해 확장과 관련된 설정을 읽고 쓸 수 있습니다.

azure_ai_settings_manager 역할의 슈퍼 사용자와 멤버만 azure_ai.get_setting()azure_ai.set_setting() 함수를 호출할 수 있습니다. Azure Database for PostgreSQL에서는 모든 관리자 사용자가 azure_ai_settings_manager 역할을 가지고 있습니다.

Azure OpenAI를 사용하여 벡터 포함 생성

azure_ai 확장의 azure_openai 스키마를 사용하면 Azure OpenAI를 사용하여 텍스트 값에 대한 벡터 포함을 만들 수 있습니다. 이 스키마를 사용하여 데이터베이스에서 직접 Azure OpenAI를 사용하여 포함을 생성 하여 입력 텍스트의 벡터 표현을 만들 수 있습니다. 그런 다음 이러한 표현을 벡터 유사성 검색에 사용하고 기계 학습 모델에서 사용할 수 있습니다.

포함은 기계 학습 모델을 사용하여 관련 정보에 대한 밀접한 관련성을 평가하는 기술입니다. 이 기술을 사용하면 알고리즘이 패턴을 식별하고 정확한 예측을 수행할 수 있도록 데이터 간의 관계 및 유사성을 효율적으로 식별할 수 있습니다.

Azure OpenAI 엔드포인트 및 키 설정

함수를 azure_openai 사용하기 전에 Azure OpenAI 서비스 엔드포인트 및 키를 사용하여 확장을 구성합니다.

  1. Azure Portal에서 Azure OpenAI 리소스로 이동합니다. 왼쪽 메뉴의 리소스 관리에서 키 및 엔드포인트를 선택합니다.

  2. 엔드포인트와 액세스 키를 복사합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

  3. 다음 명령에서 {endpoint} 토큰과 {api-key} 토큰을 Azure Portal에서 가져온 값으로 바꿉니다. 그런 다음 명령 프롬프트에서 psql 명령을 실행하여 구성 테이블에 값을 추가합니다.

    SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');
    
  4. 구성 테이블에 기록된 설정을 확인합니다.

    SELECT azure_ai.get_setting('azure_openai.endpoint');
    SELECT azure_ai.get_setting('azure_openai.subscription_key');
    

이제 azure_ai 확장이 Azure OpenAI 계정에 연결되고 벡터 포함을 생성할 준비가 되었습니다.

샘플 데이터를 이용해 데이터베이스 작성.

이 문서에서는 BillSum 데이터 세트 의 작은 하위 집합을 사용하여 벡터를 생성하기 위한 샘플 텍스트 데이터를 제공합니다. 이 데이터 세트는 미국 의회 및 캘리포니아 주 법안 목록을 제공합니다. Azure 샘플용 bill_sum_data.csvGitHub 리포지토리에서 이 데이터가 포함된 파일을 다운로드할 수 있습니다.

데이터베이스에서 샘플 데이터를 호스트하려면 다음과 같은 테이블을 만듭니다 bill_summaries.

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

명령 프롬프트에서 psql PostgreSQL COPY 명령을 사용하여 CSV 파일 bill_summaries 의 샘플 데이터를 테이블에 로드합니다. CSV 파일의 첫 번째 행이 머리글 행임을 지정합니다.

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

벡터 지원 사용

azure_ai 익스텐션을 사용하여 입력 텍스트에 대한 임베딩을 생성할 수 있습니다. 생성된 벡터를 데이터베이스의 나머지 데이터와 함께 저장할 수 있도록 하려면 확장을 설치 pgvector 해야 합니다. 데이터베이스에서 벡터 지원을 사용하도록 설정하는 방법에 대한 설명서의 지침을 따릅니다.

데이터베이스에 벡터 지원이 추가되면 vector 데이터 유형을 사용하여 bill_summaries 테이블에 임베딩을 저장할 새 열을 추가합니다. 모델은 text-embedding-ada-002 1,536개의 차원을 가진 벡터를 생성하므로 벡터 크기로 지정 1536 해야 합니다.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

벡터 생성 및 저장

이제 bill_summaries 테이블이 포함을 저장할 준비가 되었습니다. azure_openai.create_embeddings() 함수를 사용하여 bill_text 필드를 위한 벡터를 만들고, 이를 bill_summaries 테이블의 새로 생성된 bill_vector 열에 삽입합니다.

함수를 create_embeddings() 사용하기 전에 다음 명령을 실행하여 검사하고 필요한 인수를 검토합니다.

\df+ azure_openai.*

명령 출력의 \df+ azure_openai.* 속성은 Argument data types 함수에서 예상하는 인수 목록을 표시합니다.

인수 유형 기본값 설명
deployment_name text Azure AI Foundry 포털에서 text-embeddings-ada-002 모델을 포함하는 배포의 이름입니다.
input text 포함을 만드는 데 사용되는 입력 텍스트입니다.
timeout_ms integer 3600000 시간 제한(밀리초)이며, 그 후 작업이 중지됩니다.
throw_on_error boolean true 함수가 오류 발생 시 래핑 트랜잭션의 롤백을 초래하는 예외를 throw해야 하는지 여부를 나타내는 플래그입니다.

첫 번째 인수는 deployment_name 포함 모델이 Azure OpenAI 계정에 배포될 때 할당된 값입니다. 이 값을 검색하려면 다음을 수행합니다.

  1. Azure Portal에서 Azure OpenAI 리소스로 이동합니다.

  2. 왼쪽 메뉴의 리소스 관리 아래에서 모델 배포를 선택하여 Azure AI Foundry 포털을 엽니다.

  3. Azure AI Foundry 포털에서 배포를 선택합니다. 배포 창에서 text-embedding-ada-002 모델 배포에 연결된 배포 이름 값을 복사합니다.

AI 통합을 위한 포함 배포의 스크린샷.

이 정보를 사용하여 쿼리를 실행하여 테이블의 각 레코드를 업데이트합니다 bill_summaries . azure_openai.create_embeddings() 함수를 사용하여 bill_text 필드에 생성된 벡터 포함을 bill_vector 열에 삽입합니다. {your-deployment-name}을 Azure AI 파운드리 포털의 배포 창에서 복사한 배포 이름 값으로 바꿉니다. 그런 후 다음 명령을 실행합니다.

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

다음 쿼리를 실행하여 테이블의 첫 번째 레코드에 대해 생성된 포함을 확인합니다. 출력을 쉽게 읽을 수 없는 경우 먼저 \x를 실행할 수 있습니다.

SELECT bill_vector FROM bill_summaries LIMIT 1;

각 임베딩(embedding)은 부동 소수점 숫자의 벡터입니다. 벡터 공간의 두 포함 사이의 거리는 원래 형식의 두 입력 간의 의미 체계 유사성과 상관 관계가 있습니다.

벡터 유사성은 두 항목이 벡터로 표시하여 얼마나 유사한지 측정하는 방법입니다. 벡터는 일련의 숫자입니다. 종종 LLM을 통해 검색을 수행하는 데 사용됩니다.

벡터 유사성은 일반적으로 다음과 같은 거리 메트릭을 통해 계산됩니다.

  • 유클리드 거리: n차원 공간에서 두 벡터 사이의 직선 거리를 측정합니다.
  • 코사인 유사성: 두 벡터 사이의 각도 코사인을 측정합니다.

코사인 거리 및 HNSW(계층적 탐색 가능한 Small World)를 통해 인덱스를 bill_summaries에 생성하여 vector 필드를 보다 효율적으로 검색할 수 있습니다. HNSW를 사용하면 pgvector에서 최신 그래프 기반 알고리즘을 사용하여 가장 인접한 항목 쿼리를 근사화할 수 있습니다.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

이제 모든 것이 준비되었으므로 데이터베이스에 대해 코사인 유사성 검색 쿼리를 실행할 준비가 되었습니다.

다음 쿼리에서는 입력 질문에 대한 임베딩이 생성된 후 벡터 배열(::vector)로 변환됩니다. 벡터 배열을 사용하면 테이블에 저장된 bill_summaries 벡터와 질문을 비교할 수 있습니다.

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

쿼리는 벡터 연산자를<=> 사용합니다. 이 연산자는 다차원 공간에서 두 벡터 사이의 거리를 계산하는 데 사용되는 코사인 거리 연산자를 나타냅니다.

Azure Cognitive Services 통합

확장 azure_aiazure_cognitive 스키마에 포함된 Azure AI 서비스 통합은 데이터베이스에서 직접 액세스할 수 있는 풍부한 AI 언어 기능 세트를 제공합니다. 이러한 기능에는 감정 분석, 언어 감지, 핵심 구 추출, 엔터티 인식 및 텍스트 요약이 포함됩니다. 이러한 기능에 대한 액세스는 Azure AI 언어 서비스를 통해 사용하도록 설정됩니다.

확장을 통해 액세스할 수 있는 전체 Azure AI 기능을 검토하려면 Azure Cognitive Services와 Azure Database for PostgreSQL 통합을 참조하세요.

Azure AI 언어 서비스 엔드포인트 및 키 설정

함수와 azure_openai 마찬가지로 확장을 사용하여 azure_ai Azure AI 서비스에 대한 호출을 성공적으로 수행하려면 Azure AI Language Service 리소스에 대한 엔드포인트와 키를 제공해야 합니다.

  1. Azure Portal에서 언어 서비스 리소스로 이동합니다.

  2. 왼쪽 메뉴의 리소스 관리에서 키 및 엔드포인트를 선택합니다.

  3. 엔드포인트와 액세스 키를 복사합니다. KEY1 또는 KEY2를 사용할 수 있습니다.

  4. psql 명령 프롬프트에서 다음 명령을 실행하여 구성 테이블에 값을 추가합니다. {endpoint}{api-key} 토큰을 Azure Portal에서 검색한 값으로 바꿉니다.

    SELECT azure_ai.set_setting('azure_cognitive.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_cognitive.subscription_key', '{api-key}');
    

청구서 요약

확장 함수 azure_aiazure_cognitive 일부 기능을 보여 주려면 각 청구서에 대한 요약을 생성할 수 있습니다. 스키마는 azure_cognitive 텍스트를 요약하는 두 가지 함수를 제공합니다.

  • summarize_abstractive: 추상적 요약은 입력 텍스트에서 주요 개념을 캡처하지만 동일한 단어를 사용하지 않을 수 있는 요약을 생성합니다.
  • summarize_extractive: 추출 요약은 입력 텍스트에서 중요한 문장을 추출하여 요약을 어셈블합니다.

Azure AI 언어 서비스의 기능을 사용하여 새 원본 콘텐츠를 생성하려면 summarize_abstractive 함수를 사용하여 텍스트 입력 요약을 만듭니다. 이번에는 psql\df 메타 명령을 다시 사용하여 azure_cognitive.summarize_abstractive 함수를 구체적으로 살펴보세요.

\df azure_cognitive.summarize_abstractive

명령 출력의 \df azure_cognitive.summarize_abstractive 속성은 Argument data types 함수에서 예상하는 인수 목록을 표시합니다.

인수 유형 기본값 설명
text text 요약할 입력 텍스트입니다.
language text 입력 텍스트가 기록되는 언어의 두 글자 ISO 639-1 표현입니다. 허용되는 값은 언어 기능에 대한 언어 지원을 확인하세요.
timeout_ms integer 3600000 시간 제한(밀리초)이며, 그 후 작업이 중지됩니다.
throw_on_error boolean true 함수가 오류 발생 시 래핑 트랜잭션의 롤백을 초래하는 예외를 throw해야 하는지 여부를 나타내는 플래그입니다.
sentence_count integer 3 생성된 요약에 포함할 최대 문장 수입니다.
disable_service_logs boolean false 언어 서비스 로그를 사용하지 않도록 설정하는 설정입니다. 언어 서비스는 문제 해결을 위해 입력 텍스트를 48시간 동안 기록합니다. 입력 로깅을 사용하지 않도록 true로 설정하면 발생하는 문제를 조사하는 기능이 제한될 수 있습니다. 자세한 내용은 Cognitive Services 규정 준수 및 개인 정보 취급 방침Microsoft 책임 AI 원칙을 참조하세요.

함수에는 summarize_abstractive 다음과 같은 인수 azure_cognitive.summarize_abstractive(text TEXT, language TEXT)가 필요합니다.

테이블에 대한 bill_summaries 다음 쿼리는 이 함수를 summarize_abstractive 사용하여 청구서 텍스트에 대한 새 한 문장 요약을 생성합니다. 이를 통해 생성 AI의 기능을 쿼리에 직접 통합할 수 있습니다.

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

이 함수를 사용하여 데이터베이스 테이블에 데이터를 쓸 수도 있습니다. 데이터베이스에 bill_summaries 한 문장 요약을 저장하기 위한 새 열을 추가하도록 테이블을 수정합니다.

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

다음으로 테이블을 요약으로 업데이트합니다. summarize_abstractive 함수는 텍스트 배열(text[])을 반환합니다. array_to_string 함수는 반환 값을 문자열 표현으로 변환합니다. 다음 쿼리에서 인수는 throw_on_error .로 false설정됩니다. 이 설정을 사용하면 오류가 발생하더라도 요약 프로세스를 계속할 수 있습니다.

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

출력에서 적절한 요약을 생성할 수 없는 잘못된 문서에 대한 경고를 확인할 수 있습니다. 이 경고는 이전 쿼리에서 throw_on_error을(를) false으로 설정하여 발생한 것입니다. 해당 플래그를 기본값 true으로 두면 쿼리가 실패하고 데이터베이스에 요약이 기록되지 않습니다. 경고를 던진 레코드를 보려면 다음 명령을 실행합니다.

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

그런 다음 bill_summaries 테이블을 쿼리하여, azure_ai 확장이 테이블의 다른 레코드에 대해 생성하는 새로운 한 문장 요약을 볼 수 있습니다.

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

결론

축하합니다! 확장을 사용하여 azure_ai 큰 언어 모델 및 생성 AI 기능을 데이터베이스에 통합하는 방법을 배웠습니다.