Select AI를 사용하여 자연어 프롬프트에서 SQL 생성
자율운영 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 |
다음을 참조하십시오.
|
생성형 AI에 모델 포함 정보를 참조하십시오. |
OCI 생성형 AI 채팅 모델은 OCI 텍스트 생성 모델은 프로파일 속성을 구성하려면 프로파일 속성을 참조하십시오. |
|
Azure OpenAI 서비스 |
|
텍스트 포함 -ada-002 |
자연어 프롬프트, |
|
OpenAI |
|
텍스트 포함 -ada-002 |
자연어 프롬프트, |
|
OpenAI 호환 가능 |
OpenAI 호환 제공자의 모델:
|
OpenAI-compaitble 제공자의 모델 포함. 예를 들어, Fireworks AI 임베딩 모델을 참조하십시오. |
광범위한 사용 사례를 지원합니다. |
|
Cohere |
|
embed-english-v2.0 |
|
|
|
|
text-embedding-004(기본값) |
자연어 프롬프트, |
|
인류학 |
|
NA |
자연어 프롬프트, |
|
Hugging Face |
|
NA |
자연어 프롬프트, |
|
AWS |
|
광범위한 사용 사례를 지원합니다. |
주:
-
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_PROFILE 및 DBMS_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를 사용하려면 다음 단계를 수행합니다.
- 보안 API 키를 얻습니다. API 키는 Azure 포털의 Resource Management 섹션에서 찾을 수 있습니다. Azure OpenAI 서비스 리소스 페이지에서 키 및 끝점을 누릅니다. KEY1 또는 KEY2를 복사할 수 있습니다.
- Azure OpenAI 서비스 리소스를 생성하고 Azure OpenAI 서비스 리소스 생성 및 배포 모델을 배포합니다.
참고:
- 이러한 매개변수는 네트워크 액세스 권한을 제공하고
DBMS_CLOUD_AI.CREATE_PROFILE프로시저를 사용하여 Azure OpenAI Service 프로파일을 만드는 데 사용되므로 리소스 이름과 배포 이름을 확인합니다. - 모델에서 분당 토큰의 비율 제한에 대해 자세히 알아보려면 Azure OpenAI 서비스 할당량 및 제한을 참조하십시오.
- 이러한 매개변수는 네트워크 액세스 권한을 제공하고
- 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 키를 가져옵니다.
- Google AI Studio로 이동합니다.
- Sign In to Google AI Studio를 누릅니다.
- 프롬프트 화면에서 Get API key를 누릅니다.
- 다음 페이지에서 적용 가능한 모든 옵션을 선택합니다.
- Create API key를 누릅니다.
-
새 프로젝트에서 [API 키 생성]을 누릅니다.
화면에 진행률이 표시되고 API 키가 생성됩니다. 키를 복사하고 저장합니다.
- Anthropic: Anthropic Developer Console이 자연어 프롬프트에 대한 SQL 및 텍스트 응답을 생성할 수 있도록 하려면 Anthropic Developer Console 유료 계정에서 API 키를 얻습니다.
- Anthropic Developer Console로 이동합니다.
- 아직 계정이 없으면 계정을 만드세요.
- 로그인한 후 API 섹션 또는 대시보드로 이동합니다.
- API 키를 생성하거나 볼 수 있는 옵션을 찾습니다.
- 새 API 키를 생성하려면 누릅니다.
-
생성된 API 키를 복사하여 저장합니다.
Claude API는 유료 서비스입니다. API 키를 사용하려면 먼저 계정에 크레딧을 추가해야 합니다.
- Hugging Face: AI 제공자로서 Hugging Face가 자연어 프롬프트에 대한 SQL 및 텍스트 응답을 생성할 수 있도록 하려면 Hugging Face 유료 계정에서 API 키를 가져옵니다.
- Hugging Face로 이동합니다.
- 아직 계정이 없으면 계정을 만드세요.
- 계정 설정으로 이동합니다.
- 탐색 메뉴에서 액세스 토큰을 찾습니다.
- 새 API 키를 생성하려면 누릅니다.
- 생성된 API 키를 복사하여 저장합니다.
-
AWS: AWS를 사용으로 설정하려면 API 키 및 모델 ID를 가져옵니다.
API 키를 가져와서
DBMS_CLOUD.CREATE_CREDENTIAL를 통해 인증서를 생성하는 데 사용합니다.이 프로세스에 따라 API 키 및 모델 이름을 가져옵니다.
- 아직 AWS 계정이 없는 경우 AWS 계정에 가입하십시오.
- AWS Bedrock Console에서 액세스 키와 암호 키를 생성합니다.
- 생성된 키를 복사하여 저장합니다.
- 기초 모델에 대한 액세스를 요청합니다. Amazon Bedrock 기반 모델에 액세스를 참조하십시오.
- 모델 ID를 가져옵니다.
DBMS_CLOUD_AI.CREATE_PROFILE프로시저에서 모델 ID가 필요합니다. 모델 ID는 사용하는 리소스에 따라 다릅니다. 사용하는 경우:- 기본 모델을 지정하고 모델 ID 또는 해당 ARN(Amazon 리소스 이름)을 지정합니다. 기본 모델에 대한 모델 ID 목록은 Amazon Bedrock 기본 모델 ID를 참조하십시오.
- 추론 프로파일은 추론 프로파일 ID 또는 해당 ARN을 지정합니다. 추론 프로파일 ID 목록은 지역 간 추론에 대해 지원되는 영역 및 모델을 참조하십시오.
- 프로비저닝된 모델에서 프로비저닝된 처리량의 ARN을 지정합니다. 자세한 내용은 프로비전된 처리량을 사용하여 추론 실행을 참조하십시오.
- 커스텀 모델로 프로비저닝된 처리량을 구매합니다. 그런 다음 프로비저닝된 결과 모델의 ARN을 지정합니다. 자세한 내용은 Amazon Bedrock에서 사용자정의 모델 사용을 참조하십시오.
- Amazon Bedrock Marketplace 모델에서 생성한 마켓플레이스 엔드포인트의 ID 또는 ARN을 지정합니다. Amazon Bedrock Marketplace를 참조하십시오.
주:
임포트된 모델은 Bedrock Converse API에서 지원되지 않습니다.
AWS를 제공자로 사용하려면 예제: AWS와 함께 AI 선택을 참조하십시오.
-
- 외부 AI 제공자에 액세스할 수 있는 네트워크 ACL 권한입니다.
주:
OCI Generative AI에는 네트워크 ACL을 적용할 수 없습니다. - AI 제공자에 대한 액세스를 제공하는 인증서입니다.
DBMS_CLOUD_AI를 구성하려면 다음과 같이 합니다.
-
Select AI를 사용하려는 사용자에게
DBMS_CLOUD_AI패키지에 대한EXECUTE권한을 부여합니다.기본적으로 ADMIN 사용자에게만
EXECUTE권한이 부여됩니다. ADMIN 사용자는 다른 사용자에게EXECUTE권한을 부여할 수 있습니다.다음 예에서는EXECUTE권한을ADB_USER에 부여합니다.grant execute on DBMS_CLOUD_AI to ADB_USER;다음 예에서는
ADB_USER에 api.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; / -
Select AI 및 AI 공급자 끝점을 사용하려는 사용자에게 네트워크 ACL 액세스 권한을 부여합니다.
ADMIN 사용자는 네트워크 ACL 액세스 권한을 부여할 수 있습니다. 자세한 내용은 Oracle Database 19c PL/SQL Packages and Types Reference의 APPEND_HOST_ACE Procedure 또는 Oracle Database 26ai PL/SQL Packages and Types Reference를 참조하십시오.
- AI 제공자에 대한 액세스를 사용으로 설정할 인증서를 생성합니다.
자세한 내용은 CREATE_CREDENTIAL Procedure를 참조하십시오.
다음은 OpenAI에 대한 액세스를 사용으로 설정하기 위해 인증서를 생성하는 방법의 예입니다.
EXECDBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');
APPEND_HOST_ACE 함수 매개변수
| 매개변수 | 설명 |
|---|---|
|
|
호스트 - 호스트의 이름 또는 IP 주소일 수 있습니다. 와일드카드를 사용하여 도메인 또는 IP 서브넷을 지정할 수 있습니다. 호스트 또는 도메인 이름은 대소문자를 구분하지 않습니다. OpenAI의 경우 api.openai.com를 사용합니다. Cohere의 경우 api.cohere.ai를 사용합니다. Azure OpenAI Service의 경우 <azure_resource_name>.openai.azure.com를 사용합니다. Google의 경우 generativelanguage.googleapis.com를 사용합니다. Anthropic의 경우 api.anthropic.com를 사용합니다. Hugging Face의 경우 api-inference.huggingface.co를 사용합니다. |
|
|
액세스 제어 항목(ACE)입니다. ACL에 대한 각 ACE 항목을 생성하기 위해 |
DBMS_CLOUD.CREATE_CREDENTIAL 매개변수
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 문은 실행할 수 없습니다.
구문
SELECT AI action natural_language_prompt매개변수
| 매개변수 | 설명 |
|---|---|
|
|
자연어 프롬프트를 사용하여 제공된 SQL 명령을 실행합니다. 기본 작업이며 이 매개변수를 지정하는 것은 선택 사항입니다. |
|
|
자연어 프롬프트에 대한 SQL 문을 표시합니다. |
|
|
프롬프트 출력은 자연어로 설명됩니다. 이 옵션은 자연어 요약을 생성하기 위해 SQL 결과를 AI 제공자에게 전송합니다. |
|
|
프롬프트에 따라 LLM에서 직접 응답을 생성합니다. |
|
|
프롬프트에서 생성된 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 프로파일이 설정되지 않은 경우SELECTAI에서 다음 오류를 보고합니다.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는 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, narrate 및 chat 작업을 지원합니다.
사용자 정의 가능한 대화 사용 방법
다음과 같은 방법으로 사용자 정의 가능한 대화에 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 프로파일에서 |
|
|
몇 개의 대화가 허용됩니까? |
하나. |
여러 대화를 생성할 수 있습니다. 대화 ID를 명시적으로 지정하는 경우 필요에 따라 프롬프트를 적절한 대화와 연결하도록 대화 ID 간에 대체할 수 있습니다. |
|
프롬프트는 어디에 저장되며 얼마나 오래 저장됩니까? |
프롬프트는 임시 테이블에 저장되고 세션이 종료되면 삭제됩니다. |
프롬프트는 영구 테이블에 저장됩니다. 프롬프트는 |
|
얼마나 많은 프롬프트가 저장되고 LLM으로 얼마나 많은 프롬프트가 전송됩니까? |
최대 10개의 프롬프트가 저장되고 LLM으로 전송됩니다. 이 제한은 사용자 정의할 수 없습니다. |
모든 프롬프트가 저장됩니다. 기본적으로 시스템은 가장 최근 10개의 프롬프트를 LLM으로 전송합니다. |
|
개별 프롬프트를 삭제할 수 있습니까? |
아니요. 개별 프롬프트는 수동으로 삭제할 수 없습니다. |
USER_CLOUD_AI_CONVERSATION_PROMPTS 뷰에 지정된 프롬프트 ID를 사용하고 |
|
대화 검색에 AI 프로파일이 사용됩니까? |
예. Select AI는 동일한 AI 프로파일을 사용하여 이전에 생성된 프롬프트 및 응답을 검색합니다. |
아니요. Select AI는 프롬프트 및 응답을 저장할 때 사용되는 AI 프로파일을 추적하지만 해당 프로파일을 기반으로 검색을 제한하지 않습니다. 또한 모든 대화 내역을 LLM으로 전송하여 응답 생성에 사용된 프로파일에 관계없이 응답 생성을 안내합니다. |
|
프롬프트의 내역은 어디에서 확인할 수 있습니까? |
프롬프트는 CLOUD USER 아래의 임시 테이블에 저장되지만 query를 위해 액세스할 수 없습니다. |
|
LLM 개선을 위한 피드백 제공
Select AI를 사용하면 피드백을 제공하여 선택한 LLM의 보다 정확한 SQL 쿼리 생성 능력을 향상시킬 수 있습니다.
주:
이 기능은 Oracle Database 23ai에서만 사용할 수 있습니다. 기존 AI 선택 작업(runsql, showsql 및 explainsql)과 함께 사용할 수 있습니다. 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 쿼리 생성의 정확성을 향상시키는 프롬프트 튜닝 메커니즘이 도입되었습니다.
- 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_$session및v_$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
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 선택은 다음 기능을 지원하지 않습니다.
-
합성 데이터 생성
-
AI 프로파일의 다른 객체 유형과 속성 그래프 혼합
-
지원되지 않는 간헐적인 질의입니다. 자세한 내용은 예제: 등록정보 그래프에 대한 샘플 프롬프트를 참조하십시오.
속성 그래프에서 Select AI를 사용하는 방법
Select AI를 사용하면 DBMS_CLOUD_AI.GENERATE 함수를 사용하거나 Select AI <action> <prompt>를 사용하여 그래프 데이터를 탐색할 수 있습니다.
object_list 속성에 등록 정보 그래프를 정의한 후 다음을 사용할 수 있습니다.
-
SQL 명령행에
SELECT AI <ACTION> <PROMPT>를 입력하여 출력을 생성합니다. -
DBMS_CLOUD_AI.GENERATE함수 및 함수 내에서 프롬프트를 제공합니다.
지원되는 작업은 runsql, showsql, explainsql, narrate 및 showpropmt입니다. Select AI for Property Graph는 세션 기반의 단기 및 커스터마이징 가능한 장기 대화를 지원합니다.
자세한 내용은 예제: 속성 그래프에 대한 AI 선택 및 예제: 속성 그래프에 대한 샘플 프롬프트를 참조하십시오.
Select AI 사용 예
Oracle의 Select AI와 다양한 지원 AI 제공업체의 통합을 살펴보고, 자연어 프롬프트에서 SQL을 생성, 실행, 설명하거나, LLM과 채팅해 보세요.
예: AI 작업 선택
다음 예에서는 SELECT AI로 수행할 수 있는 runsql(기본값), showsql, narrate, chat, explainsql, feedback 및 summarize과 같은 작업을 보여줍니다. 이러한 예에서는 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.사용자정의 가능한 대화
- 대화를 생성합니다.
- 현재 사용자 세션에서 대화 설정
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_days 및 conversation_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-9C6D4664EC3ADBA/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대화를 생성 및 설정하고 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.다음 예에서는 두 대화가 서로 바꿔서 질문을 하고 정확한 응답을 확인하는 방법을 보여줍니다. 각 대화는 비교에 초점을 맞춘 다른 질문으로 시작됩니다. 나중에 두 대화에서 동일한 후속 질문을 할 때 각각 이전 컨텍스트를 기반으로 다른 답변을 반환합니다.
-- 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 대화 뷰를 질의하여 대화 및 프롬프트 세부정보를 검토할 수 있습니다. 자세한 내용은 을 참조하십시오.
주:
예: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 2DBMS_CLOUD_AI.UPDATE_CONVERSATION 절차를 사용하여 대화의 title, description 및 retention_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_type를 negative로 사용하여 생성된 SQL을 피드백으로 수정(음수 피드백)하고 SQL 질의를 제공하는 방법을 보여줍니다.
프롬프트가 포함된 sql_text 매개변수와 함께 DBMS_CLOUD_AI.FEEDBACK 프로시저를 호출하여 이름이 OCI_FEEDBACK1인 AI 프로파일에 피드백을 추가합니다. 속성에 대한 자세한 내용은 를 참조하십시오. 그런 다음 <profile_name>_FEEDBACK_VECINDEX$VECTAB 테이블에서 해당 특정 SQL 질의에 연결된 content 및 attributes 열을 검색합니다. 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_type를 positive로 사용하여 생성된 SQL(긍정적인 피드백)에 동의하고 확인한다는 승인을 제공하는 방법을 보여줍니다.
이 예제에서 질의는 제공된 프롬프트에 대한 v$mapped_sql 뷰에서 sql_id를 검색합니다. 자세한 내용은 V_MAPPED_SQL을 참조하십시오.
sql_id 매개변수와 함께 DBMS_CLOUD_AI.FEEDBACK 프로시저를 호출하여 OCI_FEEDBACK1라는 AI 프로파일에 피드백을 추가합니다. 그런 다음 <profile_name>_FEEDBACK_VECINDEX$VECTAB 테이블에서 해당 특정 SQL 질의에 연결된 content 및 attributes 열을 검색합니다. 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에 대한 피드백이 제출됩니다.
DBMS_CLOUD_AI.FEEDBACK 프로시저 매개변수를 지정하여 생성된 SQL에 대한 피드백을 추가하거나 삭제하는 방법을 보여줍니다. 이 예에서는 sql_id 및 sql_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');이 예제에서는 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이 예제에서는 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를 feedback 작업과 함께 사용하여 생성된 특정 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 프로파일에서 다중 등록 정보 그래프를 정의하는 방법을 보여줍니다.
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;