Select AI를 사용하여 자연어 프롬프트에서 SQL 생성

전용 Exadata 인프라의 자율운영 AI 데이터베이스 Select AI를 사용하면 자연어로 데이터를 쿼리할 수 있습니다.

자율운영 AI 데이터베이스는 Select AI 기능을 통해 생성형 AI와 대규모 언어 모델(LLM)을 함께 사용하여 사용자의 입력 텍스트를 Oracle SQL로 변환할 수 있습니다. Select AI는 자연어 프롬프트를 처리하고, 메타데이터가 포함된 프롬프트를 보완하고, SQL 쿼리를 생성 및 실행합니다.

Select AI 정보

자연어를 사용하여 SQL을 통해 데이터베이스 및 LLM과 상호 작용함으로써 사용자 생산성을 향상시키고 AI 기반 애플리케이션을 개발할 수 있습니다. Select AI는 자연어 프롬프트에서 SQL 생성, 실행 및 설명, 벡터 저장소에서 검색 증강 생성 사용, 합성 데이터 생성, LLM과의 채팅 등 생성형 AI를 사용해 간소화 및 자동화합니다.

Select AI를 사용하는 경우 Autonomous AI Database는 자연어를 SQL로 변환하는 프로세스를 관리합니다. 즉, SQL 코드 대신 자연어 프롬프트를 제공하여 데이터와 상호 작용할 수 있습니다. Select AI는 SQL 사용자 및 개발자를 위한 생산성 도구 역할을 하며, 비전문가 SQL 사용자가 데이터 구조 또는 기술 언어를 이해할 필요 없이 데이터에서 유용한 인사이트를 도출할 수 있도록 지원합니다.

또한 Select AI는 벡터 임베딩 생성에서부터 벡터 저장소를 사용한 시맨틱 유사성 검색을 통해 프롬프트 기반 관련 콘텐츠 검색에 이르는 검색 증강 생성(RAG) 프로세스를 자동화합니다. 다른 기능으로는 SQL 인터페이스에서 합성 데이터 생성, 대화에 대한 채팅 기록 지원 및 기타 기능이 있습니다.

DBMS_CLOUD_AI 패키지를 사용하면 자연어 프롬프트를 사용하여 SQL 코드를 생성하기 위해 사용자 지정 LLM과 통합할 수 있습니다. SQL 생성에 대한 자연어를 위해 이 패키지는 관련 데이터베이스 스키마 메타데이터를 포함하는 LLM에 대한 증강 프롬프트를 제공합니다. 이를 통해 자연어 프롬프트를 기반으로 SQL 질의를 생성, 실행 및 설명할 수 있습니다. 또한 벡터 저장소, 합성 데이터 생성을 사용하여 검색 증강 생성을 용이하게 하고 LLM과 채팅할 수 있습니다. DBMS_CLOUD_AI 패키지는 Select your AI Provider and LLMs에 나열된 AI 제공자와 함께 작동합니다.

주:

  • AI 제공자가 포함된 계정이 있고 Autonomous AI Database에서 사용하는 DBMS_CLOUD_AI 객체를 통해 자격 증명을 제공해야 합니다.

  • 여러 언어로 프롬프트를 제출할 수 있습니다. 결과의 품질은 사용 중인 특정 LLM 또는 임베딩 모델(변환기)의 능력에 따라 달라집니다. 다국어 지원은 LLM 또는 임베딩 모델 설명서를 확인하십시오.

지원되는 플랫폼을

Select AI는 Autonomous AI Database 서버리스 및 Autonomous AI Database의 전용 Exadata Infrastructure 및 Cloud at Customers에서 지원됩니다.

  • 자율운영 AI Database 서버리스
  • 전용 Exadata 인프라에서 자율운영 AI 데이터베이스
  • 자율운영 AI 데이터베이스 전용 Exadata 인프라 리전
  • 자율운영 AI 데이터베이스 Cloud@Customer

관련 용어

사용하기 전에 Select AI와 함께 사용되는 다양한 용어를 이해하는 것이 중요합니다.

다음은 AI 선택 기능과 관련된 용어입니다.

용어 정의
대화

Select AI의 대화는 사용자가 일련의 자연어 프롬프트를 통해 데이터베이스를 쿼리하거나 상호 작용할 수 있도록 사용자와 시스템 간의 대화식 교환을 나타냅니다. Select AI는 세션 기반 단기 대화를 통합하여 이전 상호 작용을 기반으로 현재 프롬프트에 대한 컨텍스트 인식 응답을 생성합니다. 최대 10개의 이전 프롬프트가 현재 요청에 통합되어 단기적인 대화를 통해 LLM으로 전송되는 증강 프롬프트를 생성합니다. Select AI는 커스터마이징 가능한 장기 대화 사용을 지원하므로 DBMS_CLOUD_AI 패키지의 대화 API를 통해 구성할 수 있는 컨텍스트를 혼합하지 않고도 다양한 주제로 Select AI를 사용할 수 있습니다. 자세한 내용은 대화 사용 및 사용자정의를 참조하십시오.

데이터베이스 인증서

데이터베이스 인증서는 데이터베이스에 액세스하고 데이터베이스와 상호 작용하는 데 사용되는 인증 인증서입니다. 일반적으로 사용자 이름과 암호로 구성되며 때로는 보안 토큰과 같은 추가 인증 요소로 보완됩니다. 이러한 인증서는 응용 프로그램이나 유저와 데이터베이스 간에 보안 연결을 설정하는 데 사용되며, 권한이 부여된 개인이나 시스템만 데이터베이스 내에 저장된 데이터에 액세스하고 조작할 수 있도록 합니다.

LLM에서 환각

대형 언어 모델의 맥락에서 환각은 모델이 입력 프롬프트와 관련이 없거나, 비의미하거나, 관련이 없는 텍스트를 생성하는 현상입니다. 모델이 일관된 텍스트를 생성하려고 시도한 결과에도 불구하고 이러한 인스턴스에는 제작, 오도 또는 순전히 상상력이 있는 정보가 포함될 수 있습니다. 환각은 훈련 데이터의 편향, 적절한 맥락 이해의 부족 또는 모델의 훈련 과정의 제한으로 인해 발생할 수 있습니다.

IAM Oracle Cloud Infrastructure Identity and Access Management(IAM)를 사용하면 클라우드 리소스에 접근할 수 있는 사용자를 제어할 수 있습니다. 사용자 그룹이 갖는 액세스 유형 및 특정 리소스에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 ID 및 액세스 관리 개요를 참조하십시오.

자연어 프롬프트

자연어 프롬프트는 사람이 읽을 수 있는 지침 또는 대규모 언어 모델과 같은 생성형 AI 모델을 안내하기 위한 요청입니다. 사용자는 특정 프로그래밍 언어 또는 명령을 사용하는 대신 보다 대화형 또는 자연어 형식으로 프롬프트를 입력하여 이러한 모델과 상호 작용할 수 있습니다. 그런 다음 제공된 프롬프트를 기반으로 출력을 생성합니다.

네트워크 액세스 제어 목록(ACL)

네트워크 액세스 제어 목록은 라우터, 방화벽 또는 게이트웨이와 같은 네트워크 장치를 통과할 수 있는 네트워크 트래픽을 정의하는 규칙 또는 권한 세트입니다. ACL은 IP 주소, 포트 번호 및 프로토콜과 같은 다양한 조건에 따라 수신 및 송신 트래픽을 제어하고 필터링하는 데 사용됩니다. 관리자는 무단 액세스, 잠재적 공격 및 데이터 침해를 방지하기 위해 네트워크 트래픽을 관리하고 제한할 수 있으므로 네트워크 보안에서 중요한 역할을 합니다.

유사성 검색

유사성 검색은 벡터 저장소의 피쳐 벡터를 비교하여 지정된 질의와 거의 일치하는 데이터 포인트를 식별하고 검색합니다.

벡터 거리에서

벡터 거리는 다차원 공간에서 피쳐 벡터 사이의 거리를 계산하여 피쳐 벡터 간의 유사성 또는 유사성을 측정합니다.

벡터 인덱스

벡터 인덱스는 피쳐 벡터를 구성 및 저장하여 관련 데이터의 효율적인 유사성 검색 및 검색을 가능하게 합니다.

벡터 스토어

벡터 저장소에는 벡터 임베딩과 관련된 의미상 유사성 검색을 저장, 관리 및 지원하는 시스템이 포함됩니다. 여기에는 독립형 벡터 데이터베이스 및 Oracle Database 23ai AI Vector Search가 포함됩니다.

AI 사용 사례 선택

Select AI는 데이터 상호작용을 개선하고 개발자가 SQL에서 직접 AI 기반 애플리케이션을 구축하여 자연어 프롬프트를 SQL 쿼리 및 텍스트 응답으로 변환하고, LLM과의 채팅 상호작용을 지원하고, RAG를 사용하여 현재 데이터로 응답 정확도를 높이고, 합성 데이터를 생성할 수 있도록 지원합니다.

사용 사례는 다음과 같습니다.

  • 자연어 프롬프트에서 SQL 생성

    개발자 생산성: Select AI는 "시작형" SQL 쿼리를 신속하게 제공하여 개발자 생산성을 크게 향상시킵니다. 개발자는 자연어 프롬프트를 입력할 수 있고, Select AI는 데이터베이스 스키마 테이블 및 뷰를 기반으로 SQL을 생성합니다. 따라서 복잡한 쿼리를 처음부터 작성하는 데 필요한 시간과 노력이 줄어들어 개발자는 특정 요구에 맞게 생성된 쿼리를 세분화하고 최적화하는 데 집중할 수 있습니다.

    일반 사용자를 위한 자연어 쿼리: Select AI를 사용하면 일반 사용자가 자연어 쿼리를 사용하여 애플리케이션의 기본 데이터 테이블 및 뷰와 상호 작용할 수 있습니다. 이 기능을 통해 SQL 전문 지식이 없는 사용자는 질문을 하고 데이터를 직접 검색할 수 있으므로 사용 중인 LLM의 기능과 사용 가능한 스키마 메타데이터의 품질에 비해 데이터 액세스가 보다 직관적이고 사용자 친화적입니다.

    SQL 생성을 위한 기타 기능: 다음과 같은 강조 표시된 기능도 자연어에서 SQL 생성까지 지원됩니다.

    • 스키마 또는 테이블 또는 뷰 지정: Select AI를 사용하면 스키마 및 선택적으로 해당 스키마 내의 테이블이나 뷰로 구성된 객체 목록을 지정할 수 있습니다.

    • 관련 테이블 메타데이터 자동 감지: Select AI는 Oracle Database 26ai에서 관련 테이블을 자동으로 감지하고 쿼리와 관련된 특정 테이블에 대한 메타데이터만 전송합니다.

    • 테이블 액세스 제한: AI를 선택하면 SQL 생성을 위해 AI 프로파일 속성에 나열된 테이블만 고려하여 테이블 액세스를 제한할 수 있습니다.
    • 열에 대소문자 구분 지정: Select AI를 사용하면 LLM이 데이터베이스 및 LLM에서 대소문자를 구분하지 않는 응답을 생성하도록 대소문자 구분을 지정할 수 있습니다.
  • 대화

    Select AI로 챗봇과 유사한 기능을 지원하여 사용자가 데이터 쿼리 및 작업 수행을 위한 자연스러운 대화를 나눌 수 있습니다. 이러한 채팅은 컨텍스트를 추적하여 원래 질문을 명확히 하거나 확장하는 후속 답변을 제공할 수 있습니다. 이 시나리오는 참여를 높이고 대화를 통해 복잡한 쿼리를 더 쉽게 만듭니다.

  • Select AI Agent를 사용한 에이전트 워크플로우

    Select AI Agent를 사용하여 데이터 검색 및 통지와 같은 다단계 시나리오의 에이전트, 도구(SQL, RAG, Websearch, 통지) 및 작업을 조정합니다. 자세한 내용은 선택 AI 에이전트로 자율운영 에이전트 구축을 참조하십시오.

  • 맞춤형 미디어 생성

    Select AI는 개별 고객 세부정보에 맞는 이메일과 같은 개인화된 미디어 콘텐츠를 생성하는 데 사용할 수 있습니다. 예를 들어, 프롬프트에서 LLM이 고객에게 권장 제품 세트를 시도하도록 권장하는 우호적이고 상쾌한 이메일을 생성하도록 지시할 수 있습니다. 이러한 권장 사항은 고객 인구 통계 또는 데이터베이스에서 사용할 수 있는 기타 특정 정보를 기반으로 할 수 있습니다. 이 수준의 커스터마이징은 고객에게 관련성이 높고 매력적인 콘텐츠를 직접 제공함으로써 고객 참여를 높입니다.

  • 코드 작성

    Select AI chat 작업을 사용하면 Select AI를 사용하여 자연어 프롬프트에서 코드를 생성하도록 지정된 LLM에 요청할 수 있습니다. 이 기능은 SQL, Python, R 및 Java와 같은 다양한 프로그래밍 언어를 지원합니다. 예를 들면 다음과 같습니다.

    • Python Code: "Python 코드를 작성하여 ACTUAL 및 PREDICTED 열이 있는 DataFrame를 통해 혼동 매트릭스를 계산합니다."
    • SQL DDL: "열 이름, 연령, 소득 및 국가를 사용하여 SQL 테이블에 대한 DDL을 작성합니다."
    • SQL 쿼리: "CHURN_DT_MODEL라는 Oracle Machine Learning 데이터베이스 내 모델을 사용하여 고객이 이탈할 고객과 확률을 예측할 SQL 쿼리를 작성합니다."
  • 검색 증강 생성(RAG)

    의미 유사성 검색을 위해 벡터 저장소 콘텐츠를 사용하여 LLM 응답의 신속한 정확성 및 관련성을 개선할 수 있습니다.

  • 합성 데이터 생성

    솔루션 테스트, 개념 증명 및 기타 용도로 스키마를 준수하는 LLM을 사용하여 합성 데이터를 생성합니다. 합성 데이터는 실제 데이터가 없을 때 더 나은 애플리케이션 테스트를 지원할 수 있으므로 애플리케이션의 전반적인 품질이 향상됩니다.

