Select AI 에이전트로 자율운영 에이전트 구축
Select AI Agent(자율운영 에이전트 프레임워크)를 사용하면 계획, 도구 사용, 리플렉션, 메모리를 결합하여 다중 회전 워크플로우를 제공하는 자율운영 AI 데이터베이스 내에서 대화형 및 자율운영 에이전트를 구축할 수 있습니다.
주:
Select AI Agent 및 DBMS_CLOUD_AI_AGENT 패키지에 대한 지원은 Oracle Database 19c 버전 19.29부터, Oracle Database 26ai 버전 23.26부터 제공됩니다.Select AI Agent 정보
Select AI Agent(자율운영 에이전트 프레임워크)는 자율운영 AI 데이터베이스 내에서 대화형 및 자율운영 에이전트를 생성하고 관리하는 프로그램입니다. 에이전트는 ReAct(Reasoning and Acting) 에이전트 패턴으로 지정된 AI 프로파일에 의해 구동되는 단기 및 장기 메모리를 사용하여 요청, 통화 도구, 결과 반영, 컨텍스트를 유지합니다.
Select AI Agent는 RAG 및 Natural Language to SQL(NL2SQL), 커스터마이징 PL/SQL 프로시저, 외부 REST API와 같은 내장 도구를 사용하여 작업을 완료합니다. 프레임워크는 다중 회전 메모리를 보존하여 대화 간에 컨텍스트를 유지합니다. 이러한 기능들은 엔터프라이즈 데이터 및 워크플로와 통합되는 확장 가능한 컨텍스트 인식 생성형 AI를 지원합니다.
DBMS_CLOUD_AI_AGENT 패키지는 관리, 통합관리 및 보안 경계를 캡슐화합니다. 자세한 내용은 DBMS_CLOUD_AI_AGENT Package를 참조하십시오.
Select AI Agent의 특징
주요 기능에는 통합 인텔리전스, 유연한 툴링, 컨텍스트 인식 대화 및 빠른 배포가 포함됩니다.
-
통합 인텔리전스:
계획, 도구 사용 및 리플렉션을 결합하여 상담원이 태스크에 대해 추론하고, 도구를 선택 및 실행하고, 결과를 관찰하고, 계획을 조정하고, 대화 전반에 걸쳐 응답을 개선할 수 있도록 합니다. 상담원은 단계를 계획하고, 도구를 실행하고, 관찰을 평가하고, 결과가 기대를 놓칠 때 접근 방식을 업데이트합니다. 이 루프는 정확성을 강화하고 재작업을 줄이며 대화를 순조롭게 유지합니다.
-
유연한 툴링:
통합관리 구성요소 또는 별도 인프라 없이 내장된 RAG 및 NL2SQL, 커스터마이징 PL/SQL 프로시저 및 외부 REST 서비스를 지원 및 사용할 수 있으므로 필요에 따라 외부 기능을 통합하면서 데이터베이스에 핵심 논리를 유지할 수 있습니다.
-
컨텍스트 인식 대화:
단기 및 장기 메모리를 유지하여 회전율 전반에 걸쳐 컨텍스트를 유지하고, 응답을 개인화하고, 환경설정을 저장하고, 다중 회전 세션 동안 수정 및 확인을 위한 루프 내 인적 제어를 지원합니다. 단기 기억은 현재의 대화를 일관되게 유지합니다. 장기 메모리는 선호도 및 이전 결과를 기록하여 인적 검토자의 후속 상호 작용 및 감독을 지원합니다.
-
확장성 및 보안:
자율운영 AI 데이터베이스 내에서 실행하고, 보안 제어, 감사 및 성능을 상속하고, 데이터 이동을 줄이고, 대규모 엔터프라이즈 배포 및 규제 환경에 대한 거버넌스를 표준화합니다. 에이전트는 데이터베이스 보안, 감사 및 성능 특성의 이점을 활용합니다. 데이터를 가까이 처리하면 이동이 줄어들고 거버넌스 관행에 맞춰 조정됩니다.
-
더 빠른 개발:
익숙한 SQL 및 PL/SQL을 사용하여 에이전트, 작업 및 도구를 정의하고, 기존 프로시저를 재사용하고, 기능을 더 빠르게 배송하는 동시에 별도의 인프라를 구축하지 않고도 운영 데이터 및 팀과 가까운 로직을 유지할 수 있습니다.
ReAct 에이전트 패턴
Select AI Agent는 에이전트가 요청에 대한 이유를 파악하고, 도구를 선택하고, 작업을 수행하고, 결과를 평가하여 목표를 달성하는 데 ReAct(Reasoning and Acting) 에이전트 패턴을 사용합니다.
-
질의: 사용자가 질문을 하거나 요청을 표시합니다. 에이전트가 이를 읽고, 주요 세부 정보를 추출하고, 다음 단계를 계획할 준비를 합니다.
-
생각과 행동 : 에이전트가 옵션에 대한 이유를 선택하고 도구를 선택한 다음 작업을 위해 필요한 데이터를 수집하거나 상태를 변경하기 위해 실행합니다.
-
관찰: 관찰에는 도구 또는 query 결과, 확인 메시지 및 오류가 포함됩니다. 이는 에이전트의 다음 추론 라운드에 대한 입력이 됩니다. 에이전트는 관찰을 기록하고 결과가 다음 단계를 지원하는지 아니면 최종 응답을 지원하는지 확인합니다.
-
최종 응답: 충분히 성공적인 사고와 관찰 후, 에이전트는 명확한 답변을 작성하고, 중요한 결정을 설명하고, 다음 단계 또는 후속 조치를 공유합니다.
AI 에이전트 구조 선택
Select AI Agent는 계획, 도구 사용, 반사 및 메모리 관리의 네 가지 계층으로 작업을 구성합니다. 이러한 레이어는 추론, 도구 실행, 평가 및 컨텍스트 다중 회전 상호 작용을 조정합니다.
계획: Planning은 사용자 요청을 해석하고, 정렬된 작업으로 나누고, 후보 도구를 선택하고, 세션 컨텍스트, 이전 결과 및 관련 지식을 사용하여 계획의 초안을 작성합니다. 에이전트는 요청을 분석하고 누락된 세부 정보를 식별하며 정렬된 작업 시퀀스를 제안합니다. 정책, 데이터 범위 및 예상 결과에 맞는 도구를 선택합니다.
도구 사용: 도구 사용이 각 작업에 대한 도구를 선택하고 실행합니다. 지원되는 유형에는 RAG, NL2SQL, 도구를 생성할 때 추가할 수 있는 사용자정의 PL/SQL 프로시저, 웹 검색 및 전자메일과 같은 외부 REST 서비스가 포함됩니다. 각 단계는 매개변수가 있는 도구를 호출합니다. 내장 도구는 검색 및 SQL 생성을 처리합니다. 커스텀 PL/SQL은 도메인 논리를 캡슐화합니다. REST 도구는 외부 서비스에 연결됩니다.
반사: Reflection은 도구 결과를 기대치에 맞게 평가하고 최종 응답을 진행합니다. 에이전트는 관찰을 목표와 비교합니다. 결과가 잘못 보이거나 도구 호출 오류나 사용자 승인되지 않은 결과가 있는 경우 에이전트는 추론을 수정하거나 다른 도구를 선택하거나 계획을 갱신한 후 다시 시도합니다. 결과가 맞지 않으면 계획을 조정하거나, 다른 도구를 선택하거나, 계속하기 전에 명확한 질문을 할 수 있습니다. USER_CLOUD_AI_CONVERSATION_PROMPTS를 사용하여 Select AI Agent 의견을 질의할 수 있습니다. 자세한 내용은 DBMS_CLOUD_AI 뷰를 참조하십시오.
메모리 관리: 메모리 관리는 에이전트 팀별로 세션 컨텍스트와 지식을 저장합니다. 단기 메모리는 에이전트 팀당 최근 메시지와 중간 결과를 보유합니다. 장기 메모리는 선호도, 이력 및 전략을 기록하여 연속성, 개인화 및 계획을 향상시킵니다. 장기 메모리는 세션 전반에 걸쳐 유용한 지식을 유지하므로 상담원 팀 전반에서 시간이 지남에 따라 안내 및 응답 품질이 향상됩니다.
AI 에이전트 용어 선택
Select AI Agent(자율운영 에이전트 프레임워크)와 관련된 개념 및 용어를 살펴봅니다.
다음은 Select AI Agent와 관련된 용어입니다.
| 용어 | 정의 |
|---|---|
| 상담원 작업 |
에이전트의 컨텍스트에서 동작은 파라미터가 포함된 도구를 트리거하는 명령입니다. 플랫폼은 도구를 실행하고 오류를 처리하며 다음 추론 단계 루프에 대한 관찰을 반환합니다. 작업은 계획을 실행에 연결합니다. 실행할 도구와 입력 대상을 정의합니다. |
| 에이전트 |
에이전트는 정의된 목적을 위해 작업을 수행합니다. 에이전트는 요청에 대한 사유, 도구 선택, 단계 실행, 결과 평가, 데이터베이스 컨텍스트 기반 응답을 생성하는 구성된 워커입니다. 에이전트는 반환 처리 또는 지식 검색과 같은 특정 작업에 대한 동작, 정책 및 사용 가능한 도구를 캡슐화합니다. |
| 에이전트 팀 |
에이전트 워크플로우를 수행하는 하나 이상의 에이전트입니다. 팀은 책임을 조정하고, 컨텍스트를 공유하고, 에이전트-태스크 쌍을 실행하여 안정적으로 다단계 상호 작용을 완료합니다. 팀은 전문 상담원 간에 작업을 나누고 기여도를 순서 지정합니다. 팀은 공유된 컨텍스트를 유지하고 통합된 응답을 생성합니다.
|
| MCP 서버 |
MCP 서버(모델 컨텍스트 프로토콜 서버)는 일관된 프로토콜을 통해 모델 기능, 컨텍스트 검색 및 확장을 노출함으로써 애플리케이션이 생성형 AI 모델 및 도구와 상호 작용할 수 있는 표준화된 방법을 제공합니다. Select AI Agent를 사용하여 자율운영 AI 데이터베이스 MCP 서버를 통해 노출할 수 있는 도구를 정의할 수 있습니다. 이러한 도구에는 SQL 생성, RAG, 알림(이메일 및 Slack), Websearch 및 맞춤형 도구를 위한 기본 제공 도구가 포함될 수 있습니다. 사용자 정의 도구는 데이터베이스에 정의된 함수를 노출할 수 있습니다. |
| 관찰 |
도구에서 반환된 데이터는 행, 메시지 또는 오류이며, 에이전트가 리플렉션 중에 기록하고 평가합니다. 관찰은 다음 추론 단계를 안내하고 최종 응답에 대한 증거를 제공합니다. |
| 태스크 |
작업은 작업 단위를 나타냅니다. 도구 선택, 파라미터 매핑 및 실행 정책을 안내하여 다운스트림 단계에서 읽고 요약할 수 있는 결과를 생성합니다. 태스크는 목표, 입력, 도구 선택 및 보호 한계선을 지정합니다. 이후 단계에서 사용할 수 있는 구조화된 출력을 반환합니다.
|
| 도구 |
도구는 데이터 업데이트, 문서 검색 또는 외부 서비스 호출과 같은 작업을 수행합니다. 툴은 파라미터를 사용하고, 결정적으로 또는 비결정적으로 실행할 수 있으며, 추론에 대한 관찰을 반환합니다. 도구는 반복 가능한 작업을 캡슐화합니다. 부작용을 제어하고 관찰할 수 있으므로 감사 및 디버깅을 지원합니다. Select AI Agent 프레임워크에서 도구는 에이전트가 작업 처리 중 사용할 수 있는 기능 빌딩 블록을 나타냅니다. 도구는 다음과 같습니다.
에이전트는 작업의 필요에 따라 도구를 선택하고 결과(예측)를 사용하여 추론, 다음 단계 결정 또는 응답 생성을 수행합니다. 디버깅, 관찰 가능성 및 보안을 지원하기 위해 도구 메타데이터 및 실행 내역이 기록됩니다.
|
AI 에이전트 사용 사례 선택
Select AI Agent는 외부 서비스 연결, PL/SQL 도구로 작업 중심 자동화 구축, 자연어 상호 작용을 통한 데이터 대화형 액세스 등 다양한 역할 전반의 실용적인 시나리오를 지원합니다.
사용 사례는 다음과 같습니다.
보강된 응답을 위해 외부 API 통합:
배송 상태, 지식 문서 또는 메시징과 같은 REST 서비스를 연결합니다. 에이전트는 외부 결과를 데이터베이스 팩트와 혼합하고 실행 가능한 시의적절한 지침을 반환합니다.
PL/SQL 도구를 사용하여 작업별 에이전트 작성:
업데이트, 검증 또는 변환을 위해 PL/SQL 툴을 호출하는 포커스된 에이전트를 생성하고, 논리를 데이터에 가깝게 유지하고, 성능을 개선하고, 환경 전반의 유지보수를 일관되게 간소화합니다. 갱신 및 검사를 위해 기존 PL/SQL을 래핑합니다. 에이전트는 작업을 조정하고, 매개변수를 적용하고, 결과를 기록하는 동시에 트랜잭션 제어를 유지합니다.
엔터프라이즈 데이터에 대한 대화식 액세스 지원:
데이터베이스 객체에 기반한 자연어 질문을 통해 데이터를 노출합니다. 보안 및 거버넌스 요구사항을 준수하면서 검색, 적용 정책 및 결과 표시에 NL2SQL를 사용합니다. NL2SQL는 승인된 객체의 질문을 SQL로 변환합니다. 에이전트는 객체 목록 및 액세스 규칙을 따르는 동안 결과 및 다음 단계를 요약합니다.
AI 에이전트 선택 사용을 위한 필요 조건
Select AI Agent를 사용하려면 먼저 DBMS_CLOUD_AI_AGENT 패키지 및 Select AI에 필요한 기타 모든 권한을 사용할 수 있는 권한이 있어야 합니다.
Select AI Agent를 사용하려면 다음을 수행해야 합니다.
-
선행 조건을 수행하고 Select AI에 대한 권한을 부여합니다. Configure AI Profiles Using DBMS_CLOUD_AI fr 지침을 참조하십시오.
-
하나 이상의 에이전트 팀이 정의되었습니다. CREATE_AGENT 프로시저를 참조하십시오.
-
선택적으로 다중 회전 컨텍스트를 추적하기 위해
conversation_id가 생성됩니다.
AI 에이전트 선택에 대한 권한 부여
DBMS_CLOUD_AI_AGENT를 구성하려면 다음을 수행합니다.
Select AI Agent를 사용하려는 사용자에게 DBMS_CLOUD_AI_AGENT 패키지에 대한 EXECUTE 권한을 부여합니다.
기본적으로 시스템 관리자만 EXECUTE 권한을 가집니다. 관리자는 다른 사용자에게 EXECUTE 권한을 부여할 수 있습니다.
Select AI 에이전트를 실행할 권한의 예
다음 예에서는 EXECUTE 권한을 ADB_USER에 부여합니다.
GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;Select AI Agent 사용 방법
agent 작업 또는 DBMS_CLOUD_AI_AGENT.RUN_TEAM 함수를 사용하여 Select AI Agent를 사용할 수 있습니다.
-
agent를 Select AI 작업(Select AI agent <prompt>)으로 사용합니다. DBMS_CLOUD_AI_AGENT.RUN_TEAM를 호출하고 함수 내에서 다른 매개변수와 함께 프롬프트를 제공합니다.
두 옵션 모두 프롬프트를 선택한 에이전트 팀으로 라우팅하고 팀의 회신을 반환합니다.
Select AI Agent 사용 예
영화 분석, 로그 분석 및 고객 지원과 같은 일반적인 작업을 위해 Select AI Agent를 구축, 구성 및 상호 작용하는 방법을 보여주는 예제를 살펴보세요.
예: 에이전트 생성
에이전트를 생성하여 정의된 작업을 수행합니다.
이 예에서는 제품 반품 관련 대화 처리를 담당하는 Customer_Return_Agent라는 에이전트를 생성합니다.
이 예에서는 이름이 GOOGLE인 AI 프로파일에 지정된 대로 Google을 AI 제공자로 사용하는 방법을 보여줍니다. AI 프로파일은 에이전트가 추론 및 응답에 사용하는 LLM을 식별합니다. role 속성은 에이전트를 안내하는 지침을 제공합니다.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
agent_name => 'CustomerAgent',
attributes =>'{
"profile_name": "GOOGLE",
"role": "You are an experienced customer agent who deals with customers return request."
}'
);
END;
/ 예: 내장 도구 생성
SQL, RAG, Websearch, Email 및 Slack과 같은 기본 제공 도구를 생성합니다. 이러한 도구를 사용하면 에이전트 및 작업이 데이터를 질의하고, 지식을 검색하고, 웹을 검색하고, 통지를 전송할 수 있습니다.
내장 도구(예: SQL 및 RAG)에는 내부 지침이 포함되어 있습니다. 선택적으로 사용자 제공 지침을 추가하여 사용 사례에 맞게 동작을 조정할 수 있습니다. 지침을 추가하면 작업별 컨텍스트(예: 특정 스키마에 대한 범위 질의 또는 응답 형식 강제 적용)를 추가할 수 있습니다. 이렇게 하면 특수한 시나리오의 관련성이 향상될 수 있습니다. 잘못 작성되거나 지나치게 규범적인 지침은 도구 성능을 저하시킬 수 있습니다. 지침은 도구의 목적에 따라 짧고 구체적이며 일관되게 유지하십시오.
이 예제에서는 자연어 질의를 SQL 문으로 변환하는 SQL 툴을 생성합니다. SQL 도구를 사용하면 에이전트가 프롬프트를 SQL 쿼리에 매핑하여 데이터 관련 질문에 답할 수 있습니다.
이 예에서는 이름이 nl2sql_profile인 AI 프로파일에 지정된 대로 OCI를 AI 제공자로 사용하는 방법을 보여줍니다. AI 프로파일은 에이전트가 추론 및 응답에 사용하는 LLM을 식별합니다. 이 예에서 AI 프로파일 nl2sql_profile은 에이전트가 쿼리할 수 있는 SH 스키마 테이블 세트를 정의하여 고객, 제품, 프로모션 및 국가와 같이 일반적으로 사용되는 영업 기록 데이터에 자연어로 접근할 수 있도록 합니다. SQL 도구는 AI 프로파일에 지정된 데이터베이스 객체를 사용하여 생성된 SQL 문이 SH 데이터 세트와 정확하고 관련이 있는지 확인합니다.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'nl2sql_profile',
attributes => '{"provider": "oci",
"credential_name": "GEN1_CRED",
"oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
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"}]
}');
end;
/
EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('SQL');
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'SQL',
attributes => '{"tool_type": "SQL",
"tool_params": {"profile_name": "nl2sql_profile"}}'
);
END;
/이 예에서는 RAG(검색 증강 생성) 도구를 만듭니다. RAG 도구를 사용하면 상담원이 엔터프라이즈 문서에서 응답을 검색하고 접지하여 지식 기반 답변의 정확성을 높일 수 있습니다.
이 예에서는 인증서, 벡터 인덱스로 RAG_PROFILE를 정의하고 프로파일 매개변수를 지정하는 방법을 보여줍니다. 그런 다음 Object Storage에서 문서 임베딩을 위한 벡터 인덱스 RAG_INDEX를 생성하고 프로파일에 연결된 RAG_TOOL를 생성합니다.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'RAG_PROFILE',
attributes =>'{"provider": "oci",
"credential_name": "GENAI_CRED",
"vector_index_name": "RAG_INDEX",
"oci_compartment_id": "ocid1.compartment.oc1..aaaa..",
"temperature": 0.2,
"max_tokens": 3000
}');
END;
/
BEGIN
DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
index_name => 'RAG_INDEX',
attributes => '{"vector_db_provider": "oracle",
"location": "https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder",
"object_storage_credential_name": "OCI_CRED",
"profile_name": "RAG_PROFILE",
"chunk_overlap":128,
"chunk_size":1024
}');
END;
/
EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('RAG_TOOL');
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'RAG_TOOL',
attributes => '{"tool_type": "RAG",
"tool_params": {"profile_name": "RAG_PROFILE"}}'
);
END;
/
이 예제는 인터넷에서 세부 정보를 검색하기 위한 Websearch 툴을 생성합니다. Websearch 도구를 사용하면 에이전트가 웹에서 제품 가격 또는 설명과 같은 정보를 조회할 수 있습니다.
OPENAI_CRED 인증서를 생성하고 Websearch 툴을 생성하여 그 목적을 설명하고 인증서에 연결합니다.
주:
OpenAI는 유일하게 지원되는 Websearch AI 제공자입니다.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;
/
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
username => 'OPENAI',
password => '<OPENAI_API_KEY>'
);
END;
/
EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('Websearch');
BEGIN
DBMS_CLOUD_AI_AGENT.create_tool(
tool_name => 'Websearch',
attributes => '{"instruction": "This tool can be used for searching the details about topics mentioned in notes and prepare a summary about prices, details on web",
"tool_type": "WEBSEARCH",
"tool_params": {"credential_name": "OPENAI_CRED"}}'
);
END;
/
이 예에서는 Email 알림 도구를 만듭니다. [전자메일 도구]를 사용하면 에이전트가 워크플로우의 일부로 통지 전자메일을 보낼 수 있습니다.
이 예에서는 비밀번호를 사용하여 EMAIL_CRED 인증서를 만들고, 데이터베이스 사용자에 대한 SMTP 액세스를 허용하고, SMTP 세부정보, 발신자 및 수신자 주소를 포함하여 EMAIL 유형의 통지 도구를 만드는 방법을 보여줍니다.
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'EMAIL_CRED',
username => '<username>',
password => '<password>');
END;
/
-- Allow SMTP access for user
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'smtp.email.us-ashburn-1.oci.oraclecloud.com',
lower_port => 587,
upper_port => 587,
ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
principal_name => 'ADB_USER',
principal_type => xs_acl.ptype_db));
END;
/
EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('Email');
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'EMAIL',
attributes => '{"tool_type": "NOTIFICATION",
"tool_params": {"notification_type" : "EMAIL",
"credential_name": "EMAIL_CRED",
"recipient": "example_recipient@oracle.com",
"smtp_host": "smtp.email.us-ashburn-1.oci.oraclecloud.com",
"sender": "example_sender@oracle.com"}}'
);
END;
/
이 예에서는 Slack 알림 도구를 만듭니다. Slack 도구를 사용하면 에이전트가 Slack 작업 영역 채널에 직접 통지를 전달할 수 있습니다.
이 예에서는 Slack에 대한 ACL 항목을 추가하고 SLACK_CRED 및 대상 채널에 연결하는 SLACK 유형의 통지 도구를 생성하는 방법을 보여줍니다.
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
host => 'slack.com',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http'),
principal_name => 'ADB_USER',
principal_type => xs_acl.ptype_db));
END;
/
BEGIN
DBMS_CLOUD_AI_AGENT.create_tool(
tool_name => 'slack',
attributes => '{"tool_type": "SLACK",
"tool_params": {"credential_name": "SLACK_CRED",
"channel": "<channel_number>"}}'
);
END;
/예: 태스크 생성
에이전트가 수행할 수 있는 작업을 생성합니다.
주:
DBA만 EXECUTE 권한 및 네트워크 ACL 프로시저를 부여할 수 있습니다.
이 예에서는 LLM이 구조화된 데이터를 사용하여 표준 확인 전자메일을 생성하도록 지시하는 Generate_Email_Task를 생성합니다.
다음 예에서는 instruction 속성 사용 및 전자 메일에 포함해야 하는 항목에 대한 지침을 제공합니다.
BEGIN DBMS_CLOUD_AI_AGENT.DROP_TASK('Generate_Email_Task');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'Generate_Email_Task',
attributes => '{"instruction": "Use the customer information and product details to generate an email in a professional format. The email should:' ||
'1. Include a greeting to the customer by name' ||
'2. Specify the item being returned, the order number, and the reason for the return' ||
'3. If it is a refund, state the refund will be issued to the credit card on record.' ||
'4. If it is a replacement, state that the replacement will be shipped in 3-5 business days."}'
);
END;이 예에서는 요청을 기반으로 로그를 검색하는 FETCH_LOGS_TASK를 생성합니다.
이 예에서는 log_fetcher 툴을 사용하여 로그를 검색하는 작업을 만드는 방법을 보여줍니다. 이 사용자정의 툴은 PL/SQL 프로시저 fetch_logs을 지정합니다. 작업 지침은 작업에 필요한 작업을 지정합니다. 속성 enable_human_tool은 true로 설정되므로 개인이 필요한 경우 태스크 플로우를 안내하거나 승인하기 위해 단계적으로 들어갈 수 있습니다. 전체 예는 를 참조하십시오.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name =>'FETCH_LOGS_TASK',
attributes =>'{
"instruction": "Fetch the log entries from the database based on user request: {query}",
"tools": ["log_fetcher"],
"enable_human_tool" : "true"
}'
);
END;
/이 예에서는 인출된 로그를 분석하는 ANALYZE_LOG_TASK를 생성합니다.
다음 예에서는 FETCH_LOGS_TASK를 input 속성으로 사용하는 방법을 보여 줍니다. FETCH_LOGS_TASK 출력을 입력으로 가지도록 로그가 수집된 후 ANALYZE_LOG_TASK라는 작업이 시작됩니다. 작업 지침은 작업에 필요한 작업을 지정합니다. 속성 enable_human_tool는 Human-in-the-loop 검토가 없음을 나타내는 false로 설정됩니다.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name =>'ANALYZE_LOG_TASK',
attributes =>'{"instruction": "Analyze the fetched log entries retrieved based on user request: {query} ' ||
'Generate a detailed report include issue analysis and possible solution.",
"input" : "FETCH_LOGS_TASK",
"enable_human_tool" : "false"
}'
);
END;
/예: 에이전트 팀 생성
작업을 수행할 에이전트 팀을 생성합니다.
이 예에서는 ReturnAgency 팀을 만들고 단일 에이전트 Customer_Return_Agent를 포함합니다. Return_And_Price_Match 작업이 에이전트에 할당되었습니다. 이 태스크는 사유를 요청하고 데이터베이스에서 주문 상태를 업데이트하여 반품 요청을 관리합니다. process는 정의된 순서로 작업을 실행하기 위해 sequential로 설정됩니다.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TEAM(
team_name => 'ReturnAgency',
attributes => '{"agents": [{"name":"Customer_Return_Agent","task" : "Return_And_Price_Match"}],
"process": "sequential"}');
END;
/
이 예에서는 Ops_Issues_Solution_Team 팀을 만들고 로그 분석 및 문제 해결을 처리할 두 개의 에이전트(Data_Engineer 및 Ops_Manager)를 포함합니다. Data_Engineer 에이전트는 fetch_logs_task 작업을 실행하고 Ops_Manager 에이전트는 analyze_log_task 작업을 실행합니다. process는 정의된 순서로 작업을 실행하기 위해 sequential로 설정됩니다.
BEGIN
DBMS_CLOUD_AI_AGENT.create_team(
team_name => 'Ops_Issues_Solution_Team',
attributes => '{"agents": [{"name":"Data_Engineer","task" : "fetch_logs_task"},
{"name":"Ops_Manager","task" : "analyze_log_task"}],
"process": "sequential"
}');
END;
/
예: 내장 도구로 Movie Analysis Agent 생성
이 예에서는 Select AI Agent를 사용하여 동영상 분석 에이전트를 생성하는 방법을 보여줍니다. 이 예에서는 데이터를 검색하고, 질문에 답변하고, 웹을 검색하고, 분석을 전자메일로 보내거나, Slack 통지를 전송하는 동영상 분석 에이전트를 설정합니다.
다음 예에서는 데이터를 사용할 수 있다고 가정합니다.
이 예에서는 MOVIE_ANALYST 에이전트를 생성하고 EMAIL 및 SLACK 유형의 SQL, RAG, WEBSEARCH 및 NOTIFICATION 툴과 같은 여러 내장 툴을 사용합니다. 상담원은 자연어 프롬프트를 사용하여 영화 관련 질문에 답변합니다.
이 예에서 DBA가 DBMS_CLOUD_AI_AGENT, DBMS_CLOUD_AI, DBMS_CLOUD_PIPELINE 패키지, AI 제공자에 대한 ACL 액세스, SMTP 액세스 및 Slack 액세스에 대해 EXECUTE 권한을 부여한 후에는 먼저 MOVIE_ANALYST 에이전트를 만듭니다.
에이전트 생성
영화, 배우 및 장르에 대한 질문에 답변하는 역할과 프로파일(GROK)이 포함된 MOVIE_ANALYST이라는 에이전트를 생성합니다.
작업 생성
영화 관련 query에 응답하기 위한 지침이 포함된 ANALYZE_MOVIE_TASK이라는 작업을 생성합니다.
팀 작성
MOVIE_ANALYST가 에이전트로, 작업이 ANALYZE_MOVIE_TASK인 MOVIE_AGENT_TEAM 팀을 생성하고 이 팀을 활성 팀으로 설정합니다.
나중에 SQL, RAG, Websearch 또는 Notification과 같은 도구를 첨부하여 해당 기능을 확장할 수 있습니다.
Select AI 에이전트 팀 실행
이제 프롬프트의 접두어로 select ai agent를 사용하여 에이전트 팀을 실행합니다.
도구 생성
SQL: NL2SQL 프로파일을 사용하여 질문을 SQL 쿼리 및 기타 지원되는 Select AI 작업으로 변환합니다.RAG: 저장된 문서에서 지식 기반 컨텍스트를 검색합니다.WEBSEARCH: 영화 세부 정보 또는 가격을 온라인으로 수집합니다.NOTIFICATION:EMAIL: 수신자에게 사용자 프롬프트, 영화 보고서 또는 리뷰에 답변을 보냅니다.SLACK: 사용자 프롬프트, 요약 또는 업데이트에 대한 답변을 Slack에 직접 보냅니다.
전체 예는 다음과 같습니다.
--Grants EXECUTE privilege to ADB_USER
--
GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;
-- Websearch tool accesses OPENAI endpoint, allow ACL access
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;
/
-- To allow Email tool in Autonomous Database, allow SMTP access
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'smtp.email.us-ashburn-1.oci.oraclecloud.com',
lower_port => 587,
upper_port => 587,
ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
principal_name => 'ADB_USER,
principal_type => xs_acl.ptype_db));
END;
/
-- Allow ACL access to Slack
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
host => 'slack.com',
lower_port => 443,
upper_port => 443,
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 an agent
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
agent_name => 'MOVIE_ANALYST',
attributes => '{"profile_name": "GROK",
"role": "You are an AI Movie Analyst. Your can help answer a variety of questions related to movies. "
}'
);
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'ANALYZE_MOVIE_TASK',
attributes => '{"instruction": "Help the user with their request about movies. User question: {query}",
"enable_human_tool" : "true"
}'
);
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TEAM(
team_name => 'MOVIE_AGENT_TEAM',
attributes => '{"agents": [{"name":"MOVIE_ANALYST","task" : "ANALYZE_MOVIE_TASK"}],
"process": "sequential"
}');
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');
PL/SQL procedure successfully completed.
select ai agent who are you?;
RESPONSE
--------------------------------------------------------------------------------
I'm MOVIE_ANALYST, an AI Movie Analyst here to assist with any questions or topi
cs related to movies. Whether you need information on films, actors, directors,
genres, or recommendations, I'm ready to help. What can I assist you with regard
ing movies?
-- SQL TOOL
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'nl2sql_profile',
attributes => '{"provider": "oci",
"credential_name": "GENAI_CRED",
"oci_compartment_id" : "ocid1.compartment.oc1..aaaaa...",
"object_list": [{"owner": "ADB_USER", "name": "GENRE"},
{"owner": "ADB_USER", "name": "CUSTOMER"},
{"owner": "ADB_USER", "name": "WATCH_HISTORY"},
{"owner": "ADB_USER", "name": "STREAMS"},
{"owner": "ADB_USER", "name": "MOVIES"},
{"owner": "ADB_USER", "name": "ACTORS"}]
}');
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'SQL',
attributes => '{"tool_type": "SQL",
"tool_params": {"profile_name": "nl2sql_profile"}}'
);
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.drop_task('ANALYZE_MOVIE_TASK');
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'ANALYZE_MOVIE_TASK',
attributes =>'{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
'You can use SQL tool to search the data from database",
"tools": ["SQL"],
"enable_human_tool" : "true"
}'
);
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');
PL/SQL procedure successfully completed.
-- SQL tool retrieves the movie with the highest popularity view count from the watch_history table
select ai agent what is the most popular movie?;
RESPONSE
----------------------------------------------------------------
The most popular movie is "Laugh Out Loud" released in 2008.
-- RAG TOOL
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'RAG_PROFILE',
attributes =>'{"provider": "oci",
"credential_name": "GENAI_CRED",
"vector_index_name": "RAG_INDEX",
"oci_compartment_id": "ocid1.compartment.oc1..aaaaa...",
"temperature": 0.2,
"max_tokens": 3000
}');
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
index_name => 'RAG_INDEX',
attributes => '{"vector_db_provider": "oracle",
"location": "https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder",
"object_storage_credential_name": "MY_OCI_CRED",
"profile_name": "RAG_PROFILE",
"vector_dimension": 1024,
"vector_distance_metric": "cosine",
"chunk_overlap":128,
"chunk_size":1024
}');
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'RAG_TOOL',
attributes => '{"tool_type": "RAG",
"tool_params": {"profile_name": "RAG_PROFILE"}}'
);
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name =>'ANALYZE_MOVIE_TASK',
attributes => '{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
'You can use RAG tool to search the information from the knowledge base user give.",
"tools": ["RAG_TOOL"],
"enable_human_tool" : "true"
}'
);
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');
PL/SQL procedure successfully completed.
-- Rag seach the object store to find review or comments of Movie Laugh out Loud
select ai agent Please find the comments of Movie Laugh out Loud;
RESPONSE
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The comments for the movie "Laugh Out Loud" (2008) are as follows:
1. A lighthearted comedy that delivers plenty of laughs, though the plot is fairly predictable.
2. The performances are fun, especially from the lead actor who keeps the energy high.
3. Some jokes feel a bit outdated, but overall it is an enjoyable watch for a casual movie night.
4. Good chemistry between the cast members, which makes the humor more natural.
5. Not a groundbreaking comedy, but it does what it promises makes you laugh out loud.
-- WEBSEARCH TOOL
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
username => 'OPENAI',
password => '<API_KEY>'
);
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'WEBSEARCH_TOOL',
attributes => '{"instruction": "This tool can be used for searching the details about topics mentioned in notes and prepare a summary about prices, details on web",
"tool_type": "WEBSEARCH",
"tool_params": {"credential_name": "OPENAI_CRED"}}'
);
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'ANALYZE_MOVIE_TASK',
attributes => '{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
'You can use WEBSEARCH_TOOL tool to search the information from internet.",
"tools": ["WEBSEARCH_TOOL"],
"enable_human_tool" : "true"
}'
);
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');
PL/SQL procedure successfully completed.
select ai agent What is the most popular movie of 2023?;
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Determining the most popular movie of 2023 can depend on various metrics such as box office earnings, streaming viewership, critical acclaim, or audience reception. Based on global box office data, which is often a strong indicator of popularity, the most successful movie of 2023 is "Barbie," directed by Greta Gerwig. Released in July 2023, it grossed over $1.4 billion worldwide, making it the highest-grossing film of the year and one of the biggest cultural phenomena, often discussed alongside "Oppenheimer" due to the "Barbenheimer" trend. Its widespread appeal, marketing, and social media buzz further solidify its status as the most popular movie of 2023. However, if you are looking for popularity based on a different metric (like streaming numbers or awards), please let me know, and I can adjust the analysis accordingly.
-- NOTIFICATION TOOL WITH EMAIL TYPE
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'EMAIL',
attributes => q'[{"tool_type": "Notification",
"tool_params": {"notification_type" : "EMAIL",
"credential_name": "EMAIL_CRED",
"recipient": "example@oracle.com",
"smtp_host": "smtp.email.us-ashburn-1.oci.oraclecloud.com",
"sender": "example@oracle.com"}}]'
);
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'ANALYZE_MOVIE_TASK',
attributes =>'{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
'You can use EMAIL TOOL tool to send email to the user.",
"tools": ["EMAIL"],
"enable_human_tool" : "true"
}'
);
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');
PL/SQL procedure successfully completed.
select ai agent Please help me write a review of Movie "Barbie" and send the review to my email;
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
I have written a review for the movie "Barbie" (2023) and sent it to your email. Please check your inbox for the detailed review. If you have any additional feedback or would like me to revise the review, let me know!
-- NOTIFICATION TOOL WITH SLACK TYPE
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'SLACK_TOOL',
attributes => '{"tool_type": "SLACK",
"tool_params": {"credential_name": "SLACK_CRED",
"channel": "<channel_number>"}}'
);
END;
/
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'ANALYZE_MOVIE_TASK',
attributes => '{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
'You can use SLACK TOOL to send the notification to the user.",
"tools": ["SLACK_TOOL"],
"enable_human_tool" : "true"
}'
);
END;
/
PL/SQL procedure successfully completed.
select ai agent Please help me find the top 3 most-watched movies of 2023 and send them to me on slack;
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------
I have sent the list of the top 3 most-watched movies of 2023 to you via Slack. Please check your Slack notifications for the details.
예: 제품 반품 에이전트 생성
이 예에서는 Select AI Agent를 사용하여 다중 반환 대화형 에이전트를 생성하는 방법을 보여줍니다. 이 예제에서는 제품 반환을 처리하는 고객 서비스 에이전트를 설정하고 데이터베이스의 반환 상태를 갱신합니다.
이 예에서는 Customer_Return_Agent라는 에이전트와 Update_Order_Status_Tool라는 도구를 만든 다음 제품 반환을 처리할 작업과 팀을 정의합니다.
이 예제에서 DBA가 DBMS_CLOUD_AI_AGENT 및 DBMS_CLOUD_AI에 대해 EXECUTE 권한을 부여한 후에는 먼저 고객의 샘플 데이터, 고객 주문 상태 및 고객 주문 상태를 갱신하는 함수를 생성합니다. 그런 다음 Customer_Return_Agent이라는 에이전트를 생성합니다.
에이전트 생성
반환 요청을 관리할 프로파일(OCI_GENAI_GROK) 및 롤을 사용하여 Customer_Return_Agent이라는 에이전트를 생성합니다.
도구 생성
그런 다음 Update_Order_Status_Tool라는 에이전트 툴을 생성하여 데이터베이스의 주문 상태를 갱신합니다.
작업 생성
플로우를 안내하는 Handle_Product_Return_Task이라는 작업을 생성합니다. 이유를 묻습니다(더 이상 필요하지 않음, 너무 늦게 도착함, 상자 파손 또는 결함 발생). 결함이 있는 반품 플로우를 계속 진행합니다.
팀 작성
Customer_Return_Agent를 에이전트로 사용하여 Return_Agency_Team이라는 에이전트 팀을 생성하고 활성 팀으로 설정합니다.
Select AI 에이전트 팀 실행
이제 프롬프트의 접두어로 select ai agent를 사용하여 에이전트 팀을 실행합니다.
전체 예는 다음과 같습니다.
--Grants EXECUTE privilege to ADB_USER
--
GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
agent_name => 'Customer_Return_Agent',
attributes => '{"profile_name": "OCI_GENAI_GROK",
"role": "You are an experienced customer return agent who deals with customers return requests."}');
END;
/
PL/SQL procedure successfully completed.
--Sample customer data
CREATE TABLE CUSTOMERS (
customer_id NUMBER(10) PRIMARY KEY,
name VARCHAR2(100),
email VARCHAR2(100),
phone VARCHAR2(20),
state VARCHAR2(2),
zip VARCHAR2(10)
);
INSERT INTO CUSTOMERS (customer_id, name, email, phone, state, zip) VALUES
(1, 'Alice Thompson', 'alice.thompson@example.com', '555-1234', 'NY', '10001'),
(2, 'Bob Martinez', 'bob.martinez@example.com', '555-2345', 'CA', '94105'),
(3, 'Carol Chen', 'carol.chen@example.com', '555-3456', 'TX', '73301'),
(4, 'David Johnson', 'david.johnson@example.com', '555-4567', 'IL', '60601'),
(5, 'Eva Green', 'eva.green@example.com', '555-5678', 'FL', '33101');
--create customer order status
CREATE TABLE CUSTOMER_ORDER_STATUS (
customer_id NUMBER(10),
order_number VARCHAR2(20),
status VARCHAR2(30),
product_name VARCHAR2(100)
);
INSERT INTO CUSTOMER_ORDER_STATUS (customer_id, order_number, status, product_name) VALUES
(2, '7734', 'delivered', 'smartphone charging cord'),
(1, '4381', 'pending_delivery', 'smartphone protective case'),
(2, '7820', 'delivered', 'smartphone charging cord'),
(3, '1293', 'pending_return', 'smartphone stand (metal)'),
(4, '9842', 'returned', 'smartphone backup storage'),
(5, '5019', 'delivered', 'smartphone protective case'),
(2, '6674', 'pending_delivery', 'smartphone charging cord'),
(1, '3087', 'returned', 'smartphone stand (metal)'),
(3, '7635', 'pending_return', 'smartphone backup storage'),
(4, '3928', 'delivered', 'smartphone protective case'),
(5, '8421', 'pending_delivery', 'smartphone charging cord'),
(1, '2204', 'returned', 'smartphone stand (metal)'),
(2, '7031', 'pending_delivery', 'smartphone backup storage'),
(3, '1649', 'delivered', 'smartphone protective case'),
(4, '9732', 'pending_return', 'smartphone charging cord'),
(5, '4550', 'delivered', 'smartphone stand (metal)'),
(1, '6468', 'pending_delivery', 'smartphone backup storage'),
(2, '3910', 'returned', 'smartphone protective case'),
(3, '2187', 'delivered', 'smartphone charging cord'),
(4, '8023', 'pending_return', 'smartphone stand (metal)'),
(5, '5176', 'delivered', 'smartphone backup storage');
--Create a update customer order status function
CREATE OR REPLACE FUNCTION UPDATE_CUSTOMER_ORDER_STATUS (
p_customer_name IN VARCHAR2,
p_order_number IN VARCHAR2,
p_status IN VARCHAR2
) RETURN CLOB IS
v_customer_id customers.customer_id%TYPE;
v_row_count NUMBER;
BEGIN
-- Find customer_id from customer_name
SELECT customer_id
INTO v_customer_id
FROM customers
WHERE name = p_customer_name;
UPDATE customer_order_status
SET status = p_status
WHERE customer_id = v_customer_id
AND order_number = p_order_number;
v_row_count := SQL%ROWCOUNT;
IF v_row_count = 0 THEN
RETURN 'No matching record found to update.';
ELSE
RETURN 'Update successful.';
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN 'Error: ' || SQLERRM;
END;
--Create Tool
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'Update_Order_Status_Tool',
attributes => '{"instruction": "This tool updates the database to reflect return status change. Always confirm user name and order number with user before update status",
"function" : "update_customer_order_status"}',
description => 'Tool for updating customer order status in database table.'
);
END;
/
--Create Task
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'Handle_Product_Return_Task',
attributes => '{"instruction": "Process a product return request from a customer:{query}' ||
'1. Ask customer the order reason for return (no longer needed, arrived too late, box broken, or defective)' ||
'2. If no longer needed:' ||
' a. Inform customer to ship the product at their expense back to us.' ||
' b. Update the order status to return_shipment_pending using Update_Order_Status_Tool.' ||
'3. If it arrived too late:' ||
' a. Ask customer if they want a refund.' ||
' b. If the customer wants a refund, then confirm refund processed and update the order status to refund_completed' ||
'4. If the product was defective or the box broken:' ||
' a. Ask customer if they want a replacement or a refund' ||
' b. If a replacement, inform customer replacement is on its way and they will receive a return shipping label for the defective product, then update the order status to replaced' ||
' c. If a refund, inform customer to print out the return shipping label for the defective product, return the product, and update the order status to refund' ||
'5. After the completion of a return or refund, ask if you can help with anything else.' ||
' End the task if user does not need help on anything else",
"tools": ["Update_Order_Status_Tool"]}'
);
END;
/
SQL> BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TEAM(
team_name => 'Return_Agency_Team',
attributes => '{"agents": [{"name":"Customer_Return_Agent","task" : "Handle_Product_Return_Task"}],
"process": "sequential"}');
END;
/
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('Return_Agency_Team');
PL/SQL procedure successfully completed.
--Validate that the agent team is set in the current session with get_team
SQL> SELECT DBMS_CLOUD_AI_AGENT.GET_TEAM from DUAL;
--Interact with the agent
SQL> select ai agent I want to return a smartphone case;
RESPONSE
Could you please tell me the reason for returning the smartphone case? Is it no longer needed, arrived too late, box broken, or defective?
SQL> select ai agent the item is defective
RESPONSE
I'm sorry to hear that the smartphone case is defective. Would you like a replacement or a refund?
SQL> select ai agent I will need a replacement
RESPONSE
Can you please confirm your name and order number so I can update the status and process the replacement?
SQL> select ai agent I''m Bob Martinez and my order number is 7820
RESPONSE
Is there anything else I can help you with?
SQL> select ai agent No, I''m all set. Thanks
RESPONSE
Thank you for reaching out, Bob. I'm glad I could assist with the return of your smartphone case and stand. If you have any further questions or need assistance in the future, feel free to contact us. Have a great day!Database Actions와 같은 웹 SQL 클라이언트를 사용하는 경우 DBMS_CLOUD_AI_AGENT.RUN_TEAM 함수를 사용하여 에이전트 팀을 실행하고 함수 내에 프롬프트를 제공합니다.
주:
Database Actions 또는 APEX Service에서 DBMS_CLOUD_AI_AGENT.SET_TEAM를 사용하지 마십시오. 대신 DBMS_CLOUD_AI_AGENT.RUN_TEAM의 team_name 인수를 사용하여 에이전트 팀을 지정합니다.
다음 예에서는 고객 대화 내역을 추적하는 대화 ID를 만든 다음 DBMS_CLOUD_AI_AGENT.RUN_TEAM 함수를 사용하여 제품 반환 에이전트와 상호 작용합니다.
CREATE OR REPLACE PACKAGE my_globals IS
l_team_cov_id varchar2(4000);
END my_globals;
/
-- Create conversation
DECLARE
l_team_cov_id varchar2(4000);
BEGIN
l_team_cov_id := DBMS_CLOUD_AI.create_conversation();
my_globals.l_team_cov_id := l_team_cov_id;
DBMS_OUTPUT.PUT_LINE('Created conversation with ID: ' || my_globals.l_team_cov_id);
END;
--Interact with the agent
DECLARE
v_response VARCHAR2(4000);
BEGIN
v_response := DBMS_CLOUD_AI_AGENT.RUN_TEAM(
team_name => 'Return_Agency_Team',
user_prompt => 'I want to return a smartphone case',
params => '{"conversation_id": "' || my_globals.l_team_cov_id || '"}'
);
DBMS_OUTPUT.PUT_LINE(v_response);
END;
예: 로그 보고서 인출 및 분석
이 예에서는 로그를 검색하고 분석하기 위해 두 개의 에이전트-작업 쌍을 사용하여 에이전트 팀을 생성하는 방법을 보여줍니다.
- 문제 해결을 위한 2-에이전트 워크플로우: Data_Engineer 및 Ops_Manager
- 하나의 도구 :
log-fetcher
주:
DBA만 EXECUTE 권한 및 네트워크 ACL 절차를 실행할 수 있습니다.
이 예에서는 DBA가 DBMS_CLOUD_AI_AGENT 패키지, DBMS_CLOUD_AI 패키지 및 AI 제공자에 대한 ACL 액세스에 대해 EXECUTE 권한을 부여한 후 Data_Engineer 및 Ops_Manager 에이전트를 생성합니다.
에이전트 생성
Google을 AI 제공자 및 역할로 사용하여 복잡한 데이터를 검색하고 처리하는 프로파일(GOOGLE)을 사용하여 Data_Engineer이라는 에이전트를 생성합니다.
OpenAI를 AI 제공자 및 역할로 사용하여 데이터를 분석하는 프로파일(OPENAI)이 있는 Ops_Manager라는 에이전트를 생성합니다.
도구 생성
그런 다음 에이전트 툴을 생성합니다.log_fetcher: 지정된 날짜 이후의 로그 항목을 반환합니다. 사용자 정의 절차 fetch_logs를 사용합니다.
작업 생성
fetch_logs_task 및 analyze_log_task의 두 작업을 정의하여 플로우를 안내합니다. fetch_logs_task는 log_fetcher를 호출하여 요청에 따라 로그를 검색합니다. analyze_log_task는 인출된 로그를 분석합니다.
팀 작성
순차적으로 실행되도록 Data_Engineer 및 Ops_Manager를 사용하여 Ops_Issues_Solution_Team 팀을 생성합니다.
Select AI 에이전트 실행
이제 활성 팀을 설정하고 프롬프트의 접두어로 select ai agent를 사용하여 에이전트 팀을 실행합니다.
전체 예는 다음과 같습니다.
--Grants EXECUTE privilege to ADB_USER
--
GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
-- Grant Network ACL for OpenAI endpoint
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;
/
--Grant Network ACL for Google endpoint
BEGIN
DBMS_NETWORK_ACL_ADB_USER.APPEND_HOST_ACE(
host => 'generativelanguage.googleapis.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 a table with Database logs and insert sample data
SQL> CREATE TABLE app_logs (
log_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
log_timestamp DATE,
log_message VARCHAR2(4000)
);
Table created.
SQL> INSERT INTO app_logs (log_timestamp, log_message) VALUES (
TO_DATE('2025-03-22 03:15:45', 'YYYY-MM-DD HH24:MI:SS'),
'INFO: Database Cluster: Failover completed successfully. Standby promoted to primary. Downtime duration: 33 seconds. Correlation ID: dbfailover102.'
);
1 row created.
SQL> INSERT INTO app_logs (log_timestamp, log_message) VALUES (
TO_DATE('2025-03-23 08:44:10', 'YYYY-MM-DD HH24:MI:SS'),
'INFO: Switchover Process: Synchronization restored. Performing scheduled switchover. Correlation ID: dbswitchover215.'
);
1 row created.
SQL> INSERT INTO app_logs (log_timestamp, log_message) VALUES (
TO_DATE('2025-03-24 03:15:12', 'YYYY-MM-DD HH24:MI:SS'),
'ERROR: Database Cluster: Primary database unreachable, initiating failover to standby. Correlation ID: dbfailover102.'
);
1 row created.
SQL> COMMIT;
Commit complete.
-- create data engineer agent
SQL> BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
agent_name => 'Data_Engineer',
attributes => '{"profile_name": "GOOGLE",
"role": "You are a specialized data ingestion engineer with expertise in ' ||
'retrieving and processing data from complex database systems."
}'
);
END;
/
PL/SQL procedure successfully completed.
-- create ops manager agent
SQL> BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
agent_name => 'Ops_Manager',
attributes => '{"profile_name": "OPENAI",
"role": "You are an experienced Ops manager who excels at analyzing ' ||
'complex log data, diagnosing the issues."
}'
);
END;
/
PL/SQL procedure successfully completed.
-- create log_fetcher tool
-- fetch_logs is a customized procedure.
-- Please make sure you have created your own procedure before use it in the tool
--Create a customized fetch_logs procedure
SQL> CREATE OR REPLACE FUNCTION fetch_logs(since_date IN DATE) RETURN CLOB IS
l_logs CLOB;
BEGIN
SELECT JSON_ARRAYAGG(log_message RETURNING CLOB)
INTO l_logs
FROM app_logs
WHERE log_timestamp >= since_date
ORDER BY log_timestamp;
RETURN l_logs;
EXCEPTION
WHEN OTHERS THEN
RETURN 'Error fetching logs: ' || SQLERRM;
END fetch_logs;
/
Function created.
SQL> BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'log_fetcher',
attributes => '{"instruction": "retrieves and returns all log messages with a LOG_TIMESTAMP greater than or equal to the input date.",
"function": "fetch_logs"}'
);
END;
/
PL/SQL procedure successfully completed.
-- create task with log fetcher tool
SQL> BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'fetch_logs_task',
attributes => '{"instruction": "Fetch the log entries from the database based on user request: {query}}.",
"tools": ["log_fetcher"]}'
);
END;
/
PL/SQL procedure successfully completed.
-- create task with predefined rag and slack tool
SQL> BEGIN
DBMS_CLOUD_AI_AGENT.create_task(
task_name => 'analyze_log_task',
attributes => '{"instruction": "Analyze the fetched log entries retrieved based on user request: {query} ' ||
'Generate a detailed report include issue analysis and possible solution.",
"input" : "fetch_logs_task"
}'
);
END;
/
PL/SQL procedure successfully completed.
-- create team and set agent team
SQL> BEGIN
DBMS_CLOUD_AI_AGENT.create_team(
team_name => 'Ops_Issues_Solution_Team',
attributes => '{"agents": [{"name":"Data_Engineer","task" : "fetch_logs_task"},
{"name":"Ops_Manager","task" : "analyze_log_task"}],
"process": "sequential"
}');
END;
/
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('Ops_Issues_Solution_Team');
PL/SQL procedure successfully completed.
SQL> select ai agent fetch and analyze the logs after 03/15 2025;
RESPONSE
-----------------------------------------------------------------------------------------------------------------------------------------------
1. Issue: High volume of 500 Internal Server Errors between 03/22 and 03/24.
Solution: Review server application logs to identify failing components; add better exception handling and fallback mechanisms to prevent service crashes.
2. Issue: Increased response time on /api/v1/user and /checkout, peaking on 03/25.
Solution: Profile backend queries and services, apply caching where applicable, and offload static content to a CDN.
3. Issue: Detected brute-force login attack with over 500 failed POST attempts from a single IP.
Solution: Add rate-limiting, temporary IP bans, and CAPTCHA on the /login endpoint to prevent credential stuffing.
4. Issue: Suspicious User-Agent headers such as curl/7.58.0 or empty headers mimicking mobile devices.
Solution: Block malformed or uncommon User-Agent strings and log them for threat intelligence analysis.
5. Issue: DDoS-like traffic spike from distributed IPs observed on 03/20.
Solution: Enable DDoS protection at the CDN or cloud provider level, and configure autoscaling to absorb burst traffic.예: 사용자 정의된 HTTP 도구 만들기
이 예제는 HTTP GET 요청을 전송하고 응답 텍스트를 반환하는 PL/SQL 함수를 정의합니다. 그러면 Select AI Agent 도구에 함수가 추가됩니다.
DBMS_CLOUD.SEND_REQUEST 프로시저를 사용하여 REST 요청을 전송하고 응답을 텍스트로 반환하는 사용자정의 툴을 생성할 수 있습니다. 이 예제에서는 PL/SQL 함수를 작성하여 에이전트 작업에 사용할 도구로 추가하는 방법을 보여줍니다.
get_url_content 함수는 GET 요청을 대상 URL로 전송하고 응답을 CLOB로 반환합니다. DBMS_CLOUD_AI_AGENT.CREATE_TOOL는 get_url_content 함수를 사용하고 태스크가 URL에서 콘텐츠를 인출해야 할 때 Select AI 에이전트가 호출할 수 있는 HTTP_TOOL이라는 툴을 생성합니다.
CREATE OR REPLACE FUNCTION get_url_content (
url IN CLOB
) RETURN CLOB
AS
l_resp DBMS_CLOUD_TYPES.RESP;
l_result CLOB;
BEGIN
l_resp := DBMS_CLOUD.SEND_REQUEST(
credential_name => NULL,
method => 'GET',
uri => url
);
l_result := DBMS_VECTOR_CHAIN.UTL_TO_TEXT(DBMS_CLOUD.GET_RESPONSE_RAW(l_resp);
RETURN l_result;
END get_url_content;
/
BEGIN
DBMS_CLOUD_AI_AGENT.create_tool(
tool_name => 'HTTP_TOOL',
attributes => '{
"instruction": "This tool fetches and returns the plain text content from the specified URL. ",
"function": "get_url_content"
}'
);
END;
/예: 최신 팀 실행의 에이전트 프롬프트 및 응답 보기
이 예에서는 내역 보기 및 대화 데이터를 사용하여 최근 에이전트 팀에서 실행한 프롬프트, 응답 및 에이전트 생각을 표시하여 최근 AI 에이전트 선택 작업을 디버그하는 데 도움이 됩니다.
이 예에서는 최근 AI 에이전트 선택 팀 실행에서 자세한 로그를 검색하고 표시합니다. 예제에서는 USER_AI_AGENT_TEAM_HISTORY, USER_AI_AGENT_TASK_HISTORY 및 USER_CLOUD_AI_CONVERSATION_PROMPTS 뷰를 사용하여 각 에이전트의 팀 이름, 작업, 연관된 프롬프트 및 응답을 표시합니다. 이 질의를 사용하여 최신 팀 실행의 입력 프롬프트와 생성된 응답을 모두 검토하여 문제를 해결합니다.
WITH latest_team AS (
SELECT team_exec_id, team_name, start_date
FROM user_ai_agent_team_history
ORDER BY start_date DESC
FETCH FIRST 1 ROW ONLY
),
latest_task AS (
SELECT team_exec_id, task_name, agent_name, conversation_params, start_date,
ROW_NUMBER() OVER (PARTITION BY team_exec_id, task_name, agent_name
ORDER BY start_date DESC) as rn
FROM user_ai_agent_task_history
)
SELECT
team.team_name,
task.task_name,
task.agent_name,
p.prompt,
p.prompt_response
FROM latest_team team
JOIN latest_task task
ON team.team_exec_id = task.team_exec_id
AND task.rn = 1
LEFT JOIN user_cloud_ai_conversation_prompts p
ON p.conversation_id = JSON_VALUE(task.conversation_params, '$.conversation_id')
ORDER BY task.start_date DESC NULLS LAST,
p.created DESC NULLS LAST;USER_AI_AGENT_TOOL_HISTORY, USER_AI_AGENT_TASK_HISTORY 및 USER_AI_AGENT_TASK_HISTORY 뷰를 사용합니다.--View the tool history
select * from USER_AI_AGENT_TOOL_HISTORY
order by START_DATE desc
--View the task history
select * from USER_AI_AGENT_TASK_HISTORY
order by START_DATE desc
--View the team history
select * from USER_AI_AGENT_TEAM_HISTORY
order by START_DATE desc예: WAITING_FOR_HUMAN 상태에서 에이전트 팀 실행 재개
이 예에서는 작업 내역 상태가 WAITING_FOR_HUMAN일 때 에이전트 팀 실행을 재개하는 방법을 보여줍니다. 에이전트 팀이 WAITING_FOR_HUMAN 상태로 전환하면 사용자가 다음 입력 또는 확인을 제공할 때까지 일시 중지됩니다. 에이전트 팀을 사용하는 방법에 따라 SQL 명령행 또는 DBMS_CLOUD_AI_AGENT.RUN_TEAM를 통해 실행을 재개할 수 있습니다.
SQL 명령행에서 SELECT AI AGENT <prompt>를 사용하는 경우 AI 에이전트 선택은 일시 중지된 팀 실행을 자동으로 재개합니다. 이전 프롬프트 및 추론을 포함한 대화 컨텍스트는 추가 매개변수 없이 유지 관리됩니다.
DBMS_CLOUD_AI_AGENT.RUN_TEAM 프로시저를 사용하는 경우 초기 실행에 사용된 것과 동일한 conversation_id를 전달하여 일시 정지된 에이전트 팀을 재개할 수 있습니다. 보류 중인 작업 및 컨텍스트를 포함한 에이전트 팀 실행 상태는 보존되며 에이전트 팀은 중지된 위치에서 정확하게 계속됩니다.
DBMS_CLOUD_AI_AGENT.RUN_TEAM 함수를 사용하는 예는 를 참조하십시오.
--Interact with the agent
DECLARE
v_response VARCHAR2(4000);
BEGIN
v_response := DBMS_CLOUD_AI_AGENT.RUN_TEAM(
team_name => '<same initial team name>',
user_prompt => 'response to request',
params => '{"conversation_id": "<same initial conversation_id>"}'
);
DBMS_OUTPUT.PUT_LINE(v_response);
END;For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
오라클 고객지원센터 액세스
오라클 고객의 오라클 지원 서비스 접근 및 이용은 해당 서비스의 오라클 주문서에 명시된 조항들에 따릅니다.