자연어로 SQL 쿼리 수행
자연어 프롬프트와 데이터베이스 스키마를 모델에 전송하고, SQL 쿼리를 다시 보내 데이터베이스에서 결과를 얻어 응답에 사용합니다.
다음도 참조하십시오.
옵션
-
계정 이름은 이 스크립트 단계에서 사용할 AI 계정의 텍스트 표현식입니다. 현재 파일에서 AI 계정 구성 스크립트 단계를 사용하여 계정을 설정하고 이 스크립트 단계가 실행되기 전에 언제든지 이 이름을 할당하십시오.
-
모델은 사용할 텍스트 생성 모델의 이름입니다. 모델 이름을 텍스트 표현식으로 지정합니다. 지원되는 모델은 FileMaker 기술 사양을 참조하십시오.
-
프롬프트는 모델에 보낼 자연어 요청 또는 질문에 대한 텍스트 표현식입니다.
-
지정된 옵션은 이 스크립트 단계에 대한 다른 옵션의 구성 방법을 결정합니다.
-
목록에서: 아래 설정을 사용하여 옵션을 개별적으로 구성합니다.
-
JSON 데이터별: JSON 객체를 제공하여 다음 옵션을 구성합니다. 이 옵션은 값을 동적으로 설정하는 데 유용합니다. JSON 객체는 스크립트 단계 옵션 및 해당 값의 키-값 쌍을 포함해야 합니다. 지원되는 옵션의 키는 다음과 같습니다.
-
action
: 원하는 조치에 해당하는 문자열 값:"query"
,"query for data only"
,"get sql"
,"get first sql only"
,"get ddl"
. -
data tables
: JSON 문자열 배열이며, 각 문자열은 스키마가 포함되어야 하는 테이블의 이름입니다. 예:["Contacts", "Addresses"]
. -
stream
: 스트림 옵션의 문자열 값입니다("on" 또는 "off").
예를 들어 다음과 같습니다.
복사{
"action" : "get sql",
"data tables" : [ "Products", "Invoices" ],
"stream" : "off"
} -
-
-
동작은 모델에서 검색할 응답 유형을 지정합니다.
-
쿼리: 사용자의 프롬프트에 대한 모델의 최종 응답을 자연어로 반환합니다.
-
데이터 전용 쿼리: 이 스크립트 단계에서 실행된 모델의 마지막 SQL 쿼리에 의해 검색된 데이터만 반환합니다.
-
SQL 가져오기: 전체 상호 작용 동안 모델에 의해 생성된 모든 SQL 문을 반환합니다.
-
첫 번째 SQL만 가져오기: 모델에 의해 생성된 첫 번째 SQL 문만 반환합니다.
-
DDL 가져오기: 이 스크립트 단계가 생성하여 모델로 보내는 데이터베이스 스키마(데이터 정의 언어)를 반환합니다.
-
-
데이터 테이블는 테이블에 대한 데이터베이스 스키마를 모델에 지정하는 방법을 나타냅니다. 지정된 테이블에 대한 스키마만 전송됩니다.
-
목록에서: 목록에서 특정 테이블을 선택합니다.
-
이름별: 테이블 이름 목록을 텍스트 표현식으로 제공합니다. 캐리지 리턴으로 여러 테이블 이름을 구분합니다.
-
DDL별: 사용자 설정 DDL 텍스트 표현식을 제공합니다. 이를 통해 어떤 스키마 정보가 모델로 전송되는지 정확하게 제어할 수 있습니다.
-
-
데이터 테이블이 목록에서인 경우 테이블은 테이블을 선택하는 위치입니다.
-
스트림은 동작이 쿼리일 때 응답이 전달되는 방식을 결정합니다.
-
켬: 응답이 검색되고 점진적으로 전달됩니다(단어별 또는 청크 단위). 이를 통해 FileMaker 클라이언트가 더 반응성을 느낄 수 있습니다.
-
끔: 전체 응답을 사용할 수 있게 되기 전에 검색됩니다. 이로 인해 완전한 응답을 기다리는 동안 FileMaker 클라이언트가 응답하지 않는 것처럼 보일 수 있습니다.
-
-
매개 변수는 모델 제공자가 지원하는 추가 매개 변수에 대한 키-값 쌍으로 구성된 JSON 객체의 텍스트 표현식입니다. 예를 들어 다음과 같습니다.
{"온도": 0.7, "seed": 42}
. 지원되는 매개 변수의 키 이름과 유효한 범위는 모델 공급자의 문서를 참조하십시오. -
프롬프트 템플릿 이름은 프롬프트 템플릿 구성 스크립트 단계를 사용하여 구성된 사용자 설정 프롬프트 템플릿의 이름을 지정합니다. 이 옵션을 사용하여 AI 모델에서 최적의 응답을 달성하는 데 도움이 되는 추가 프롬프트를 설계합니다.
-
응답 대상은 스크립트 단계의 결과를 저장할 필드 또는 변수를 지정합니다.
-
웹 뷰어에서 JavaScript 수행은 스크립트 단계가 완료된 후 대상 웹 뷰어에서 수행할 JavaScript 코드를 지정합니다. 이 옵션은 다음 스크립트 단계로 웹 뷰어에서 JavaScript 실행 스크립트 단계를 실행하는 것과 유사하며, 여기에서 응답 대상을 JavaScript 함수로 전달하고 스트림 옵션이 켬일 때 응답 대상을 웹 뷰어로 스트리밍할 수 있다는 점은 제외됩니다.
-
웹 뷰어는 현재 레이아웃에서 웹 뷰어의 객체 이름을 지정합니다.
-
함수 이름은 웹 뷰어에서 호출할 자바스크립트 함수의 이름입니다.
-
호환성
제품 | 지원 |
FileMaker Pro | 예 |
FileMaker Go | 예 |
FileMaker WebDirect | 예 |
FileMaker Server | 부분 |
FileMaker Cloud | 부분 |
FileMaker Data API | 부분 |
사용자 설정 웹 발행 | 부분 |
다음 버전에서 시작됨
22.0
설명
이 스크립트 단계를 사용하면 SQL 문을 직접 작성하는 대신 자연어를 사용하여 데이터베이스를 쿼리할 수 있습니다. AI 모델을 사용하여 자연어 프롬프트를 해석하고, 데이터베이스 스키마를 분석하고, 적절한 SQL 쿼리를 생성한 다음, 이 스크립트 단계가 SQL 쿼리를 실행한 후, 모델은 자연어로 결과를 가지고 응답할 수 있습니다. FileMaker 데이터를 모델로 보낼 필요가 없습니다.
이 스크립트 단계와 모델 간의 상호 작용은 일반적으로 다음 단계를 따릅니다.
-
이 스크립트 단계는 프롬프트 및 관련 데이터베이스 스키마(데이터 테이블에 의해 지정된 DDL)를 구성된 AI 모델로 보냅니다. (여기에는 선택적 프롬프트 템플릿에 제공된 프롬프트가 포함됩니다.)
-
모델은 프롬프트와 스키마를 분석하고 데이터베이스에서 요청된 정보를 검색하도록 설계된 하나 이상의 SQL 쿼리를 생성합니다.
-
이 스크립트 단계는 모델에서 생성된 SQL 쿼리를 수신하여 실행합니다.
-
이 스크립트 단계는 SQL 쿼리 실행 결과를 모델로 다시 보냅니다.
-
모델이 프롬프트를 완전히 다루기 위해 결과를 추가 처리 또는 개선해야 한다고 판단하는 경우 추가 SQL 쿼리를 생성할 수 있습니다(2~4단계 반복). 이를 통해 복잡한 쿼리 또는 다단계 데이터 검색이 가능합니다.
-
모델이 충분한 정보를 확보한 후, 받은 프롬프트 및 SQL 쿼리 결과를 기반으로 최종 응답을 생성합니다.
-
이 스크립트 단계는 최종 응답을 수신하여 응답 대상에 저장합니다.
동작 옵션은 이 프로세스의 다른 단계에서 응답 대상에 반환되는 내용을 결정합니다.
동작 | 방법 |
---|---|
쿼리 |
반복되는 SQL 생성 및 실행 라운드를 포함하여 전체 워크플로우(1~7단계)를 완료합니다. 응답 대상은 대화형 응답에 통합된 SQL 쿼리의 데이터를 포함할 수 있는 모델의 최종 자연어 응답을 수신합니다. |
데이터 전용 쿼리 |
1~6단계를 수행하지만 7단계 전에 중지합니다. 응답 대상은 마지막 쿼리에서 반환된 데이터만 받습니다. |
디버깅: | |
SQL 가져오기 |
1~6단계를 수행하지만 7단계 전에 중지합니다. 응답 대상은 상호 작용 전반에 걸쳐 모델에 의해 생성된 모든 SQL 문의 텍스트를 수신합니다. |
첫 번째 SQL만 가져오기 |
1~2단계만 수행하고 중지합니다. 응답 대상은 모델에 의해 생성된 첫 번째 SQL 문 텍스트만 수신합니다. 이 옵션은 디버깅하는 동안 토큰 사용을 줄이는 데 도움이 됩니다. |
DDL 가져오기 |
1단계만 수행합니다(데이터 테이블 옵션을 기반으로 DDL 생성). 모델과 상호 작용하지 않습니다. 응답 대상은 생성된 DDL의 텍스트를 수신합니다. |
디버깅 동작은 스크립트를 테스트하는 동안 스크립트 단계가 모델 및 데이터베이스 스키마와 어떻게 상호 작용하는지 이해하는 데 주로 유용합니다.
참고
-
프롬프트 템플릿 이름을 지정하는 경우 이 스크립트 단계는 프롬프트 템플릿 구성 스크립트 단계를 통해 구성된 템플릿을 사용합니다. 이러한 템플릿은 실행 중에 동적으로 대체되는
:schema:
,:question:
,:sql_query:
,:sql_results:
와 같은 상수를 사용할 수 있습니다. 사용 가능한 상수는 템플릿 유형과 현재 동작에 따라 다릅니다. -
데이터베이스 관리 대화 상자에 입력한 필드 주석은 모델로 전송된 데이터베이스 스키마와 함께 포함됩니다. 유용한 SQL 문을 생성하는 모델의 기능을 향상시키기 위해 주석을 사용하여 필드의 목적을 설명할 수 있습니다(예를 들어, 필드가 관련 테이블에서 레코드를 식별하는 외래 키인 경우). DDL 및 SQL 쿼리 생성의 데이터베이스 스키마에 대한 우수 사례를 참조하십시오.
-
이 스크립트 단계는 모델에서 최종 자연어 응답이 수신될 때까지 SQL 생성 및 실행의 어느 라운드가 마지막인지 결정할 수 없습니다.
-
쿼리 또는 데이터 전용 쿼리 동작을 실행하는 동안 이 스크립트 단계는 모델에 의해 생성된 모든 SQL 문과 마지막으로 실행된 SQL 쿼리의 결과를 수신하고 저장합니다. 이는 각각 SQL 가져오기 및 데이터 전용 쿼리 동작에서 반환된 것과 동일한 결과입니다.
-
이 스크립트 단계가 오류 없이 실행되지만 관련 정보가 발견되지 않으면 응답 대상에 메시지가 반환되고 Get(마지막 오류) 함수는 오류 0("No error")을 반환합니다.
-
FileMaker Server, FileMaker Cloud, FileMaker Data API, OData API, Custom Web Publishing에서 실행되는 스크립트에서는 웹 뷰어에서 JavaScript 수행 옵션이 지원되지 않습니다.
예제 1
AI 계정을 구성한 다음 자연어로 SQL 쿼리 수행 스크립트 단계를 사용하여 이름 및 회사 필드에 데이터가 있는 연락처 테이블의 데이터에 대해 질문합니다. 스크립트 단계에서 연락처 테이블에 대한 스키마와 "Which company does Alea work for?"라는 메시지가 모델에 표시됩니다. 모델은 필수 SQL 쿼리를 생성하고 이 스크립트 단계에서 실행한 다음 모델이 응답 필드에 저장된 자연어 응답을 제공합니다.
AI 계정 구성 [ 계정 이름: "my-account" ; 모델 제공자: OpenAI ; API 키: "sk-..." ]
자연어로 SQL 쿼리 수행 [ 계정 이름: "my-account" ; 모델: "gpt-4o" ; 프롬프트: "Which company does Alea work for?" ; 지정된 옵션: 목록에서 ; 동작: 쿼리 ; 데이터 테이블: 목록에서 ; 테이블... ; 스트림 ; 응답 대상: Contacts::Response ]
Contacts::Response 필드에 저장된 가능한 응답:
Alea works for Acme Anvils, Inc.
예제 2
사용자에게 사용자 설정 대화 상자에서 질문을 요청합니다. 기본 버튼은 "쿼리", 버튼 2는 "데이터 전용", 버튼 3은 "취소"이며 질문은 $$UserPrompt 변수에 저장됩니다. 그런 다음 동작
수행에 대한 사용자의 선택을 반영하도록 $options 변수를 설정합니다: query
또는 query for data only
. 사용자가 질문을 입력하고 취소를 클릭하지 않은 경우, 자연어로 SQL 쿼리 수행 스크립트 단계를 실행하고 $$UserPrompt 및 $options를 전달한 다음, 다른 사용자 설정 대화 상자에 표시되는 $$QueryResultData에 모델의 결과를 반환합니다. 쿼리는 연락처 및 직원 테이블로 제한됩니다.
AI 계정 구성 [ 계정 이름: "my-account" ; 모델 제공자: OpenAI ; API 키: "sk-..." ]
사용자 설정 대화상자 보기 [ "Ask the database:" ; $$UserPrompt ]
변수 설정 [ $options ; Value:
Let ( [
$choice = Get ( LastMessageChoice ) ;
action_choice = Case (
$choice = 1 ; "query" ;
$choice = 2 ; "query for data only"
)
] ;
JSONSetElement (
"";
[ "action" ; action_choice ; JSONString ] ;
[ "data tables" ; JSONMakeArray (
"Contacts¶Employees" ;
"¶" ;
JSONString
) ;
JSONArray ] ;
[ "stream" ; "off" ; JSONString ]
)
)
]
If [ not IsEmpty ( $$UserPrompt ) and $choice ≠ 3 ]
자연어로 SQL 쿼리 수행 [ 계정 이름: "my-account" ; 모델: "gpt-4o" ; 프롬프트: $$UserPrompt ; 지정된 옵션: JSON 데이터별 ; 응답 대상: $$QueryResultData ]
사용자 설정 대화상자 보기 [ "Data Result:" ; $$QueryResultData ]
End If
프롬프트가 "Which company does Alea work for?"라고 가정한, $$QueryResultData에 저장된 가능한 응답이며 사용자가 데이터 전용 버튼을 클릭했습니다.
Acme Anvils, Inc.
예제 3
디버깅을 위해 SQL 가져오기 및 DDL 가져오기 동작을 사용하는 것을 보여줍니다. 스크립트는 먼저 제품 및 주문 테이블에 대해 생성된 DDL을 검색한 다음 특정 프롬프트에 대해 모델에 의해 생성된 모든 SQL 문을 검색하여 검토를 위해 각각을 별도의 변수에 저장합니다.
자연어로 SQL 쿼리 수행 [ 계정 이름: "my-account" ; 모델: "gpt-4o" ; 프롬프트: " " ; 지정된 옵션: 목록에서 ; 동작: DDL 가져오기 ; 데이터 테이블: 이름별 ; "Products¶Orders" ; 응답 대상: $$ProductsOrdersDDL ]
자연어로 SQL 쿼리 수행 [ 계정 이름: "my-account" ; 모델: "gpt-4o" ; 프롬프트: "Find the total value of orders for Product ID 101" ; 지정된 옵션: 목록에서 ; 동작: SQL 가져오기 ; 데이터 테이블: 이름별 ; "Products¶Orders" ; 응답 대상: $$GeneratedSQL ]
사용자 설정 대화상자 보기 [ "Debugging Information" ; "Generated DDL:" & ¶ & $$ProductsOrdersDDL & ¶ & ¶ & "Generated SQL:" & ¶ & $$GeneratedSQL ]
$$ProductsOrdersDDL에 저장된 가능한 DDL:
CREATE TABLE "Products" (
"ProductID" int, /*제품을 고유하게 식별하는 기본 키*/
"ProductName" varchar(255), /*제품의 자세한 이름*/
"Price" int, /*제품의 가격(USD)*/
PRIMARY KEY (ProductID)
);
CREATE TABLE "Orders" (
"OrderID" int, /*주문을 고유하게 식별하는 기본 키*/
"ProductID" int, /*제품 테이블과의 다대일 관계에 대한 외부 키*/
"Quantity" int, /*주문에 있는 제품 수량*/
PRIMARY KEY(OrderID),
FOREIGN KEY(ProductID) REFERENCES Products(ProductID)
);
$$GeneratedSQL에 저장된 가능한 SQL 문:
SELECT SUM("Quantity" * "Price") AS "TotalValue" FROM "Orders" JOIN "Products" ON "Orders"."ProductID" = "Products"."ProductID" WHERE "Orders"."ProductID" = 101