사용법 지침

향상된 사용자 경험을 보장하기 위해 SQL 생성을 위한 자연어 프롬프트를 효과적이고 적절하게 사용하는 사용 지침을 제공합니다.

용도

이 기능은 사용자가 제공한 자연어 프롬프트로 인해 발생하는 SQL 쿼리를 생성하고 실행하기 위한 것입니다. 또한 사용자가 선택한 대규모 언어 모델(LLM)과 함께 스키마 메타데이터를 기반으로 수동으로 수행할 수 있는 작업을 자동화합니다.

SQL 쿼리 결과의 운용과 관련이 없는 프롬프트를 포함하여 모든 프롬프트를 제공할 수 있지만 Select AI는 SQL 쿼리 생성에 중점을 둡니다. AI를 선택하면 chat 작업을 사용하여 일반 요청을 제출할 수 있습니다.

프롬프트 보강 데이터

데이터베이스는 LLM의 환각을 완화하기 위해 데이터베이스 메타데이터로 사용자 지정 프롬프트를 보완합니다. 그런 다음 증강 프롬프트가 사용자 지정 LLM으로 전송되어 질의를 생성합니다.

데이터베이스는 스키마 메타 데이터로만 프롬프트를 보강합니다. 이 메타 데이터에는 스키마 정의, 테이블 및 열 설명, 데이터 딕셔너리 및 카탈로그에서 사용할 수 있는 컨텐트가 포함될 수 있습니다. SQL 생성을 위해 데이터베이스는 프롬프트를 보강할 때 테이블 또는 뷰 컨텐트(실제 행 또는 열 값)를 제공하지 않습니다.

그러나 narrate 작업은 질의 결과를 설명하는 자연어 텍스트를 생성할 수 있는 사용자 지정 LLM에 데이터베이스 데이터를 포함할 수 있는 질의 결과를 제공합니다.

경고:

대규모 언어 모델(LLM)은 일반적으로 인터넷을 통해 광범위한 텍스트 문서 및 콘텐츠 세트에 대해 교육을 받았습니다. 결과적으로 LLM은 SQL 주입(Injection)을 포함하여 유효하지 않거나 악의적인 컨텐트의 패턴을 통합할 수 있습니다. 따라서 LLM은 유용하고 관련성이 높은 콘텐츠를 생성하는 데 능숙하지만 부정확한 결과를 생성하거나 데이터의 보안을 손상시키는 SQL 쿼리를 포함한 부정확하고 잘못된 정보를 생성할 수도 있습니다.

사용자 지정 LLM 제공자가 사용자를 대신하여 생성한 질의가 데이터베이스에서 실행됩니다. 귀하가 본 기능을 사용하는 것은 전적으로 귀하의 책임이며 Oracle이 제공하는 서비스와 관련된 기타 조항 및 조건에도 불구하고 해당 위험을 수락하고 그 사용으로 인해 발생하는 모든 손해에 대해 Oracle의 책임 또는 책임을 명시적으로 배제합니다.

AI 제공자 및 LLM 선택

보안 표준을 충족하고 텍스트 또는 코드 생성과 같은 특정 요구 사항에 부합하는 AI 제공업체 및 LLM을 선택할 수 있습니다.

서로 다른 LLM은 학습 데이터 및 의도된 목적에 따라 다양한 작업에서 탁월합니다. 일부 모델은 텍스트 생성에 탁월하지만 코드 생성에서 제대로 수행되지 않을 수 있으며, 다른 모델은 코딩 작업에 최적화되어 있습니다. 귀사의 니즈에 가장 적합한 LLM을 선택할 수 있습니다.

AI 제공자 LLM RAG에 모델 포함 용도

OCI 생성형 AI

  • meta.llama-3.3-70b-instruct(기본값)
  • meta.llama-3.2-90b-비전-강사
  • meta.llama-3.2-11b-비전-강사
  • meta.llama-3.1-70b-instruct
  • meta.llama-3.1-405b-instruct
  • cohere.command-r-08-2024
  • cohere.command-r-plus-08-2024
  • cohere.command-r-16k(사용되지 않음)
  • cohere.command–r-plus(사용되지 않음)
  • xai.grok-3
  • xai.grok-3-fast
  • cohere.embed-english-v3.0(기본값)
  • cohere.embed-다국어-v3.0
  • cohere.embed-엔글리시 라이트-v3.0
  • cohere.embed-다국어-light-v3.0

생성형 AI에 모델 포함 정보를 참조하십시오.

OCI 생성형 AI 채팅 모델은 runsql, showsql, explainsql, narrate, chat 등의 모든 SELECT AI 작업에 지원됩니다.

OCI 텍스트 생성 모델은 SELECT AI chat 작업에 대해서만 지원됩니다.

프로파일 속성을 구성하려면 프로파일 속성을 참조하십시오.

Azure OpenAI 서비스

  • GPT-4o
  • GPT-4
  • 비전이 있는 GPT-4 터보
  • GPT-3.5-터보

텍스트 포함 -ada-002

자연어 프롬프트, chat 작업 및 Select AI RAG에서 SQL을 생성하는 데 가장 적합합니다.

OpenAI

  • gpt-3.5-turbo(기본값)
  • gpt-4o
  • gpt-4o-미니
  • gpt-4
  • gpt-4-0613
  • gpt-4-32k
  • gpt-4-32k-0613
  • gpt-3.5-turbo-0613
  • gpt-3.5-turbo-16k
  • gpt-3.5-turbo-16k-0613

텍스트 포함 -ada-002

자연어 프롬프트, chat 작업 및 Select AI RAG에서 SQL을 생성하는 데 가장 적합합니다.

OpenAI 호환 가능

OpenAI 호환 제공자의 모델:
  • 불꽃놀이 AI
  • xAI
  • 다른 사람
OpenAI-compaitble 제공자의 모델 포함. 예를 들어, Fireworks AI 임베딩 모델을 참조하십시오.

광범위한 사용 사례를 지원합니다.

Cohere

  • 명령(기본값)
  • command-nightly(실험적)
  • 명령-r
  • 명령-r-plus
  • 명령 라이트
  • command-light-nightly (실험적)
  • 사용자 정의 모델

embed-english-v2.0

chat 작업에 가장 적합합니다.

Google

  • gemini-1.5-flash(기본값)
  • gemini-1.5-pro
  • gemini-1.0-pro
text-embedding-004(기본값)

자연어 프롬프트, chat 작업 및 Select AI RAG에서 SQL을 생성하는 데 가장 적합합니다.

인류학

  • claude-3-5-sonnet-20240620(기본값)
  • claude-3-opus-20240229
  • claude-3-sonnet-20240229
  • claude-3-하이쿠-20240307
NA

자연어 프롬프트, chat 작업 및 Select AI RAG에서 SQL을 생성하는 데 가장 적합합니다.

Hugging Face

  • Mixtral-8x7B-Instruct-v0.1(기본값)
  • Meta-Llama-3-70B-강사
  • Qwen1.5-1.8B
  • 기타 채팅 모델
NA

자연어 프롬프트, chat 작업 및 Select AI RAG에서 SQL을 생성하는 데 가장 적합합니다.

AWS

  • amazon.titan-embed-text-v1
  • amazon.titan-embed-text-v2:0
  • cohere.embed-영어-v3

광범위한 사용 사례를 지원합니다.

주:

  • provider 매개변수 대신 provider_endpoint를 통해 OpenAI 호환 제공자를 지정합니다. 프로파일 속성을 참조하십시오.

  • 이미지를 허용하는 모델의 경우 meta.llama-3.2-90b-vision-instruct를 사용합니다. 이 모델은 시각과 이미지를 위해 특별히 훈련되었습니다. 텍스트 및 SQL 생성에 사용할 수 있지만 이 모델은 이미지에 가장 적합합니다. 자세한 내용은 OCI Generative AI에서 채팅하기를 참조하세요.

    meta.llama-3.2-11b-vision-instruct 모델은 강력한 멀티모달 기능을 제공합니다.

  • 임베딩 모델은 변압기 모델이라고도 합니다.

DBMS_CLOUD_AI를 사용하여 AI 프로파일 구성

자율운영 AI 데이터베이스는 AI 프로파일을 사용하여 LLM에 대한 액세스를 지원 및 구성하고, 자연어 프롬프트를 기반으로 SQL을 생성, 실행 및 설명하기 위한 설정을 수행합니다. 또한 임베딩 모델 및 벡터 인덱스를 사용하여 검색 증강 생성을 용이하게 하고 LLM과 채팅할 수 있습니다.

AI 프로파일에는 자연어 쿼리의 대상인 데이터베이스 객체가 포함됩니다. 이러한 대상에서 사용되는 메타 데이터에는 데이터베이스 테이블 이름, 열 이름, 열 데이터 유형 및 주석이 포함될 수 있습니다. DBMS_CLOUD_AI.CREATE_PROFILEDBMS_CLOUD_AI.SET_PROFILE 절차를 사용하여 AI 프로파일을 만들고 구성합니다.

DBMS_CLOUD_AI 요구 사항

DBMS_CLOUD_AI를 실행하려면 다음이 필요합니다.

  • Oracle Cloud Infrastructure 클라우드 계정 및 자율운영 AI 데이터베이스 인스턴스에 액세스합니다.
  • 지원되는 AI 공급자에 대한 유료 API 계정은 다음 중 하나입니다.
    • OpenAI: 자연어 프롬프트에서 SQL을 생성하기 위해 OpenAI를 사용으로 설정하려면 OpenAI 유료 계정에서 API 키를 가져옵니다.

      보안 API 키는 사용자 설정에서 찾을 수 있습니다.

    • Cohere: Cohere가 자연어 프롬프트에서 SQL을 생성할 수 있도록 하려면 Cohere 유료 계정에서 API 키를 받습니다.

      대시보드를 누르고 왼쪽 탐색에서 API 키를 누릅니다. 기본 API 키를 복사하거나 다른 키를 생성합니다. 자세한 내용은 API-Keys를 참조하십시오.

    • Azure OpenAI 서비스: 자연어 프롬프트에서 SQL을 생성하기 위해 Azure OpenAI 서비스를 사용으로 설정하려면 AI 제공자를 구성하고 액세스 권한을 제공합니다.

      Azure OpenAI Service를 사용하려면 다음 단계를 수행합니다.

      1. 보안 API 키를 얻습니다. API 키는 Azure 포털의 Resource Management 섹션에서 찾을 수 있습니다. Azure OpenAI 서비스 리소스 페이지에서 키 및 끝점을 누릅니다. KEY1 또는 KEY2를 복사할 수 있습니다.
      2. Azure OpenAI 서비스 리소스를 생성하고 Azure OpenAI 서비스 리소스 생성 및 배포 모델을 배포합니다.

        참고:

        • 이러한 매개변수는 네트워크 액세스 권한을 제공하고 DBMS_CLOUD_AI.CREATE_PROFILE 프로시저를 사용하여 Azure OpenAI Service 프로파일을 만드는 데 사용되므로 리소스 이름과 배포 이름을 확인합니다.
        • 모델에서 분당 토큰의 비율 제한에 대해 자세히 알아보려면 Azure OpenAI 서비스 할당량 및 제한을 참조하십시오.
      3. Azure OpenAI 서비스에 대한 액세스 허용:
        • 암호 API 키를 사용하여 Azure OpenAI 서비스에 대한 액세스를 허용할 수 있습니다. 자세한 내용은 Examples of Using Select AI의 예를 참조하십시오.
    • OCI Generative AI: How to Generate the API Signing Key을 참조하십시오.
    • Google: Google AI Studio가 자연어 프롬프트에 대한 SQL 및 텍스트 응답을 생성할 수 있도록 하려면 Google AI Studio 유료 계정에서 API 키를 가져옵니다.
      1. Google AI Studio로 이동합니다.
      2. Sign In to Google AI Studio를 누릅니다.
      3. 프롬프트 화면에서 Get API key를 누릅니다.
      4. 다음 페이지에서 적용 가능한 모든 옵션을 선택합니다.
      5. Create API key를 누릅니다.
      6. 새 프로젝트에서 [API 키 생성]을 누릅니다.

        화면에 진행률이 표시되고 API 키가 생성됩니다. 키를 복사하고 저장합니다.

    • Anthropic: Anthropic Developer Console이 자연어 프롬프트에 대한 SQL 및 텍스트 응답을 생성할 수 있도록 하려면 Anthropic Developer Console 유료 계정에서 API 키를 얻습니다.
      1. Anthropic Developer Console로 이동합니다.
      2. 아직 계정이 없으면 계정을 만드세요.
      3. 로그인한 후 API 섹션 또는 대시보드로 이동합니다.
      4. API 키를 생성하거나 볼 수 있는 옵션을 찾습니다.
      5. 새 API 키를 생성하려면 누릅니다.
      6. 생성된 API 키를 복사하여 저장합니다.

        Claude API는 유료 서비스입니다. API 키를 사용하려면 먼저 계정에 크레딧을 추가해야 합니다.

    • Hugging Face: AI 제공자로서 Hugging Face가 자연어 프롬프트에 대한 SQL 및 텍스트 응답을 생성할 수 있도록 하려면 Hugging Face 유료 계정에서 API 키를 가져옵니다.
      1. Hugging Face로 이동합니다.
      2. 아직 계정이 없으면 계정을 만드세요.
      3. 계정 설정으로 이동합니다.
      4. 탐색 메뉴에서 액세스 토큰을 찾습니다.
      5. 새 API 키를 생성하려면 누릅니다.
      6. 생성된 API 키를 복사하여 저장합니다.
    • AWS: AWS를 사용으로 설정하려면 API 키 및 모델 ID를 가져옵니다.

      API 키를 가져와서 DBMS_CLOUD.CREATE_CREDENTIAL를 통해 인증서를 생성하는 데 사용합니다.

      이 프로세스에 따라 API 키 및 모델 이름을 가져옵니다.

      1. 아직 AWS 계정이 없는 경우 AWS 계정에 가입하십시오.
      2. AWS Bedrock Console에서 액세스 키와 암호 키를 생성합니다.
      3. 생성된 키를 복사하여 저장합니다.
      4. 기초 모델에 대한 액세스를 요청합니다. Amazon Bedrock 기반 모델에 액세스를 참조하십시오.
      5. 모델 ID를 가져옵니다. DBMS_CLOUD_AI.CREATE_PROFILE 프로시저에서 모델 ID가 필요합니다. 모델 ID는 사용하는 리소스에 따라 다릅니다. 사용하는 경우:

        주:

        임포트된 모델은 Bedrock Converse API에서 지원되지 않습니다.

      AWS를 제공자로 사용하려면 예제: AWS와 함께 AI 선택을 참조하십시오.

  • 외부 AI 제공자에 액세스할 수 있는 네트워크 ACL 권한입니다.

    주:

    OCI Generative AI에는 네트워크 ACL을 적용할 수 없습니다.
  • AI 제공자에 대한 액세스를 제공하는 인증서입니다.
DBMS_CLOUD_AI를 구성하려면 다음과 같이 합니다.
  1. Select AI를 사용하려는 사용자에게 DBMS_CLOUD_AI 패키지에 대한 EXECUTE 권한을 부여합니다.

    기본적으로 ADMIN 사용자에게만 EXECUTE 권한이 부여됩니다. ADMIN 사용자는 다른 사용자에게 EXECUTE 권한을 부여할 수 있습니다.

    다음 예에서는 EXECUTE 권한을 ADB_USER에 부여합니다.
    grant execute on DBMS_CLOUD_AI to ADB_USER;

    다음 예에서는 ADB_USERapi.openai.com 끝점을 사용할 수 있는 권한을 부여합니다.

    BEGIN  
        DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
             host => 'api.openai.com',
             ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                                 principal_name => 'ADB_USER',
                                 principal_type => xs_acl.ptype_db)
       );
    END;
    /
    
  2. Select AI 및 AI 공급자 끝점을 사용하려는 사용자에게 네트워크 ACL 액세스 권한을 부여합니다.

    ADMIN 사용자는 네트워크 ACL 액세스 권한을 부여할 수 있습니다. 자세한 내용은 Oracle Database 19c PL/SQL Packages and Types ReferenceAPPEND_HOST_ACE Procedure 또는 Oracle Database 26ai PL/SQL Packages and Types Reference를 참조하십시오.

  3. AI 제공자에 대한 액세스를 사용으로 설정할 인증서를 생성합니다.

    자세한 내용은 CREATE_CREDENTIAL Procedure를 참조하십시오.

    다음은 OpenAI에 대한 액세스를 사용으로 설정하기 위해 인증서를 생성하는 방법의 예입니다.

    EXEC DBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');

APPEND_HOST_ACE 함수 매개변수

매개변수 설명

host

호스트 - 호스트의 이름 또는 IP 주소일 수 있습니다. 와일드카드를 사용하여 도메인 또는 IP 서브넷을 지정할 수 있습니다. 호스트 또는 도메인 이름은 대소문자를 구분하지 않습니다.

OpenAI의 경우 api.openai.com를 사용합니다.

Cohere의 경우 api.cohere.ai를 사용합니다.

Azure OpenAI Service의 경우 <azure_resource_name>.openai.azure.com를 사용합니다. azure_resource_name에 대한 자세한 내용은 프로파일 속성을 참조하십시오.

Google의 경우 generativelanguage.googleapis.com를 사용합니다.

Anthropic의 경우 api.anthropic.com를 사용합니다.

Hugging Face의 경우 api-inference.huggingface.co를 사용합니다.

ace

액세스 제어 항목(ACE)입니다. ACL에 대한 각 ACE 항목을 생성하기 위해 XS$ACE_TYPE 유형이 제공됩니다. 자세한 내용은 Oracle Database 19c Real Application Security Administrator's and Developer's Guide 또는 Oracle Database 26ai Real Application Security Administrator's and Developer's GuideCreating ACLs and ACEs를 참조하십시오.

DBMS_CLOUD.CREATE_CREDENTIAL 매개변수

매개변수 설명

credential_name

저장할 인증서의 이름입니다. credential_name 매개변수는 공백이나 하이픈을 허용하지 않는 Oracle 객체 이름 지정 규칙을 준수해야 합니다.

username

usernamepassword 인수는 AI 제공자 인증서를 함께 지정합니다.

username은 사용자가 지정한 사용자 이름입니다.

password

usernamepassword 인수는 AI 제공자 인증서를 함께 지정합니다.

password은 AI 제공자 보안 API 키이며 제공자에 따라 다릅니다(예: OpenAI, Cohere, Azure OpenAI Service, OCI, Google, Anthropic 또는 Hugging Face). 자세한 내용은 를 참조하십시오.

AI 프로파일 만들기 및 설정

AI 프로파일을 만들고 사용으로 설정하는 단계를 설명합니다.

DBMS_CLOUD_AI.CREATE_PROFILE를 사용하여 AI 프로파일을 만듭니다. 다음으로 DBMS_CLOUD_AI.SET_PROFILE를 시작하여 자연어 프롬프트와 함께 SELECT AI를 사용할 수 있도록 AI 프로파일을 사용으로 설정합니다.

주:

SELECT AI를 사용하기 전에 각각의 새 데이터베이스 세션(연결)에서 DBMS_CLOUD_AI.SET_PROFILE를 실행해야 합니다.

다음 예에서는 OpenAI 제공자가 OPENAI이라는 AI 프로파일을 만들고 현재 사용자 세션에 대해 OPENAI 프로파일을 설정합니다.

-- Create AI profile
--
SQL> BEGIN
  DBMS_CLOUD_AI.create_profile(
      'OPENAI',
      '{"provider": "openai",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "SH", "name": "customers"},
                        {"owner": "SH", "name": "sales"},
                        {"owner": "SH", "name": "products"},
                        {"owner": "SH", "name": "countries"}]
       }');
END;
/
 
PL/SQL procedure successfully completed.
 
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.set_profile('OPENAI');
 
PL/SQL procedure successfully completed.

AI 키워드를 사용하여 프롬프트 입력

자연어 프롬프트를 사용하여 데이터베이스와 상호 작용하려면 SELECT 문에서 AI을 키워드로 사용합니다.

SELECT 문의 AI 키워드는 SQL 실행 엔진이 활성 AI 프로파일에서 식별된 LLM을 사용하여 자연어를 처리하고 SQL을 생성하도록 지시합니다.

SQL Developer, OML Notebooks 및 타사 도구와 같은 Oracle 클라이언트와 쿼리에 AI 키워드를 사용하여 자연어로 데이터베이스와 상호 작용할 수 있습니다.

주:

AI 키워드를 사용하여 PL/SQL 문, DDL 문 또는 DML 문은 실행할 수 없습니다.

구문

AI 프롬프트 실행 구문은 다음과 같습니다.
SELECT AI action natural_language_prompt

매개변수

action 매개변수에 사용할 수 있는 매개변수는 다음과 같습니다.
매개변수 설명

runsql

자연어 프롬프트를 사용하여 제공된 SQL 명령을 실행합니다. 기본 작업이며 이 매개변수를 지정하는 것은 선택 사항입니다.

showsql

자연어 프롬프트에 대한 SQL 문을 표시합니다.

narrate

프롬프트 출력은 자연어로 설명됩니다. 이 옵션은 자연어 요약을 생성하기 위해 SQL 결과를 AI 제공자에게 전송합니다.

chat

프롬프트에 따라 LLM에서 직접 응답을 생성합니다. DBMS_CLOUD_AI.CREATE_PROFILE 함수의 conversationtrue로 설정된 경우 이 옵션에는 스키마 메타데이터를 포함하여 이전 상호 작용 또는 프롬프트의 콘텐츠가 포함됩니다.

explainsql

프롬프트에서 생성된 SQL은 자연어로 설명됩니다. 이 옵션은 생성된 SQL을 AI 제공자에게 전송하여 자연어 설명을 생성합니다.

사용법 참고

  • AI 선택은 데이터베이스 작업 또는 APEX 서비스에서 지원되지 않습니다. DBMS_CLOUD_AI.GENERATE 함수만 사용할 수 있습니다.

  • AI 키워드는 SELECT 문에서만 지원됩니다.

  • AI 키워드를 사용하여 PL/SQL 문, DDL 문 또는 DML 문은 실행할 수 없습니다.

  • 순서는 SELECT 뒤에 AI가 옵니다. 이 키워드에서는 대소문자를 구분하지 않습니다. DBMS_CLOUD_AI.SET_PROFILE가 구성된 후 SELECT AI 뒤에 오는 텍스트는 자연어 프롬프트입니다. AI 프로파일이 설정되지 않은 경우 SELECT AI에서 다음 오류를 보고합니다.

    ORA-00923: FROM keyword not found where expected
    00923. 00000 -  "FROM keyword not found where expected"
  • 특수 문자 사용 규칙은 Oracle 지침에 따라 적용됩니다. 예를 들어 문장에 아포스트로피를 사용하는 경우 작은 따옴표를 두 번 사용합니다.

    select ai how many customers in SF don''t own their own home
  • LLM에는 hallucinations가 적용되며 결과가 항상 정확하지는 않습니다.

    • SELECT AI가 특정 자연어 프롬프트에 대해 생성된 SQL을 실행하지 못할 수 있습니다.

    • SELECT AI가 특정 자연어 프롬프트에 대해 SQL을 생성하지 못할 수 있습니다.

    이러한 시나리오에서 SELECT AI는 유효한 SQL을 생성하는 데 도움이 되는 정보로 응답합니다.

  • chat 작업을 SELECT AI chat와 함께 사용하여 SQL 생성자에 대해 자세히 알아봅니다. chat 작업을 통해 더 나은 결과를 얻으려면 컨텍스트 열 이름이 있는 데이터베이스 뷰 또는 테이블을 사용하거나 열에 저장된 값을 설명하는 열 설명을 추가하는 것이 좋습니다.

  • DBA 또는 USER 뷰에 액세스하려면 DBMS_CLOUD_AI 뷰를 참조하십시오.

대화 사용 및 사용자 정의

Select AI의 대화는 사용자와 시스템 간의 대화형 대화입니다. 사용자 제공 자연어 프롬프트 시퀀스가 저장되고 관리되어 LLM 상호 작용을 위한 장기 메모리를 지원합니다.

Select AI는 AI 프로파일에서 사용할 수 있는 단기 세션 기반 대화는 물론, 특정 절차 또는 함수 및 대화 ID를 사용하여 명명된 장기 대화를 지원합니다.

주:

Select AI 대화에 대한 지원은 Oracle Database 19c 버전 19.30부터, Oracle Database 26ai 버전 23.26.1부터 제공됩니다.

대화 유형입니다.

Select AI는 세션 기반 단기 대화 및 커스터마이징 가능한 대화를 지원합니다.

세션 기반 단기 대화: Select AI에는 세션 기반 단기 대화가 포함되어 있어 이전 상호 작용을 기반으로 현재 프롬프트에 대한 컨텍스트 인식 응답을 생성합니다.

AI 프로파일에서 conversation 속성을 true|false로 설정하여 사용으로 설정할 수 있습니다. 다중 대화 기능과 달리 세션 기반 대화는 세션 기간 동안에만 프롬프트를 저장합니다. 프롬프트는 임시 테이블에 저장되고, 세션이 종료되면 자동으로 삭제되며, 재사용하거나 대화 간에 전환할 수 없습니다.

커스터마이징 가능한 장기 대화: Select AI는 커스터마이징 가능한 대화 생성 및 사용을 지원하므로 컨텍스트를 혼합하지 않고도 Select AI를 다양한 주제로 사용할 수 있어 유연성과 효율성이 향상됩니다. DBMS_CLOUD_AI 대화 절차 및 함수를 통해 대화를 생성, 설정, 삭제 및 업데이트할 수 있습니다. 대화를 사용으로 설정하면 Select AI가 프롬프트 기록을 검색하여 LLM으로 전송하여 현재 프롬프트에 대한 응답을 생성합니다. 이러한 응답은 나중에 사용할 수 있도록 영구 테이블에 저장됩니다.

주:

AI 대화 선택은 runsql, showsql, explainsql, narratechat 작업을 지원합니다.

사용자 정의 가능한 대화 사용 방법

다음과 같은 방법으로 사용자 정의 가능한 대화에 Select AI를 사용할 수 있습니다.

  • DBMS_CLOUD_AI.SET_CONVERSATION_ID 프로시저를 사용하여 세션에서 대화 ID를 설정하고 SELECT AI <ACTION> <PROMPT>를 실행합니다.

  • DBMS_CLOUD_AI.GENERATE 함수의 params 인수에 conversation_id를 전달합니다.

주:

여러 대화와 conversation: [true|false] 설정을 모두 사용하는 경우 시스템에서 conversation 설정을 무시합니다.

SQL 쿼리 생성(NL2SQL)의 맥락에서 대화는 보다 직관적이고 접근 가능한 데이터 작업 방식을 지원하므로 사용자가 SQL에 대한 심층적인 기술 지식 없이도 인사이트를 추출하고 작업을 보다 쉽게 수행할 수 있습니다. 대화는 Select AI의 채팅 및 RAG 기능과 함께 사용할 수도 있습니다.

예를 들어, 대화는 데이터를 직관적으로 분석하는 방법을 제공합니다.
  • "총 고객 수는 얼마입니까?"와 같은 질문을 합니다.
  • 다음과 같은 컨텍스트 인식 질문에 대한 후속 조치:
    • "국가별 고객 조사 중단"
    • "가장 일반적인 연령 그룹"
    • "최상위 5명의 고객 및 해당 국가를 구매에 따라 유지하고 결과에 순위를 포함합니다."

대화를 사용으로 설정하려면 전체 예는 예제: 선택 AI에서 대화 사용을 참조하십시오.

세션 기반 대화 대 커스터마이즈 가능한 대화

다음 표에서는 Select AI의 세션 기반 대화와 사용자정의 가능한 대화를 비교합니다.

질문 세션 기반 단기 대화 커스터마이즈 가능한 장기 대화

언제 사용합니까?

단일 세션 동안 모델이 최근 질문과 답변을 기억하도록 하려는 빠른 임시 채팅에 가장 적합합니다. 나중에 대화를 저장하거나 재사용할 필요가 없을 때 유용합니다.

여러 세션에 걸쳐 있을 수 있는 더 길거나 지속적인 대화를 위해 설계되었습니다. 대화 내역을 추적, 검토 또는 관리하려는 경우 또는 애플리케이션의 여러 부분이 시간에 따라 동일한 대화 컨텍스트에 액세스해야 하는 경우에 유용합니다.

사용으로 설정하려면 어떻게 합니까?

AI 프로파일에서 {"conversation": true or false}을 설정합니다.

DBMS_CLOUD_AI.SET_CONVERSATION_ID 절차 또는 DBMS_CLOUD_AI.GENERATE를 사용합니다.

몇 개의 대화가 허용됩니까?

하나.

여러 대화를 생성할 수 있습니다.

대화 ID를 명시적으로 지정하는 경우 필요에 따라 프롬프트를 적절한 대화와 연결하도록 대화 ID 간에 대체할 수 있습니다.

프롬프트는 어디에 저장되며 얼마나 오래 저장됩니까?

프롬프트는 임시 테이블에 저장되고 세션이 종료되면 삭제됩니다.

프롬프트는 영구 테이블에 저장됩니다.

프롬프트는 DBMS_CLOUD_AI.CREATE_CONVERSATION 프로시저에서 retention_days 매개변수로 지정된 일 수 동안 데이터베이스에 보존됩니다. 보존 기간이 지나면 대화 및 해당 프롬프트가 자동으로 삭제됩니다. DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT 절차를 사용하여 프롬프트를 수동으로 삭제할 수도 있습니다.

얼마나 많은 프롬프트가 저장되고 LLM으로 얼마나 많은 프롬프트가 전송됩니까?

최대 10개의 프롬프트가 저장되고 LLM으로 전송됩니다. 이 제한은 사용자 정의할 수 없습니다.

모든 프롬프트가 저장됩니다.

기본적으로 시스템은 가장 최근 10개의 프롬프트를 LLM으로 전송합니다. conversation_length 매개변수를 사용하여 사용자정의할 수 있습니다. CREATE_CONVERSATION 속성을 참조하십시오.

개별 프롬프트를 삭제할 수 있습니까?

아니요. 개별 프롬프트는 수동으로 삭제할 수 없습니다.

USER_CLOUD_AI_CONVERSATION_PROMPTS 뷰에 지정된 프롬프트 ID를 사용하고 DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT 절차를 사용하여 특정 개별 프롬프트를 삭제할 수 있습니다.

대화 검색에 AI 프로파일이 사용됩니까?

예. Select AI는 동일한 AI 프로파일을 사용하여 이전에 생성된 프롬프트 및 응답을 검색합니다.

아니요. Select AI는 프롬프트 및 응답을 저장할 때 사용되는 AI 프로파일을 추적하지만 해당 프로파일을 기반으로 검색을 제한하지 않습니다. 또한 모든 대화 내역을 LLM으로 전송하여 응답 생성에 사용된 프로파일에 관계없이 응답 생성을 안내합니다.

프롬프트의 내역은 어디에서 확인할 수 있습니까?

프롬프트는 CLOUD USER 아래의 임시 테이블에 저장되지만 query를 위해 액세스할 수 없습니다.

DBMS_CLOUD_AI 대화 뷰를 통해 대화 및 프롬프트를 쿼리하고 검토할 수 있습니다. 자세한 내용은 DBMS_CLOUD_AI 뷰를 참조하십시오.

LLM 개선을 위한 피드백 제공

Select AI를 사용하면 피드백을 제공하여 선택한 LLM의 보다 정확한 SQL 쿼리 생성 능력을 향상시킬 수 있습니다.

주:

이 기능은 Oracle Database 23ai에서만 사용할 수 있습니다. 기존 AI 선택 작업(runsql, showsqlexplainsql)과 함께 사용할 수 있습니다. AI 프로파일이 RAG가 아닌 NL2SQL 생성을 위해 구성되었는지 확인합니다.

피드백을 제공하면 feedback 작업 또는 DBMS_CLOUD_AI.FEEDBACK 프로시저를 통해 생성된 SQL의 정확성을 높일 수 있습니다. Select AI는 피드백 기능을 처음 사용할 때 기본 속성으로 <profile_name>_FEEDBACK_VECINDEX라는 기본 벡터 인덱스를 생성합니다. 이 인덱스는 제공된 피드백을 기반으로 나중에 생성된 SQL을 세분화하는 데 도움이 됩니다. 자세한 내용은 Vector Index for FEEDBACK를 참조하십시오.

참고:

지정된 LLM이 올바른 SQL 질의를 생성하지 못하거나 NL2SQL SELECT AI 작업 중 하나에서 예상한 결과를 반환하지 않는 경우 DBMS_CLOUD_AI.FEEDBACK 프로시저를 사용합니다. DBMS_CLOUD_AI.FEEDBACK 프로시저를 사용하여 올바른 SQL을 벡터 테이블에 직접 추가할 수도 있습니다. 이와 유사한 프롬프트에 대한 참조 역할을 함으로써 향후 SQL 생성을 안내합니다.

허용되는 피드백 유형은 다음과 같습니다.
  • 긍정적 피드백: 생성된 SQL의 정확성을 승인하고 확인합니다. 나중에 참조할 수 있도록 확인된 질의가 저장됩니다.

  • 부정적 피드백: NL2SQL SELECT AI 작업의 결과가 올바른 SQL을 생성하지 못하면 SELECT AI feedback <feedback>를 사용하거나 DBMS_CLOUD_AI.FEEDBACK 프로시저를 사용하여 질의에서 오류를 식별하거나 prose에서 예상한 내용에 대한 지침을 제공하여 필요한 SQL 질의 개선을 제공할 수 있습니다. 시스템은 LLM을 사용하여 쿼리를 세분화하고 향후 Select AI 쿼리 생성을 위해 세분화된 버전을 저장합니다. 그러면 저장된 세분화된 쿼리가 힌트로 사용되고 증강 프롬프트의 일부로 LLM으로 전송됩니다.

피드백 사용의 이점

Select AI의 피드백 작업 및 절차에는 SQL 쿼리 생성의 정확성을 향상시키는 프롬프트 튜닝 메커니즘이 도입되었습니다.

AI 프로파일의 소유자는 생성된 SQL 쿼리에 대한 피드백을 제공하고, Select AI 시스템은 시간이 지남에 따라 사용자 상호 작용을 통해 학습합니다. 이 학습에는 벡터 검색이 현재 프롬프트와 유사한 프롬프트를 식별하는 데 사용되는 프롬프트 및 피드백 콘텐츠의 저장소를 축적하는 과정이 포함됩니다. 최상위 일치 예제는 증강 프롬프트의 일부로 LLM에 메타데이터로 제공됩니다. 다음은 이점이 있습니다.
  • SQL 질의의 정확성을 향상시킬 수 있습니다.
  • AI 프로파일 소유자가 올바른 질의를 확인하거나 올바른 질의를 생성할 의미적 의도 또는 비즈니스 정의를 제공하여 수정 사항을 제안하여 피드백을 제공할 수 있습니다.
  • 과거 피드백을 이후 query 생성을 위한 힌트로 사용하여 유저의 요구에 맞게 조정합니다.

피드백 제공 방법

Select AI를 사용하면 feedback 작업을 사용하거나 DBMS_CLOUD_AI.FEEDBACK 프로시저를 호출하여 피드백을 제공할 수 있습니다.

주의:

여러 사용자가 AI 프로파일을 소유한 단일 데이터베이스 사용자로 데이터베이스 세션을 공유하는 응용 프로그램에서는 피드백 작업을 사용하지 마십시오. AI 프로파일 소유자는 수정된 질의가 해당 프로파일의 모든 사용자에게 적합한지 확인한 후에만 피드백을 제공해야 합니다.

다음을 포함하여 피드백을 제공할 수 있습니다.
  • SQL_TEXT: 현재 SQL 질의에 대한 피드백을 따옴표로 묶거나 V$MAPPED_SQL 뷰를 질의하여 특정 질의에 대한 SQL_TEXT를 가져올 수 있습니다.

  • SQL_ID: V$MAPPED_SQL 뷰를 질의하여 SQL_ID를 가져올 수 있습니다.

  • 마지막으로 생성된 SQL 사용: 자연어로 피드백을 제공합니다.

    주:

    마지막 SQL을 사용하려면 Oracle SQL*Plus 또는 Oracle SQLcl에서 서버 출력을 설정해야 합니다. sys.v_$sessionv_$mapped_sql 테이블에 대한 READ 권한이 있어야 합니다.
    GRANT READ ON SYS.V_$MAPPED_SQL TO ADB_USER;
    GRANT READ ON SYS.V_$SESSION TO ADB_USER;

자세한 내용은 FEEDBACK 프로시저예제: AI 피드백 선택을 참조하십시오.

속성 그래프가 있는 그래프 데이터 질의

Select AI는 자연어를 사용하여 Oracle Property Graphs에 Property Graph Query(PGQ)를 생성합니다. 이를 통해 사용자는 최소한의 SQL 지식으로 GRAPH_TABLE 연산자를 통해 그래프 데이터를 질의할 수 있습니다.

Select AI는 자연어를 SQL(NL2SQL) 기능으로 확장하여 자연어를 사용하여 SQL 속성 그래프를 쿼리할 수 있는 그래프 구조를 제공합니다. Select AI는 GRAPH_TABLE 연산자를 적용하여 그래프 구조화된 데이터에서 관계 및 속성을 해석합니다. AI 프로파일에 정의된 데이터 객체를 기반으로 SQL 또는 PGQ 그래프 쿼리를 생성합니다. AI 프로파일에 속성 그래프가 포함된 경우 Select AI는 생성형 AI를 사용하여 GRAPH_TABLE 연산자를 통해 그래프를 참조하는 PGQ 쿼리를 작성합니다. LLM은 정확한 쿼리를 생성하기 위해 CREATE PROPERTY GRAPH 문과 같은 그래프 객체의 메타데이터를 자동으로 수신합니다. 테이블, 뷰 또는 관계형 객체가 지정되면 Select AI가 SQL 쿼리를 생성합니다. 이 기능은 Oracle AI Database에 저장된 그래프 데이터에 대한 패턴 매칭 쿼리를 간소화하고, SQL 쿼리를 수동으로 구성하는 것에 대한 의존도를 줄여줍니다.

object_list 속성에 정의된 하나 이상의 등록 정보 그래프를 사용하여 AI 프로파일을 만드는 경우 AI 프로파일에 정의된 LLM은 지정된 등록 정보 그래프의 컨텍스트를 사용하여 프롬프트를 해석합니다. Select AI는 다음과 같은 증강 프롬프트를 생성합니다.
  • PGQ 쿼리를 구성하는 지침입니다.

  • 제공된 속성 그래프(CREATE PROPERTY GRAPH 문)를 설명하는 메타데이터입니다.

이 증강 프롬프트는 LLM으로 전송됩니다. Select AI는 쿼리를 실행하고 결과를 반환합니다. AI 프로파일의 테이블, 스키마 또는 뷰와 같은 다른 객체 유형과 함께 속성 그래프가 지정된 경우 Select AI에서 오류가 발생합니다.

SQL 대 PGQ

Select AI의 경우 생성된 질의 유형은 AI 프로파일의 object_list 속성에 정의된 객체에 따라 달라집니다.
  • SQL Query: 스키마, 테이블 또는 뷰와 같은 관계형 데이터를 사용합니다.

  • PGQ 쿼리: 속성 그래프를 사용하고 패턴 일치에 GRAPH_TABLE 연산자를 적용합니다.

자세한 내용은 SQL 속성 그래프SQL GRAPH 질의를 참조하십시오.

속성 그래프에서 Select AI 사용 시의 이점

데이터베이스 사용자는 Select AI를 사용하여 속성 그래프를 쿼리하여 자연어로 그래프 쿼리를 생성함으로써 수동 작업을 줄이고 그래프 관계에 대한 이해도를 높일 수 있습니다.

주요 이점은 다음과 같습니다.
  • NL2SQL: Select AI의 NL2SQL 기능은 이제 사용자가 "드레스를 구입한 고객 찾기"와 같은 자연어 프롬프트를 작성할 수 있도록 그래프 쿼리로 확장됩니다.

  • SQL 또는 PGQ: Select AI는 데이터 객체에 따라 SQL 또는 PGQ 쿼리를 자동으로 생성합니다.

  • 생산성: GRAPH_TABLE 연산자를 사용하여 그래프 쿼리를 작성하는 데 소요되는 시간과 노력을 줄입니다.

  • 대화: 대화 컨텍스트를 유지하고 속성 그래프를 질의합니다.

제한사항

호텔 그래프에 대한 AI 선택은 다음 기능을 지원하지 않습니다.

속성 그래프에서 Select AI를 사용하는 방법

Select AI를 사용하면 DBMS_CLOUD_AI.GENERATE 함수를 사용하거나 Select AI <action> <prompt>를 사용하여 그래프 데이터를 탐색할 수 있습니다.

AI 프로파일의 object_list 속성에 등록 정보 그래프를 정의한 후 다음을 사용할 수 있습니다.
  • SQL 명령행에 SELECT AI <ACTION> <PROMPT>를 입력하여 출력을 생성합니다.

  • DBMS_CLOUD_AI.GENERATE 함수 및 함수 내에서 프롬프트를 제공합니다.

지원되는 작업은 runsql, showsql, explainsql, narrateshowpropmt입니다. Select AI for Property Graph는 세션 기반의 단기 및 커스터마이징 가능한 장기 대화를 지원합니다.

자세한 내용은 예제: 속성 그래프에 대한 AI 선택예제: 속성 그래프에 대한 샘플 프롬프트를 참조하십시오.

Select AI 사용 예

Oracle의 Select AI와 다양한 지원 AI 제공업체의 통합을 살펴보고, 자연어 프롬프트에서 SQL을 생성, 실행, 설명하거나, LLM과 채팅해 보세요.

예: AI 작업 선택

다음 예에서는 SELECT AI로 수행할 수 있는 runsql(기본값), showsql, narrate, chat, explainsql, feedbacksummarize과 같은 작업을 보여줍니다. 이러한 예에서는 sh 스키마를 DBMS_CLOUD_AI.CREATE_PROFILE 함수에 지정된 AI 제공자 및 프로파일 속성과 함께 사용합니다. 현재 세션의 DBMS_CLOUD_AI.SET_PROFILE 절차를 사용하여 AI 프로파일을 설정한 후 AI 선택 작업을 사용합니다.

텍스트 요약을 생성하려면 SELECT AI SUMMARIZE <TEXT>를 사용합니다.

SQL> select ai how many customers exist;
 
CUSTOMER_COUNT
--------------
         55500
 
SQL> select ai showsql how many customers exist;
 
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
 
 
SQL> select ai narrate how many customers exist;
 
RESPONSE
------------------------------------------------------
There are a total of 55,500 customers in the database.
 
SQL> select ai chat how many customers exist;
 
RESPONSE
--------------------------------------------------------------------------------
It is impossible to determine the exact number of customers that exist as it con
stantly changes due to various factors such as population growth, new businesses
, and customer turnover. Additionally, the term "customer" can refer to individu
als, businesses, or organizations, making it difficult to provide a specific num
ber.


SQL> select ai explainsql how many customers in San Francisco are married;
 
RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS AS c
WHERE c.CUST_STATE_PROVINCE = 'San Francisco' AND c.CUST_MARITAL_STATUS = 'Married';
 
Explanation:
- We use the 'SH' table alias for the 'CUSTOMERS' table for better readability.
- The query uses the 'COUNT(*)' function to count the number of rows that match the given conditions.
- The 'WHERE' clause is used to filter the results:
  - 'c.CUST_STATE_PROVINCE = 'San Francisco'' filters customers who have 'San Francisco' as their state or province.
  - 'c.CUST_MARITAL_STATUS = 'Married'' filters customers who have 'Married' as their marital status.
The result of this query will give you the count of customers in San Francisco who are married, using the column alias 'customer_count' for the result.
 
Remember to adjust the table and column names based on your actual schema if they differ from the example.
 
Feel free to ask if you have more questions related to SQL or database in general.

-- Feedback on SQL Text
-- Negative feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", please use sum instead of count;
-- Positive feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", the sql query generated is correct;
 
-- Feedback on SQL ID
-- Negative feedback example:
SQL > select ai feedback please use sum instead of count for sql_id  1v1z68ra6r9zf;
-- Positive feedback example:
SQL > select ai feedback sql query result is correct for sql_id  1v1z68ra6r9zf;
 
-- If not specified, use default LASTAI SQL
-- To use default LASTAI sql, make sure that set server output off;
-- Negative feedback example:
SQL > select ai feedback please use ascending sorting for ranking;
-- Positive feedback example:
SQL > select ai feedback the result is correct;

SQL> SELECT AI SUMMARIZE
Like countless other people around the globe, I stream music, and like more
than six hundred million of them I mainly use Spotify. Streaming currently
accounts for about eighty per cent of the American recording industry’s
revenue, and in recent years Spotify’s health is often consulted as a measure
for the health of the music business over all. Last spring, the International
Federation of the Phonographic Industry reported global revenues of $28.6
billion, making for the ninth straight year of growth. All of this was
unimaginable in the two-thousands, when the major record labels appeared
poorly equipped to deal with piracy and the so-called death of physical media.
On the consumer side, the story looks even rosier. Adjusted for inflation, a
 
... (skipped 1000 rows in the middle)
 
Pelly writes of some artists, in search of viral fame, who surreptitiously use
social media to effectively beta test melodies and motifs, basically putting
together songs via crowdsourcing. Artists have always fretted about the
pressure to conform, but the data-driven, music-as-content era feels
different. “You are a Spotify employee at that point,” Daniel Lopatin, who
makes abstract electronic music as Oneohtrix Point Never, told Pelly. “If your
art practice is so ingrained in the brutal reality that Spotify has outlined
for all of us, then what is the music that you’re not making? What does the
music you’re not making sound like?” Listeners might wonder something similar.
What does the music we’re not hearing sound like?;
 
 
RESPONSE
------------------------------------------------------------------------------
The music streaming industry, led by Spotify, has revolutionized the way
people consume music, with streaming accounting for 80% of the American
recording industry's revenue. However, this shift has also complicated the
lives of artists, who struggle to survive in a hyper-abundant present where
music is often valued for its convenience rather than its artistic merit.
Spotify's algorithms prioritize popularity and profitability over artistic
diversity, leading to a homogenization of music and a devaluation of the
labor that goes into creating it. Meanwhile, the company's executives reap
enormous profits, with CEO Daniel Ek's net worth rivaling that of the
wealthiest musicians. As music critic Liz Pelly argues, the streaming economy
raises important questions about autonomy, creativity, and the value of art
in a world where everything is readily available and easily accessible.

예: AWS를 사용한 AI 선택

이 예에서는 AWS를 사용하여 자연어 프롬프트에서 SQL을 생성, 실행 및 설명하거나 AWS에서 사용 가능한 모델을 사용하여 채팅하는 방법을 보여줍니다.

다음 예에서는 AWS를 Amazon Bedrock 및 해당 기반 모델을 사용하는 AI 제공업체로 사용하는 방법을 보여줍니다. 이 예제에서는 AWS 자격 증명을 생성하고, 네트워크 액세스를 제공하고, AI 프로파일을 생성하고, Select AI 작업을 사용하여 자연어 프롬프트에서 SQL 쿼리를 생성하고, AWS 기반 모델을 사용하여 채팅하는 방법을 보여줍니다.

AWS를 사용하려면 액세스 키, 보안 키 및 모델 ID를 얻습니다. 여기를 참조하십시오. DBMS_CLOUD_AI.CREATE_PROFILE 절차에서 모델 ID를 model 속성으로 사용합니다. 기본 모델이 제공되지 않으므로 model 속성을 명시적으로 지정해야 합니다.

--Grant EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER; 

--
-- Create Credential for AI provider
--
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'AWS_CRED',
        username    => '<your_AWS_access_key>',
        password    => '<your_AWS_secret_key>'
      );
END;
/
 
PL/SQL procedure successfully completed.
 
 
--
-- Grant Network ACL for AWS
--
BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'bedrock-runtime.us-east-1.amazonaws.com',
        ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                    principal_name => 'ADB_USER',
                    principal_type => xs_acl.ptype_db)
       );
END;
/
 
PL/SQL procedure successfully completed.
 


--
-- Create AI profile 
--
BEGIN
      DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name =>'AWS',
        attributes   =>'{"provider": "aws",
          "credential_name": "AWS_CRED",
          "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
           "model" : "anthropic.claude-v2",
           "conversation" : "true"
          }');
END;
/
 
 
PL/SQL procedure successfully completed.


--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('AWS');

PL/SQL procedure successfully completed.
 
--
-- Use AI
--

SELECT AI how many customers exist;
"RESPONSE"
"COUNT(*)"
55500


SELECT AI how many customers in San Francisco are married;
"RESPONSE"
"COUNT(*)"
46

SELECT AI showsql how many customers in San Francisco are married;
"RESPONSE"
"SELECT COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE UPPER(C."CUST_CITY") = UPPER('San Francisco')
AND UPPER(C."CUST_MARITAL_STATUS") = UPPER('Married')"

SELECT AI explainsql how many customers in San Francisco are married;

"RESPONSE""SELECT 
COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE C."CUST_CITY" = 'San Francisco'
AND C."CUST_MARITAL_STATUS" = 'Married'

Explanation:
- Used table alias C for CUSTOMERS table
- Used easy to read column names like CUST_CITY, CUST_MARITAL_STATUS
- Enclosed table name, schema name and column names in double quotes 
- Compared string values in WHERE clause without UPPER() since the values are not in double quotes
- Counted number of rows satisfying the condition and aliased the count as "Number of Married Customers in San Francisco""

SELECT AI narrate what are the top 3 customers in San Francisco;
"RESPONSE"
The top 3 customers in San Francisco ordered by credit limit in descending order are:

1. Bert Katz
2. Madallyn Ladd  
3. Henrietta Snodgrass

SELECT AI chat what is Autonomous AI Database;
"RESPONSE"
"An Autonomous AI Database is a cloud database service provided by Oracle Corporation. Some key features of Oracle Autonomous AI Database include:

- Fully automated and self-driving - The database automatically upgrades, patches, tunes, and backs itself up without any human intervention required.

- Self-securing - The database uses machine learning to detect threats and automatically apply security updates.

- Self-repairing - The database monitors itself and automatically recovers from failures and errors without downtime.

- Self-scaling - The database automatically scales compute and storage resources up and down as needed to meet workload demands. 

- Serverless - The database is accessed as a cloud service without having to manually provision any servers or infrastructure.

- High performance - The database uses Oracle's advanced automation and machine learning to continuously tune itself for high performance.

- Multiple workload support - Supports transaction processing, analytics, graph processing, etc in a single converged database.

- Fully managed - Oracle handles all the management and administration of the database. Users just load and access their data.

- Compatible - Supports common SQL and Oracle PL/SQL for easy migration from on-prem Oracle databases.

So in summary, an Oracle Autonomous AI Database is a fully automated, self-driving, self-securing, and self-repairing database provided as a simple cloud service. The automation provides high performance, elasticity, and availability with minimal human labor required."

--
--Clear the profile
--
BEGIN
   DBMS_CLOUD_AI.CLEAR_PROFILE;
END;
/
PL/SQL procedure successfully completed.

--
--Drop the profile
--
EXEC DBMS_CLOUD_AI.DROP_PROFILE('AWS');
 
PL/SQL procedure successfully completed.

예: Select AI에서 대화 사용

다음 예에서는 Select AI에서 대화를 사용으로 설정하는 방법을 보여줍니다.

주:

관리자 권한(ADMIN)을 가진 사용자는 EXECUTE에 권한을 부여하고 ACL(네트워크 액세스 제어 목록)을 사용으로 설정해야 합니다.

세션 기반 대화

AI 프로파일을 만듭니다. 프로파일에서 conversation 속성을 true로 설정합니다. 이 작업은 이전 상호 작용 또는 프롬프트의 콘텐츠(예: 스키마 메타데이터 포함)를 포함하고 프로파일을 설정합니다. 프로필이 활성화되면 데이터와의 대화를 시작할 수 있습니다. 자연어를 사용하여 질문하고 필요에 따라 후속 조치를 취하십시오.


--Grants EXECUTE privilege to ADB_USER
--
SQL> grant execute on DBMS_CLOUD_AI to ADB_USER;

-- Grant Network ACL for OpenAI endpoint
--
SQL> BEGIN  
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'api.openai.com',
         ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                             principal_name => 'ADB_USER',
                             principal_type => xs_acl.ptype_db)
     );
    END;
    /
 
PL/SQL procedure successfully completed.
 
--
-- Create Credential for AI provider
--
EXEC
DBMS_CLOUD.CREATE_CREDENTIAL(
CREDENTIAL_NAME   => 'OPENAI_CRED', 
username          =>  'OPENAI', 
password          =>  '<your_api_token>');
 
PL/SQL procedure successfully completed.
 
--
-- Create AI profile
--
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
  profile_name   => 'OPENAI',
  attributes     =>'{"provider": "openai",                                                                   
        "credential_name": "OPENAI_CRED",                                     
        "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
        "conversation": "true"                
       }');                                                                  
     END;                                                                         
     / 
 
PL/SQL procedure successfully completed.
 
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI');
 
PL/SQL procedure successfully completed.
 
--
-- Get Profile in current session
--
SQL> SELECT DBMS_CLOUD_AI.get_profile() from dual;
 
DBMS_CLOUD_AI.GET_PROFILE()
--------------------------------------------------------------------------------
"OPENAI"
 
--
-- Use AI
--
what are the total number of customers;
 
CUSTOMER_COUNT
--------------
         55500
 
break out count of customers by country;   
 
RESPONSE
-----------------
COUNTRY_NAME 			CUSTOMER_COUNT
Italy 				7780
Brazil 				832
Japan 				624
United Kingdom 			7557
Germany 			8173
United States of America 	18520
France 				3833
Canada 				2010
Spain 				2039
China 				712
Singapore 			597
New Zealand 			244
Poland 	708
Australia 			831
Argentina 			403
Denmark 			383
South Africa 			88
Saudi Arabia 			75
Turkey 				91

  
what age group is most common;
 
RESPONSE
--------------------------------------------------------------------------------
AGE_GROUP 	CUSTOMER_COUNT
65+ 		28226
 
select ai keep the top 5 customers and their country by their purchases and include a rank in the result;
 
RESPONSE
--------------------------------------------------------------------------------
RANK 	CUSTOMER_NAME 		COUNTRY 	PURCHASES
1 	Abigail Ruddy 		Japan 		276
2 	Abigail Ruddy 		Italy 		168
3 	Abigail Ruddy 		Japan 		74
3 	Abner Robbinette 	Germany 	74
5 	Abner Everett 		France 		68
 
 
SQL> EXEC DBMS_CLOUD_AI.DROP_PROFILE('OPENAI');
 
PL/SQL procedure successfully completed.

사용자정의 가능한 대화

다음 예에서는 사용자 정의 가능한 대화를 지원하는 대화 관리 API를 사용하는 방법을 보여줍니다. 다중 대화에 Select AI를 사용하려면 다음을 수행합니다.
  1. 대화를 생성합니다.
  2. 현재 사용자 세션에서 대화 설정
  3. Select AI <action> <prompt> 사용
다음과 같은 방법으로 대화를 생성하고 설정할 수 있습니다.
  • DBMS_CLOUD_AI.CREATE_CONVERSATION 함수를 사용한 다음 DBMS_CLOUD_AI.SET_CONVERSATION_ID를 사용하여 대화를 설정합니다.
  • DBMS_CLOUD_AI.CREATE_CONVERSATION 프로시저를 직접 호출하여 대화를 한 번에 생성하고 설정합니다.
예: 사용자정의 가능한 대화 생성 및 설정

다음 예에서는 DBMS_CLOUD_AI.CREATE_CONVERSATION 함수를 사용하여 대화를 만들고 DBMS_CLOUD_AI.SET_CONVERSATION_ID 절차를 사용하여 설정하는 방법을 보여줍니다.

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;  -- in 19c, run SELECT DBMS_CLOUD_AI.create_conversation FROM dual;
  
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
 
 
EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed

다음 예에서는 conversation_id를 직접 만들고 설정하는 DBMS_CLOUD_AI.CREATE_CONVERSATION 프로시저를 실행하는 방법을 보여줍니다.

EXEC DBMS_CLOUD_AI.create_conversation;
 
PL/SQL procedure successfully completed.

title, description, retention_daysconversation_length 속성과 같은 대화 속성을 사용자정의할 수도 있습니다.

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
            attributes => '{"title":"My first conversation", 
			"description":"this is my first conversation", 
			"retention_days":5, 
			"conversation_length":5}');
  
 
CREATE_CONVERSATION
------------------------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A

DBA/USER_CLOUD_AI_CONVERSATIONS 뷰를 질의하여 특정 대화가 존재하는지 여부를 확인할 수 있습니다.

-- Verify the setup
SELECT conversation_id, conversation_title, description, retention_days, 
conversation_length FROM DBA_CLOUD_AI_CONVERSATIONS WHERE 
conversation_id = '38F8B874-7687-2A3F-E063-9C6D4664EC3A';
 
CONVERSATION_ID                      	CONVERSATION_TITLE                              DESCRIPTION                        RETENTION_DAYS                 CONVERSATION_LENGTH
------------------------------------ 	----------------------------------------------- ---------------------------------- ------------------------------ -------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A 	My first conversation                           this is my first conversation     +00005 00:00:00.000000         5

DBMS_CLOUD_AI.GET_CONVERSATION_ID 함수를 호출하여 대화가 설정되었는지 확인할 수도 있습니다.

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;
 
 
--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92
예: Select AI와 함께 사용자정의 가능한 대화 사용

대화를 생성 및 설정하고 AI 프로파일을 사용으로 설정한 후 데이터와의 상호 작용을 시작할 수 있습니다. 자연어를 사용하여 질문하고 필요에 따라 후속 조치를 취하십시오.

SELECT AI <ACTION> <PROMPT>를 사용합니다.

SELECT AI CHAT What is the difference in weather between Seattle and San Francisco?;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco are both located on the West Coast of the United State
s, but they have distinct weather patterns due to their unique geography and cli
mate conditions. Here are the main differences:
 
1. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco, on the other hand, recei
ves significantly less rainfall, with an average of around 20 inches (51 cm) per
 year.
2. **Cloud Cover**: Seattle is often cloudy, with an average of 226 cloudy days
per year. San Francisco is also cloudy, but to a lesser extent, with an average
of 165 cloudy days per year.
 
......
 
 
SELECT AI CHAT Explain the difference again in one paragraph only.;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.
예: GENERATE 함수를 사용하여 두 대화 비교

다음 예에서는 두 대화가 서로 바꿔서 질문을 하고 정확한 응답을 확인하는 방법을 보여줍니다. 각 대화는 비교에 초점을 맞춘 다른 질문으로 시작됩니다. 나중에 두 대화에서 동일한 후속 질문을 할 때 각각 이전 컨텍스트를 기반으로 다른 답변을 반환합니다.

-- First conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92



-- Second conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'What is the difference in weather between Seattle and San Francisco?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco, both located in the Pacific Northwest and Northern Ca
lifornia respectively, experience a mild oceanic climate. However, there are som
e notable differences in their weather patterns:
 
1. **Temperature**: San Francisco tends to be slightly warmer than Seattle, espe
cially during the summer months. San Francisco's average temperature ranges from
 45?F (7?C) in winter to 67?F (19?C) in summer, while Seattle's average temperat
ure ranges from 38?F (3?C) in winter to 64?F (18?C) in summer.
 
2. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco receives less rainfall, w
ith an average of around 20 inches (51 cm) per year. However, San Francisco's ra
infall is more concentrated during the winter months, while Seattle's rainfall i
s more evenly distributed throughout the year.
 
......

-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'How does the cost of living compare between New York and Los Angeles?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York and Los Angeles is relatively high compared to ot
her cities in the United States. However, there are some differences in the cost
 of living between the two cities. Here's a comparison of the cost of living in
New York and Los Angeles:
 
1. Housing: The cost of housing is significantly higher in New York than in Los
Angeles. The median home price in New York is around $999,000, while in Los Ange
les it's around $849,000. Rent is also higher in New York, with the average rent
 for a one-bedroom apartment being around $3,000 per month, compared to around $
2,400 per month in Los Angeles.
 
2. Food: The cost of food is relatively similar in both cities, with some variat
ion in the cost of certain types of cuisine. However, eating out in New York can
 be more expensive, with the average cost of a meal at a mid-range restaurant be
ing around $15-20 per person, compared to around $12-18 per person in Los Angele
s.
 
......


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.


-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York is approximately 20-30% higher than in Los Angele
s, mainly due to the higher cost of housing and transportation. New York has a m
edian home price of around $999,000 and average rent of $3,000 per month for a o
ne-bedroom apartment, compared to Los Angeles' median home price of $849,000 and
 average rent of $2,400 per month. While the cost of food and utilities is relat
ively similar in both cities, the cost of transportation is higher in Los Angele
s due to its car-centric culture, but the cost of public transportation is highe
r in New York. Overall, the total monthly expenses for a single person in New Yo
rk can range from $4,600, compared to around $4,050 in Los Angeles, making New Y
ork the more expensive city to live in.

대화를 지정하지 않고 DBMS_CLOUD_AI.GENERATE 함수를 호출할 수 있지만, 이 경우 의미 있는 응답이 필요하지 않습니다.

-- Ask SELECT AI using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
There is no previous explanation to draw from, as this is the beginning of our c
onversation. If you would like to ask a question or provide a topic, I would be
happy to explain the differences related to it in one paragraph.
예: DBMS_CLOUD_AI 뷰를 통해 대화 확인

DBMS_CLOUD_AI 대화 뷰를 질의하여 대화 및 프롬프트 세부정보를 검토할 수 있습니다. 자세한 내용은 을 참조하십시오.

주:

예:

DBA_ 접두어가 있는 뷰는 관리자 권한(ADMIN)을 가진 사용자만 사용할 수 있습니다.

SELECT conversation_id, conversation_title, description FROM dba_cloud_ai_conversations;
 
CONVERSATION_ID
------------------------------------
CONVERSATION_TITLE
----------------------------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
Seattle vs San Francisco Weather
The conversation discusses the comparison of weather patterns between Seattle an
d San Francisco, focusing on the differences in temperature, rainfall, fog, suns
hine, and seasonal variation between the two cities.
 
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
NY vs LA Cost Comparison
The conversation discusses and compares the cost of living in New York and Los A
ngeles, covering housing, food, transportation, utilities, and taxes to provide
an overall view of the expenses in both cities.

SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts
     GROUP BY conversation_id;
 
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92          2
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2
예: 대화 세부정보 업데이트

DBMS_CLOUD_AI.UPDATE_CONVERSATION 절차를 사용하여 대화의 title, descriptionretention_days를 업데이트할 수 있습니다. DBMS_CLOUD_AI 대화 뷰를 질의하여 업데이트를 확인할 수 있습니다.

-- Update the second conversation's title, description and retention_days
SQL> EXEC DBMS_CLOUD_AI.update_conversation(conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92', 
											attributes => '{"retention_days":20, 
														"description":"This a description", 
														"title":"a title", 
														"conversation_length":20}');
 
PL/SQL procedure successfully completed.
 
 
-- Verify the information for the second conversation
SQL> SELECT conversation_title, description, retention_days
FROM dba_cloud_ai_conversations
WHERE conversation_id = '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92';
 
CONVERSATION_TITLE         DESCRIPTION                          RETENTION_DAYS         LENGTH
-------------------------- ------------------------------------ -------------- --------------
a title                    This a description                   20                         20
예: 프롬프트 삭제

대화에서 개별 프롬프트를 삭제하고 DBMS_CLOUD_AI 대화 뷰를 질의하여 수정 사항을 확인할 수 있습니다.

-- Find the latest prompt for first conversation
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
     WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92'
     ORDER BY created DESC
     FETCH FIRST ROW ONLY;
 
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA61-AFBA-E063-9C6D46644B92
 
 
-- Delete the prompt
EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the prompt is deleted
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92';
 
-- Only one prompt now
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA5A-AFBA-E063-9C6D46644B92
예: 대화 놓기

전체 대화를 삭제할 수 있으며 이 경우 연관된 모든 프롬프트도 제거됩니다.

-- Delete the first conversation
EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the conversation and its prompts are removed
SELECT conversation_id FROM dba_cloud_ai_conversations;
 
-- We only have the second conversation now
CONVERSATION_ID
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
 
 
SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts GROUP BY conversation_id;
 
-- We only have prompts in the second conversation
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2

예: AI 피드백 선택

이러한 예제는 DBMS_CLOUD_AI.FEEDBACK 프로시저 및 다양한 시나리오를 사용하여 피드백을 제공하여 후속 SQL 질의 생성을 향상시키는 방법을 보여줍니다.

주:

프롬프트가 이전에 실행되지 않은 경우에도 Select AI SQL 프롬프트에 대한 피드백을 제공할 수 있습니다. Select AI는 피드백을 제출하기 전에 SQL 프롬프트를 질의에 사용할 필요가 없습니다. 언제든지 적합한 프롬프트에 대한 피드백을 제공할 수 있습니다.

예: 부정적 피드백 제공

다음 예제는 feedback_typenegative로 사용하여 생성된 SQL을 피드백으로 수정(음수 피드백)하고 SQL 질의를 제공하는 방법을 보여줍니다.

프롬프트가 포함된 sql_text 매개변수와 함께 DBMS_CLOUD_AI.FEEDBACK 프로시저를 호출하여 이름이 OCI_FEEDBACK1인 AI 프로파일에 피드백을 추가합니다. 속성에 대한 자세한 내용은 를 참조하십시오. 그런 다음 <profile_name>_FEEDBACK_VECINDEX$VECTAB 테이블에서 해당 특정 SQL 질의에 연결된 contentattributes 열을 검색합니다. Select AI는 피드백 기능을 처음 사용할 때 자동으로 이 벡터 테이블을 생성합니다. 자세한 내용은 을 참조하십시오.

SQL> select ai showsql how many movies;
 
RESPONSE
------------------------------------------------------------------------
SELECT COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_text=> 'select ai showsql how many movies', feedback_type=> 'negative', response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"');
 
PL/SQL procedure successfully completed.
SQL> select CONTENT, ATTRIBUTES from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
 
CONTENT                                                
----------------------------------------------------------------------------------------------------
how many movies                                             
ATTRIBUTES
----------------------------------------------------------------------------------------------------
 
{"response":"SELECT SUM(1) FROM \"ADB_USER\".\"MOVIES\"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}
예: 긍정적인 피드백 제공

다음 예제는 feedback_typepositive로 사용하여 생성된 SQL(긍정적인 피드백)에 동의하고 확인한다는 승인을 제공하는 방법을 보여줍니다.

이 예제에서 질의는 제공된 프롬프트에 대한 v$mapped_sql 뷰에서 sql_id를 검색합니다. 자세한 내용은 V_MAPPED_SQL을 참조하십시오.

sql_id 매개변수와 함께 DBMS_CLOUD_AI.FEEDBACK 프로시저를 호출하여 OCI_FEEDBACK1라는 AI 프로파일에 피드백을 추가합니다. 그런 다음 <profile_name>_FEEDBACK_VECINDEX$VECTAB 테이블에서 해당 특정 SQL 질의에 연결된 contentattributes 열을 검색합니다. Select AI는 피드백 기능을 처음 사용할 때 자동으로 이 벡터 테이블을 생성합니다. 자세한 내용은 을 참조하십시오.

SQL> select ai showsql how many distinct movie genres?;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT COUNT(DISTINCT g."GENRE_NAME") AS "Number of Movie Genres" FROM "ADB_USER"."GENRES" g
 
SQL> SELECT sql_id FROM v$mapped_sql WHERE sql_text = 'select ai showsql how many distinct movie genres?';
 
SQL_ID
-------------
852w8u83gktc1
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_id=> '852w8u83gktc1', feedback_type=>'positive', operation=>'add');
 
PL/SQL procedure successfully completed.
 
SQL> SELECT content, attributes FROM OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB WHERE JSON_VALUE(attributes, '$.sql_id') ='852w8u83gktc1';
 
 CONTENT                                               
---------------------------------------------------------------------------------------------------- 
how many distinct movie genres?
ATTRIBUTES
----------------------------------------------------------------------------------------------------
{"response":"SELECT COUNT(DISTINCT g.\"GENRE_NAME\") AS \"Number of Movie Genres\" FROM \"ADB_USER\".\"GENRES\" g","feedback_type":"positive","sql_id":"852w8u83gktc1","sql_text":"select ai showsql how many distinct movie genres?","feedback_content":null}
예: 이전 사용 없이 피드백 제공

프롬프트가 이전에 사용되지 않은 경우에도 SQL 프롬프트에 대한 피드백을 제공할 수 있습니다. 예:

BEGIN
  DBMS_CLOUD_AI.FEEDBACK(
    profile_name=>'AI_PROFILE',
    sql_text=>'select ai runsql how many products named PAD', -- Prior usage not required
    feedback_type=>'negative',
    response=>'SELECT COUNT(*) AS "Num" FROM "PRODUCTS"."CATG" o WHERE UPPER(o."NAME") LIKE ''%PAD%''',
    feedback_content=>'Use LIKE instead of ='
  );
END;
/

이 경우 프롬프트를 미리 사용할 필요 없이 프롬프트 select ai runsql how many products named PAD에 대한 피드백이 제출됩니다.

예제: 생성된 SQL에 대한 피드백 추가 또는 삭제
다음 예에서는 DBMS_CLOUD_AI.FEEDBACK 프로시저 매개변수를 지정하여 생성된 SQL에 대한 피드백을 추가하거나 삭제하는 방법을 보여줍니다. 이 예에서는 sql_idsql_text를 다른 매개변수와 함께 사용하는 방법을 보여줍니다.

주:

Select AI는 각 sql_id에 대해 하나의 피드백 항목만 허용합니다. 동일한 sql_id에 대한 추가 피드백을 제공하면 Select AI가 이전 항목을 새 항목으로 바꿉니다.

매개변수에 대한 자세한 내용은 를 참조하십시오.

EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   feedback_type=>'positive',
                                   operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_text=> 'select ai showsql how many movies',
                                   feedback_type=> 'negative',
                                   response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
                                   feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   operation=>'delete');
예: 마지막 AI SQL에 피드백 작업을 사용하여 부정적인 피드백 제공

이 예제에서는 feedback 작업을 사용하여 자연어를 사용하여 수정 사항을 제안함으로써 생성된 SQL을 개선하는 방법을 보여줍니다.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name=>'OCI_FEEDBACK1',
    attributes=>'{"provider": "oci",                                                                 
      "credential_name": "GENAI_CRED",
      "oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
      "object_list": [{"owner": "ADB_USER", "name": "users"},
                      {"owner": "ADB_USER", "name": "movies"},
                      {"owner": "ADB_USER", "name": "genres"},
                      {"owner": "ADB_USER", "name": "watch_history"},
                      {"owner": "ADB_USER", "name": "movie_genres"},
                      {"owner": "ADB_USER", "name": "employees1"},
                      {"owner": "ADB_USER", "name": "employees2"}
                        ]
      }');
END;
/
 
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_FEEDBACK1');

 
PL/SQL procedure successfully completed.
 

select ai showsql rank movie duration;
 
RESPONSE
-------------------------------------------------------------------------------
SELECT "DURATION" AS "Movie Duration" FROM "ADB_USER"."MOVIES" ORDER BY "DURATION"
 
select ai feedback use ascending sorting;
 
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "rank movie duration" is successfully refined. The refined SQL query as following:
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
 
 
select ai showsql rank the movie duration;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
예: 마지막 AI SQL에 피드백 작업을 사용하여 긍정적인 피드백 제공

이 예제에서는 feedback 작업을 사용하여 자연어를 사용하여 생성된 SQL을 수락하는 방법을 보여줍니다.

--Positive feedback

select ai showsql which movies are comedy?;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT DISTINCT m."TITLE" AS "Movie Title" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" WHERE g."GENRE_NAME" = 'comedy'
 
select ai feedback this is correct;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Thank you for your positive feedback. The SQL query for prompt "which movies are comedy?" is correctly implemented and delivering the expected results. It will be referenced for future optimizations and improvements.


Select AI Feedback Action Referring SQL_ID
예: 피드백을 제공하려면 피드백 작업을 SQL_ID와 함께 사용하십시오.

이 예제는 SQL_IDfeedback 작업과 함께 사용하여 생성된 특정 SQL 질의에 대한 피드백을 제공하는 방법을 보여줍니다. v$MAPPED_SQL 테이블을 질의하여 SQL_ID를 얻을 수 있습니다.

-- Query mentioned with SQL_ID

select ai showsql how many movies are in each genre;
 
RESPONSE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" GROUP BY g."GENRE_NAME"
 
select sql_id from v$cloud_ai_sql where sql_text = 'select ai showsql how many movies are in each genre';
 
SQL_ID
-------------
8azkwc0hr87ga
 
select ai feedback for query with sql_id = '8azkwc0hr87ga', rank in descending sorting;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many movies are in each genre" is successfully refined. The refined SQL query as following:
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies"
FROM "ADB_USER"."MOVIES" m
INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID"
INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID"
GROUP BY g."GENRE_NAME"
ORDER BY COUNT(m."MOVIE_ID") DESC
예: 질의 텍스트에 피드백 작업 사용

이 예에서는 AI 선택 프롬프트를 따옴표 뒤에 피드백을 추가하여 특정 AI 선택 질의에 대한 feedback 작업을 보여줍니다.

-Query mentioned with SQL_TEXT

select ai showsql how many watch history in total;
 
RESPONSE
----------------------------------------------------------------------------------
SELECT COUNT(w."WATCH_ID") AS "Total Watch History" FROM "ADB_USER"."WATCH_HISTORY" w
 
select ai feedback for query "select ai showsql how many watch history in total", name the column as total_watch;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many watch history in total" is successfully refined. The refined SQL query as following:
SELECT COUNT(w."WATCH_ID") AS "total_watch" FROM "ADB_USER"."WATCH_HISTORY" w

예: 속성 그래프에 대한 AI 선택

이 예에서는 DBMS_CLOUD_AI.GENERATE 프로시저 및 자연어 프롬프트를 사용하여 그래프 데이터를 질의하는 PGQ 그래프 질의를 생성하는 방법을 보여줍니다.

예: AI 프로파일에 다중 그래프 지정

이 예에서는 샘플 질의 및 해당 출력을 포함하여 AI 프로파일에서 다중 등록 정보 그래프를 정의하는 방법을 보여줍니다.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
      profile_name =>'OPENAI',
      attributes   =>'{"provider": "openai",
        "model": "gpt-4o",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "ADB_USER", "name": "LDBC_GRAPH"},
                        {"owner": "ADB_USER", "name": "G"}]
       }');                                                                  
END;                                                                         
/

SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE(profile_name => 'OPENAI');

PL/SQL procedure successfully completed.

SQL> select ai who bought a dress;

CUSTOMER_N
----------
Kate

1 row selected.

예: 속성 그래프에 대한 샘플 프롬프트

이 예에서는 제공된 프롬프트에 대해 showsql 작업을 사용하여 샘플 데이터를 생성하고 생성된 SQL을 표시하는 방법을 보여줍니다.

예: 속성 그래프 테이블 생성

다음 예에서는 샘플 테이블과 등록 정보 그래프를 만듭니다.

CREATE TABLE Person
(
    id         NUMBER PRIMARY KEY,
    firstName  VARCHAR2(20 CHAR),
    lastName   VARCHAR2(20 CHAR),
    age        NUMBER,
    jsonProp   VARCHAR2(40 CHAR)
);

CREATE TABLE Post
(
    id         NUMBER PRIMARY KEY,
    content    VARCHAR2(20 CHAR)
);

CREATE TABLE personLikesPost
(
    idPerson NUMBER REFERENCES Person (id),
    idPost   NUMBER REFERENCES Post (id)
);

CREATE TABLE personKnowsPerson
(
    idPerson1 NUMBER REFERENCES Person (id),
    idPerson2 NUMBER REFERENCES Person (id)
);

CREATE PROPERTY GRAPH person_graph
  VERTEX TABLES (
    Person KEY (id) LABEL Person
      PROPERTIES (firstName, lastName, age, jsonProp),
    Post KEY (id) LABEL Post
      PROPERTIES(content)
  )
  EDGE TABLES (
    personLikesPost
      KEY(idPerson, idPost)
      SOURCE KEY (idPerson) REFERENCES Person (id)
      DESTINATION KEY (idPost) REFERENCES POST (id)
      LABEL Likes NO PROPERTIES,
    personKnowsPerson
      KEY(idPerson1, idPerson2)
      SOURCE KEY (idPerson1) REFERENCES Person (id)
      DESTINATION KEY (idPerson2) REFERENCES Person (id)
      LABEL Knows NO PROPERTIES
  );

insert into Person values (1, 'John', 'Doe',23, '{"key1":"value1","key2":"value2"}');
insert into Person values (2, 'Scott', 'Tiger', 25, '{"key1":"value3","key2":"value4"}');
insert into Person values (3, 'Max', 'Power', 27, '{"key1":"value5","key2":"value6"}');
insert into Person values (4, 'Jane', 'Doe', 22, '{"key1":"value7","key2":"value8"}');
insert into Person (id, Firstname, age) values (5, 'Hans', 23);
insert into Person (id, Firstname, age) values (6, 'Franz', 24);
 
INSERT INTO Post VALUES (10, 'Lorem ipsum...');
INSERT INTO Post VALUES (11, 'Nulla facilisi...');
INSERT INTO Post VALUES (12, 'Vestibulum eget ..');
INSERT INTO Post VALUES (13, 'Sed fermentum...');
INSERT INTO Post VALUES (14, 'Fusce at ...');
INSERT INTO Post VALUES (15, 'Pellentesque sit ...');
INSERT INTO Post VALUES (16, 'Integer...');
INSERT INTO Post VALUES (17, 'Curabitur luctus ...');
INSERT INTO Post VALUES (18, 'Nam in ...');
INSERT INTO Post VALUES (19, 'Etiam ac ...');
 
insert into personKnowsPerson values (1, 2);
insert into personKnowsPerson values (2, 3);
insert into personKnowsPerson values (3, 4);
insert into personKnowsPerson values (4, 5);
insert into personKnowsPerson values (5, 6);
insert into personKnowsPerson values (6, 2);
insert into personKnowsPerson values (5, 3);
 
INSERT INTO personLikesPost VALUES (1, 10);
INSERT INTO personLikesPost VALUES (1, 11);
INSERT INTO personLikesPost VALUES (1, 12);
INSERT INTO personLikesPost VALUES (2, 10);
INSERT INTO personLikesPost VALUES (2, 13);
INSERT INTO personLikesPost VALUES (2, 14);
INSERT INTO personLikesPost VALUES (3, 11);
INSERT INTO personLikesPost VALUES (3, 15);
INSERT INTO personLikesPost VALUES (3, 16);
INSERT INTO personLikesPost VALUES (4, 12);
INSERT INTO personLikesPost VALUES (4, 17);
INSERT INTO personLikesPost VALUES (4, 18);
INSERT INTO personLikesPost VALUES (5, 13);
INSERT INTO personLikesPost VALUES (5, 14);
INSERT INTO personLikesPost VALUES (5, 19);
INSERT INTO personLikesPost VALUES (6, 15);
INSERT INTO personLikesPost VALUES (6, 16);
INSERT INTO personLikesPost VALUES (6, 17);
INSERT INTO personLikesPost VALUES (1, 18);
INSERT INTO personLikesPost VALUES (2, 19);

commit;
예: 레이블이 없는 정점 일치

프롬프트: Find all the people IDs

SELECT person_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v IS "PERSON")
    COLUMNS (VERTEX_ID(v) AS person_id))
예: 레이블이 없는 모서리 일치

프롬프트: Find all the edge IDs

SELECT edge_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v1) -[e]-> (v2)
    COLUMNS (EDGE_ID(e) AS edge_id))
예: 레이블과 모서리 일치

프롬프트: Find all the knows relationship IDs

SELECT knows_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e IS "KNOWS"]-> (p2 IS "PERSON")
    COLUMNS (EDGE_ID(e) AS knows_id))
예: 하나 또는 여러 홉을 포함하는 경로 패턴 일치

프롬프트: List all people who know someone who liked the post 'Sed fermentum...'

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e1 IS "KNOWS"]-> (p2 IS "PERSON") -[e2 IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(post."CONTENT") = UPPER('Sed fermentum...')
    COLUMNS (VERTEX_ID(p1) AS person_id, p1."FIRSTNAME" AS person_firstname, p1."LASTNAME" AS person_lastname))
예: 정점 및 모서리 속성 액세스

프롬프트: Find first name and last name of all people

SELECT first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS first_name, p."LASTNAME" AS last_name))
예: 데이터 필터링

프롬프트: Find post contents liked by John Doe

SELECT post_content
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(p."FIRSTNAME") = UPPER('John') AND UPPER(p."LASTNAME") = UPPER('Doe')
    COLUMNS (post."CONTENT" AS post_content))
예제: 함수 및 표현식

프롬프트: Show all people (full name) and display their key1 value from jsonProp property

SELECT person_fullname, json_key1
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (
	(p."FIRSTNAME" || ' ' || p."LASTNAME") AS person_fullname,
	JSON_QUERY(p."JSONPROP", '$.key1') AS json_key1
    )
)
예: 데이터 정렬

프롬프트: Find friends of Scott Tiger ordered by their last name

SELECT friend_firstname, friend_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "KNOWS"]-> (f IS "PERSON")
    WHERE UPPER(p."FIRSTNAME") = UPPER('Scott') AND UPPER(p."LASTNAME") = UPPER('Tiger')
    COLUMNS (f."FIRSTNAME" AS friend_firstname, f."LASTNAME" AS friend_lastname)
)
ORDER BY friend_lastname
예제: 행 제한

프롬프트: Find all people ordered by first name. Skip one result and return 2 results only

SELECT person_firstname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS person_firstname))
ORDER BY person_firstname
OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY

지원되지 않는 질의

다음 쿼리의 경우 특정 LLM이 유효한 NL2SQL를 생성하지만, 결과 SQL은 Oracle AI Database 26ai에서 아직 지원되지 않는 기능을 사용합니다.

예제: 특정 패턴과 일치하지 않아야 하는 질의

프롬프트: Find people that do not know Scott.

EXISTS 하위 질의는 지원되지 않습니다.

SELECT person_id, first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON")
    WHERE NOT EXISTS (
	SELECT 1
	FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
	    MATCH (p2 IS "PERSON") -[e IS "PERSONKNOWSPERSON"]-> (p3 IS "PERSON"
)
	    WHERE p2."ID" = p1."ID" AND UPPER(p3."FIRSTNAME") = UPPER('Scott')
	    COLUMNS (1 AS dummy_value))
    )
    COLUMNS (p1."ID" AS person_id, p1."FIRSTNAME" AS first_name, p1."LASTNAME" A
S last_name))
예제: 선택적으로 특정 패턴과 일치해야 하는 질의

프롬프트: Show all people and how many posts they have liked (show people even if they have not liked a post).

OPTIONAL 일치는 지원되지 않습니다.

SELECT person_id, person_firstname, person_lastname, liked_post_ids
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p is "PERSON") OPTIONAL MATCH (p) -[l is "PERSONLIKESPOST"]-> (post is "POST")
COLUMNS(
    VERTEX_ID(p) as person_id,
    p."FIRSTNAME" as person_firstname,
    p."LASTNAME" as person_lastname,
    JSON_ARRAYAGG(VERTEX_ID(post)) as liked_post_ids
))
예: 제한되지 않은 순환 경로 패턴

프롬프트: Find all people that Scott can reach.

제한되지 않은 한정자를 사용하는 질의는 지원되지 않습니다.

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
    MATCH (src IS "PERSON") -[e IS "PERSONKNOWSPERSON"]->* (dst IS "PERSON")
    WHERE src."FIRSTNAME" = 'Scott'
    COLUMNS (
	VERTEX_ID(dst) AS person_id,
	dst."FIRSTNAME" AS person_firstname,
	dst."LASTNAME" AS person_lastname
    )
)

간헐적 질의

LLM은 GRAPH_TABLE 연산자가 두 개 이상 필요한 쿼리를 변환할 때 어려움을 겪는 것으로 나타났습니다. 예를 들면 다음과 같습니다.

프롬프트: Show people who have liked all the same posts as Hans

SELECT person_id, person_name
FROM GRAPH_TABLE("PERSON_GRAPH"
  MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST"),
	(other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post)
  WHERE hans."FIRSTNAME" = 'Hans'
  COLUMNS (VERTEX_ID(other_person) as person_id, other_person."FIRSTNAME" AS person_name)
)
WHERE NOT EXISTS (
  SELECT 1
  FROM GRAPH_TABLE("PERSONGRAPH"
    MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST")
    WHERE hans."FIRSTNAME" = 'Hans'
    COLUMNS (VERTEX_ID(post) as post_id)
  ) hans_posts
  LEFT JOIN GRAPH_TABLE("PERSONGRAPH"
    MATCH (other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post
 is "POST")
    COLUMNS (VERTEX_ID(post) as post_id)
  ) other_posts
  ON hans_posts.post_id = other_posts.post_id
  WHERE other_posts.post_id IS NULL
)
예: 정의된 범위와 순환 경로 패턴 일치

프롬프트: Find all names of the people that can be reached in a 1 to 3 edge path

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") -[e IS "KNOWS"]->{1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
예: 순환 경로를 따라 노드에 대한 데이터 필터링

프롬프트: Find all names of the people that can be reached in a 1 to 3 edge path where each person is younger than the next one

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") ((v1 IS "PERSON") -[e IS "KNOWS"]-> (v2 IS"PERSON") WHERE v1."AGE" < v2."AGE"){1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
예: 그룹화 및 집계

LLM은 종종 그룹화 및 집계가 필요한 쿼리를 번역하는 데 어려움을 겪습니다. 일반적인 실수는 SELECT 절 대신 COLUMNS 절에 집계를 배치하는 것입니다.

프롬프트: Find the average number of posts liked by all the users

SELECT AVG(COUNT(post)) AS average_liked_count
FROM GRAPH_TABLE("PERSON_GRAPH"
MATCH (p IS "PERSON") -[e IS "PERSONLIKESPOST"]-> (post IS "POST")
COLUMNS (VERTEX_ID(p) AS person, VERTEX_ID(post) AS post))
GROUP BY person;