"반드시 해야 한다는 뜻은 아닙니다"라는 인용문은 AI 기능을 고려할 때 유용한 가이드입니다. 예를 들어 Azure OpenAI의 자연어-SQL 기능을 사용하면 사용자가 일반 영어로 데이터베이스 쿼리를 만들 수 있으므로 생산성을 향상시키는 강력한 도구가 될 수 있습니다. 그러나 강력한 것이 항상 적절 하거나 안전하다는 의미는 아닙니다. 이 연습에서는 구현을 결정하기 전에 유의해야 할 중요한 고려 사항에 대해서도 논의하면서 이 AI 기능을 사용하는 방법을 보여 줍니다.
다음은 데이터베이스에서 데이터를 검색하는 데 사용할 수 있는 자연어 쿼리의 예입니다.
Get the the total revenue for all companies in London.
적절한 프롬프트를 사용하면 Azure OpenAI는 이 쿼리를 데이터베이스에서 결과를 반환하는 데 사용할 수 있는 SQL로 변환합니다. 따라서 비즈니스 분석가, 마케터 및 임원을 비롯한 비기술 사용자는 복잡한 SQL 구문을 사용하거나 제한된 데이터 그리드 및 필터를 사용하지 않고도 데이터베이스에서 중요한 정보를 보다 쉽게 검색할 수 있습니다. 이 간소화된 접근 방식은 사용자가 기술 전문가의 도움을 구할 필요가 없도록 하여 생산성을 높일 수 있습니다.
이 연습에서는 SQL에 대한 자연어 작동 방식을 이해하고, 몇 가지 중요한 고려 사항을 소개하고, 장단점에 대해 생각하고, 시작할 코드를 보여 주는 데 도움이 되는 시작 지점을 제공합니다.
이 연습에서 다음을 수행합니다.
- GPT 프롬프트를 사용하여 자연어를 SQL로 변환합니다.
- 다른 GPT 프롬프트를 사용하여 실험합니다.
- 생성된 SQL을 사용하여 이전에 시작된 PostgreSQL 데이터베이스를 쿼리합니다.
- PostgreSQL에서 쿼리 결과를 반환하고 브라우저에 표시합니다.
먼저 자연어를 SQL로 변환하는 데 사용할 수 있는 다양한 GPT 프롬프트를 실험해 보겠습니다.
자연어에서 SQL 기능 사용
이전 연습에서는 데이터베이스, API 및 애플리케이션을 시작했습니다. 또한 파일을 업데이트했습니다
.env
. 이러한 단계를 완료하지 않은 경우 계속하기 전에 연습의 끝에 있는 지침을 따릅니다.브라우저(http://localhost:4200)로 돌아가서 datagrid 아래 페이지의 사용자 지정 쿼리 섹션을 찾습니다. 샘플 쿼리 값이 이미 포함되어 있습니다. 모든 주문에 대한 총 수익을 가져옵니다. 회사별로 그룹화하고 도시를 포함합니다.
쿼리 실행 단추를 선택합니다. 그러면 사용자의 자연어 쿼리가 Azure OpenAI에 전달되어 SQL로 변환됩니다. 그런 다음 SQL 쿼리를 사용하여 데이터베이스를 쿼리하고 잠재적인 결과를 반환합니다.
다음 사용자 지정 쿼리를 실행합니다.
Get the total revenue for Adventure Works Cycles. Include the contact information as well.
Visual Studio Code에서 API 서버를 실행하는 터미널 창을 보고 Azure OpenAI에서 반환된 SQL 쿼리를 표시합니다. JSON 데이터는 서버 쪽 API에서 PostgreSQL 데이터베이스를 쿼리하는 데 사용됩니다. 쿼리에 포함된 모든 문자열 값은 SQL 삽입 공격을 방지하기 위해 매개 변수 값으로 추가됩니다.
{ "sql": "SELECT c.company, c.city, c.email, SUM(o.total) AS revenue FROM customers c INNER JOIN orders o ON c.id = o.customer_id WHERE c.company = $1 GROUP BY c.company, c.city, c.email", "paramValues": ["Adventure Works Cycles"] }
브라우저로 돌아가 서 데이터 다시 설정을 선택하여 Datagrid 에서 모든 고객을 다시 봅니다.
자연어를 SQL 코드로 탐색
팁 (조언)
Visual Studio Code를 사용하는 경우 다음을 선택하여 파일을 직접 열 수 있습니다.
- Windows/Linux: Ctrl+P
- Mac: Cmd + P
그런 다음 열려는 파일의 이름을 입력합니다.
비고
이 연습의 목표는 자연어에서 SQL 기능으로 가능한 기능을 보여주고 사용을 시작하는 방법을 보여 주는 것입니다. 앞에서 설명한 것처럼 구현을 진행하기 전에 이러한 유형의 AI가 조직에 적합한지 논의하는 것이 중요합니다. 또한 무단 액세스를 방지하고 중요한 데이터를 보호하기 위해 적절한 프롬프트 규칙 및 데이터베이스 보안 조치를 계획해야 합니다.
이제 SQL에 대한 자연어 기능이 작동하는 것을 살펴보았으므로 구현 방법을 살펴보겠습니다.
서버/apiRoutes.ts 파일을 열고 경로를 찾습니다
generateSql
. 이 API 경로는 브라우저에서 실행되는 클라이언트 쪽 애플리케이션에서 호출되며 자연어 쿼리에서 SQL을 생성하는 데 사용됩니다. SQL 쿼리가 검색되면 데이터베이스를 쿼리하고 결과를 반환하는 데 사용됩니다.router.post('/generateSql', async (req, res) => { const userPrompt = req.body.prompt; if (!userPrompt) { return res.status(400).json({ error: 'Missing parameter "prompt".' }); } try { // Call Azure OpenAI to convert the user prompt into a SQL query const sqlCommandObject = await getSQLFromNLP(userPrompt); let result: any[] = []; // Execute the SQL query if (sqlCommandObject && !sqlCommandObject.error) { result = await queryDb(sqlCommandObject) as any[]; } else { result = [ { query_error : sqlCommandObject.error } ]; } res.json(result); } catch (e) { console.error(e); res.status(500).json({ error: 'Error generating or running SQL query.' }); } });
경로에서 다음 기능을 확인합니다
generateSql
.- 사용자 쿼리 값을
req.body.prompt
검색하여 명명userPrompt
된 변수에 할당합니다. 이 값은 GPT 프롬프트에서 사용됩니다. - 자연어를 SQL로
getSQLFromNLP()
변환하는 함수를 호출합니다. - 생성된 SQL을 SQL 쿼리를 실행하고 데이터베이스의 결과를 반환하는 함수
queryDb
에 전달합니다.
- 사용자 쿼리 값을
편집기에서 서버/openAI.ts 파일을 열고 함수를 찾습니다
getSQLFromNLP()
. 이 함수는 경로에서generatesql
호출되며 자연어를 SQL로 변환하는 데 사용됩니다.async function getSQLFromNLP(userPrompt: string): Promise<QueryData> { // Get the high-level database schema summary to be used in the prompt. // The db.schema file could be generated by a background process or the // schema could be dynamically retrieved. const dbSchema = await fs.promises.readFile('db.schema', 'utf8'); const systemPrompt = ` Assistant is a natural language to SQL bot that returns a JSON object with the SQL query and the parameter values in it. The SQL will query a PostgreSQL database. PostgreSQL tables with their columns: ${dbSchema} Rules: - Convert any strings to a PostgreSQL parameterized query value to avoid SQL injection attacks. - Return a JSON object with the following structure: { "sql": "", "paramValues": [] } Examples: User: "Display all company reviews. Group by company." Assistant: { "sql": "SELECT * FROM reviews", "paramValues": [] } User: "Display all reviews for companies located in cities that start with 'L'." Assistant: { "sql": "SELECT r.* FROM reviews r INNER JOIN customers c ON r.customer_id = c.id WHERE c.city LIKE 'L%'", "paramValues": [] } User: "Display revenue for companies located in London. Include the company name and city." Assistant: { "sql": "SELECT c.company, c.city, SUM(o.total) AS revenue FROM customers c INNER JOIN orders o ON c.id = o.customer_id WHERE c.city = $1 GROUP BY c.company, c.city", "paramValues": ["London"] } User: "Get the total revenue for Adventure Works Cycles. Include the contact information as well." Assistant: { "sql": "SELECT c.company, c.city, c.email, SUM(o.total) AS revenue FROM customers c INNER JOIN orders o ON c.id = o.customer_id WHERE c.company = $1 GROUP BY c.company, c.city, c.email", "paramValues": ["Adventure Works Cycles"] } `; let queryData: QueryData = { sql: '', paramValues: [], error: '' }; let results = ''; try { results = await callOpenAI(systemPrompt, userPrompt); if (results) { console.log('results', results); const parsedResults = JSON.parse(results); queryData = { ...queryData, ...parsedResults }; if (isProhibitedQuery(queryData.sql)) { queryData.sql = ''; queryData.error = 'Prohibited query.'; } } } catch (error) { console.log(error); if (isProhibitedQuery(results)) { queryData.sql = ''; queryData.error = 'Prohibited query.'; } else { queryData.error = results; } } return queryData; }
-
userPrompt
매개 변수가 함수에 전달됩니다. 값은userPrompt
브라우저에서 사용자가 입력한 자연어 쿼리입니다. - A
systemPrompt
는 사용할 AI 도우미의 유형과 따라야 하는 규칙을 정의합니다. 이를 통해 Azure OpenAI는 데이터베이스 구조, 적용할 규칙 및 생성된 SQL 쿼리 및 매개 변수를 반환하는 방법을 이해할 수 있습니다. - 명명된
callOpenAI()
함수가 호출되고systemPrompt
값이userPrompt
전달됩니다. - 생성된 SQL 쿼리에 금지된 값이 포함되지 않도록 결과를 확인합니다. 금지된 값을 발견하면 SQL 쿼리가 빈 문자열로 설정됩니다.
-
시스템 프롬프트를 자세히 살펴보겠습니다.
const systemPrompt = ` Assistant is a natural language to SQL bot that returns a JSON object with the SQL query and the parameter values in it. The SQL will query a PostgreSQL database. PostgreSQL tables with their columns: ${dbSchema} Rules: - Convert any strings to a PostgreSQL parameterized query value to avoid SQL injection attacks. - Return a JSON object with the following structure: { "sql": "", "paramValues": [] } Examples: User: "Display all company reviews. Group by company." Assistant: { "sql": "SELECT * FROM reviews", "paramValues": [] } User: "Display all reviews for companies located in cities that start with 'L'." Assistant: { "sql": "SELECT r.* FROM reviews r INNER JOIN customers c ON r.customer_id = c.id WHERE c.city LIKE 'L%'", "paramValues": [] } User: "Display revenue for companies located in London. Include the company name and city." Assistant: { "sql": "SELECT c.company, c.city, SUM(o.total) AS revenue FROM customers c INNER JOIN orders o ON c.id = o.customer_id WHERE c.city = $1 GROUP BY c.company, c.city", "paramValues": ["London"] } User: "Get the total revenue for Adventure Works Cycles. Include the contact information as well." Assistant: { "sql": "SELECT c.company, c.city, c.email, SUM(o.total) AS revenue FROM customers c INNER JOIN orders o ON c.id = o.customer_id WHERE c.company = $1 GROUP BY c.company, c.city, c.email", "paramValues": ["Adventure Works Cycles"] } `;
사용할 AI 도우미 유형이 정의됩니다. 이 경우 "SQL 봇에 대한 자연어"입니다.
데이터베이스의 테이블 이름 및 열이 정의됩니다. 프롬프트에 포함된 상위 수준 스키마는 server/db.schema 파일에서 찾을 수 있으며 다음과 같습니다.
- customers (id, company, city, email) - orders (id, customer_id, date, total) - order_items (id, order_id, product_id, quantity, price) - reviews (id, customer_id, review, date, comment)
팁 (조언)
SQL에 자연어를 사용하여 쿼리할 수 있는 데이터 사용자만 포함된 읽기 전용 보기를 만드는 것이 좋습니다.
SQL 삽입 공격을 방지하기 위해 문자열 값을 매개 변수가 있는 쿼리 값으로 변환하는 규칙이 정의됩니다.
규칙은 항상 SQL 쿼리 및 매개 변수 값을 사용하여 JSON 개체를 반환하도록 정의됩니다.
사용자 프롬프트 예제와 예상 SQL 쿼리 및 매개 변수 값이 제공됩니다. 이를 "몇 번의 학습"이라고 합니다. LLM은 많은 양의 데이터에 대해 학습되지만 몇 가지 예제만 사용하여 새 작업에 적응할 수 있습니다. 다른 방법은 예제가 제공되지 않고 모델이 올바른 SQL 쿼리 및 매개 변수 값을 생성해야 하는 "제로샷" 학습입니다.
이 함수는
getSQLFromNLP()
시스템 및 사용자 프롬프트를 서버/openAI.tscallOpenAI()
함수로 보냅니다. 함수는callOpenAI()
환경 변수를 확인하여 Foundry Models 또는 OpenAI 서비스의 Azure OpenAI를 호출해야 하는지 여부를 결정합니다. 환경 변수에서 키, 엔드포인트 및 모델을 사용할 수 있는 경우 Azure OpenAI가 호출되고, 그렇지 않으면 OpenAI가 호출됩니다.function callOpenAI(systemPrompt: string, userPrompt: string, temperature = 0, useBYOD = false) { const isAzureOpenAI = OPENAI_API_KEY && OPENAI_ENDPOINT && OPENAI_MODEL; if (isAzureOpenAI) { if (useBYOD) { return getAzureOpenAIBYODCompletion(systemPrompt, userPrompt, temperature); } return getAzureOpenAICompletion(systemPrompt, userPrompt, temperature); } return getOpenAICompletion(systemPrompt, userPrompt, temperature); }
비고
이 자습서 전체에서 Azure OpenAI에 집중하지만 .env
OPENAI_API_KEY
제공하는 경우 애플리케이션은 OpenAI를 대신 사용합니다. Azure OpenAI 대신 OpenAI를 사용하도록 선택하는 경우 경우에 따라 다른 결과가 나타날 수 있습니다.함수를 찾습니다
getAzureOpenAICompletion()
.async function getAzureOpenAICompletion(systemPrompt: string, userPrompt: string, temperature: number): Promise<string> { const completion = await createAzureOpenAICompletion(systemPrompt, userPrompt, temperature); let content = completion.choices[0]?.message?.content?.trim() ?? ''; console.log('Azure OpenAI Output: \n', content); if (content && content.includes('{') && content.includes('}')) { content = extractJson(content); } return content; }
이 함수는 다음을 수행합니다.
매개 변수:
-
systemPrompt
,userPrompt
및temperature
기본 매개 변수입니다.-
systemPrompt
: Azure OpenAI 모델에 해당 역할 및 따라야 할 규칙을 알릴 수 있습니다. -
userPrompt
: 자연어 입력 또는 출력 생성 규칙과 같은 사용자가 제공한 정보를 포함합니다. -
temperature
: 모델 응답의 창의성 수준을 지정합니다. 값이 높을수록 더 창의적인 결과가 나타나고, 낮은 값(예: 0)이 사용되면 더 결정론적인 답변이 생성됩니다.
-
-
완료 생성:
- 함수는 ,
createAzureOpenAICompletion()
를systemPrompt
호출userPrompt
하고temperature
완료를 생성합니다. - 완료 시 첫 번째 선택 항목에서 콘텐츠를 추출하여 추가 공백을 트리밍합니다.
- 콘텐츠에 JSON과 유사한 구조체(있는 것으로 표시됨
{
}
)가 포함된 경우 JSON 콘텐츠를 추출합니다.
- 함수는 ,
로깅 및 반환 값:
- 이 함수는 Azure OpenAI 출력을 콘솔에 기록합니다.
- 처리된 콘텐츠를 문자열로 반환합니다.
함수를 찾습니다
createAzureOpenAICompletion()
.async function createAzureOpenAICompletion(systemPrompt: string, userPrompt: string, temperature: number, dataSources?: any[]): Promise<any> { const baseEnvVars = ['OPENAI_API_KEY', 'OPENAI_ENDPOINT', 'OPENAI_MODEL']; const byodEnvVars = ['AZURE_AI_SEARCH_ENDPOINT', 'AZURE_AI_SEARCH_KEY', 'AZURE_AI_SEARCH_INDEX']; const requiredEnvVars = dataSources ? [...baseEnvVars, ...byodEnvVars] : baseEnvVars; checkRequiredEnvVars(requiredEnvVars); const config = { apiKey: OPENAI_API_KEY, endpoint: OPENAI_ENDPOINT, apiVersion: OPENAI_API_VERSION, deployment: OPENAI_MODEL }; const aoai = new AzureOpenAI(config); const completion = await aoai.chat.completions.create({ model: OPENAI_MODEL, // gpt-4o, gpt-3.5-turbo, etc. Pulled from .env file max_tokens: 1024, temperature, response_format: { type: "json_object", }, messages: [ { role: 'system', content: systemPrompt }, { role: 'user', content: userPrompt } ], // @ts-expect-error data_sources is a custom property used with the "Azure Add Your Data" feature data_sources: dataSources }); return completion; } function checkRequiredEnvVars(requiredEnvVars: string[]) { for (const envVar of requiredEnvVars) { if (!process.env[envVar]) { throw new Error(`Missing ${envVar} in environment variables.`); } } }
이 함수는 다음을 수행합니다.
매개 변수:
-
systemPrompt
,userPrompt
및temperature
앞에서 설명한 주요 매개 변수입니다. - 선택적
dataSources
매개 변수는 이 자습서의 뒷부분에서 다룰 "Azure Bring Your Own Data" 기능을 지원합니다.
-
환경 변수 확인:
- 이 함수는 필수 환경 변수가 있는지 확인하고 누락된 경우 오류를 throw합니다.
구성 개체:
-
config
개체는 파일(.env
, ,OPENAI_API_KEY
,OPENAI_ENDPOINT
OPENAI_API_VERSION
)의OPENAI_MODEL
값을 사용하여 만들어집니다. 이러한 값은 Azure OpenAI를 호출하기 위한 URL을 생성하는 데 사용됩니다.
-
AzureOpenAI 인스턴스:
-
AzureOpenAI
를 사용하여config
인스턴스가 생성됩니다. 기호는AzureOpenAI
파일의 맨 위에서 가져와야 하는 패키지의 일부입니다openai
.
-
완료 생성:
- 함수
chat.completions.create()
는 다음 속성을 사용하여 호출됩니다.-
model
: 파일에 정의된 GPT 모델(예: gpt-4o, gpt-3.5-turbo)을 지정합니다.env
. -
max_tokens
: 완료할 최대 토큰 수를 정의합니다. -
temperature
: 샘플링 온도를 설정합니다. 값(예: 0.9)이 높을수록 창의적인 응답이 늘어나고, 값이 낮을수록(예: 0) 더 결정적인 답변이 생성됩니다. -
response_format
: 응답 형식을 정의합니다. 여기서는 JSON 개체를 반환하도록 설정됩니다. JSON 모드에 대한 자세한 내용은 Azure OpenAI 참조 설명서에서 확인할 수 있습니다. -
messages
: 채팅 완료를 생성하기 위한 메시지를 포함합니다. 이 예제에는 시스템의 메시지(동작 및 규칙 정의)와 사용자의 메시지(프롬프트 텍스트 포함)의 두 메시지가 포함됩니다.
-
- 함수
반환 값:
- 이 함수는 Azure OpenAI에서 생성된 완료 개체를 반환합니다.
함수에서 다음 줄을 주석 처리합니다
getSQLFromNLP()
.// if (isProhibitedQuery(queryData.sql)) { // queryData.sql = ''; // }
openAI.ts 저장합니다. API 서버는 TypeScript 코드를 자동으로 다시 빌드하고 서버를 다시 시작합니다.
브라우저로 돌아가서 데이터베이스의 모든 테이블 이름 선택을사용자 지정 쿼리 입력에 입력합니다. 쿼리 실행을 선택합니다. 테이블 이름이 표시되어 있나요?
서버/openAI.ts
getSQLFromNLP()
로 돌아가 서 시스템 프롬프트의 섹션에Rules:
다음 규칙을 추가한 다음 파일을 저장합니다.- Do not allow the SELECT query to return table names, function names, or procedure names.
브라우저로 돌아가서 다음 작업을 수행합니다.
- 데이터베이스의 모든 테이블 이름을사용자 지정 쿼리 입력에 입력합니다. 쿼리 실행을 선택합니다. 테이블 이름이 표시되어 있나요?
- 데이터베이스에서 모든 함수 이름을 선택합니다.사용자 지정 쿼리 입력에 입력하고 쿼리 실행을 다시 선택합니다. 함수 이름이 표시되어 있나요?
질문: 모델은 항상 프롬프트에서 정의하는 규칙을 따르나요?
대답: 아니요! OpenAI 모델은 정의한 규칙과 일치하지 않을 수 있는 경우에 따라 예기치 않은 결과를 반환할 수 있다는 점에 유의해야 합니다. 코드에서 이를 계획하는 것이 중요합니다.
서버/openAI.ts 돌아가서 함수를 찾습니다
isProhibitedQuery()
. Azure OpenAI에서 결과를 반환한 후 실행할 수 있는 후처리 코드의 예입니다. 생성된 SQL 쿼리에서sql
금지된 키워드가 반환되는 경우 속성을 빈 문자열로 설정합니다. 이렇게 하면 Azure OpenAI에서 예기치 않은 결과가 반환되면 SQL 쿼리가 데이터베이스에 대해 실행되지 않습니다.function isProhibitedQuery(query: string): boolean { if (!query) return false; const prohibitedKeywords = [ 'insert', 'update', 'delete', 'drop', 'truncate', 'alter', 'create', 'replace', 'information_schema', 'pg_catalog', 'pg_tables', 'pg_proc', 'pg_namespace', 'pg_class', 'table_schema', 'table_name', 'column_name', 'column_default', 'is_nullable', 'data_type', 'udt_name', 'character_maximum_length', 'numeric_precision', 'numeric_scale', 'datetime_precision', 'interval_type', 'collation_name', 'grant', 'revoke', 'rollback', 'commit', 'savepoint', 'vacuum', 'analyze' ]; const queryLower = query.toLowerCase(); return prohibitedKeywords.some(keyword => queryLower.includes(keyword)); }
비고
데모 코드일 뿐입니다. 자연어를 SQL로 변환하도록 선택한 경우 특정 사용 사례를 다루는 데 필요한 다른 금지 키워드가 있을 수 있습니다. 이 기능은 유효한 SQL 쿼리만 반환되고 데이터베이스에 대해 실행되도록 주의하여 계획하고 사용해야 하는 기능입니다. 금지된 키워드 외에도 보안을 고려해야 합니다.
서버/openAI.ts 돌아가서 함수에서
getSQLFromNLP()
다음 코드의 주석 처리를 제거합니다. 파일을 저장합니다.if (isProhibitedQuery(queryData.sql)) { queryData.sql = ''; }
다음 규칙을
systemPrompt
제거하고 파일을 저장합니다.- Do not allow the SELECT query to return table names, function names, or procedure names.
브라우저로 돌아가서 데이터베이스의 모든 테이블 이름을사용자 지정 쿼리 입력에 다시 입력하고 쿼리 실행 단추를 선택합니다.
테이블 결과가 표시 합니까? 규칙이 없는
isProhibitedQuery
경우에도 사후 처리 코드는 해당 유형의 쿼리가 데이터베이스에 대해 실행되는 것을 금지합니다.앞에서 설명한 것처럼 비즈니스 애플리케이션에서 SQL에 자연어를 통합하는 것은 사용자에게 매우 도움이 될 수 있지만 고유한 고려 사항이 함께 제공됩니다.
장점:
사용자 친화성: 이 기능을 사용하면 기술 전문 지식 없이도 데이터베이스 상호 작용에 더 쉽게 액세스할 수 있으므로 SQL 지식의 필요성이 줄어들고 작업 속도가 향상될 수 있습니다.
생산성 향상: 비즈니스 분석가, 마케터, 임원 및 기타 비기술 사용자는 기술 전문가에 의존하지 않고도 데이터베이스에서 중요한 정보를 검색하여 효율성을 높일 수 있습니다.
광범위한 애플리케이션: 고급 언어 모델을 사용하여 다양한 사용자 및 사용 사례를 충족하도록 애플리케이션을 설계할 수 있습니다.
고려 사항:
보안: 가장 큰 문제 중 하나는 보안입니다. 사용자가 자연어를 사용하여 데이터베이스와 상호 작용할 수 있는 경우 무단 액세스 또는 악의적인 쿼리를 방지하기 위한 강력한 보안 조치가 있어야 합니다. 사용자가 데이터를 수정하지 못하도록 읽기 전용 모드를 구현하는 것이 좋습니다.
데이터 개인 정보: 특정 데이터는 중요할 수 있으며 쉽게 액세스할 수 없으므로 적절한 보호 장치와 사용자 권한이 있는지 확인해야 합니다.
정확도: 자연어 처리가 크게 향상되었지만 완벽하지는 않습니다. 사용자 쿼리를 잘못 해석하면 부정확한 결과 또는 예기치 않은 동작이 발생할 수 있습니다. 예기치 않은 결과를 처리하는 방법을 계획해야 합니다.
효율성: 자연어 쿼리에서 반환된 SQL이 효율적이라는 보장은 없습니다. 경우에 따라 사후 처리 규칙이 SQL 쿼리 문제를 감지하는 경우 Azure OpenAI에 대한 추가 호출이 필요할 수 있습니다.
교육 및 사용자 적응: 쿼리를 올바르게 작성하려면 사용자를 학습해야 합니다. SQL을 배우는 것보다 쉽지만 여전히 학습 곡선이 관련되어 있을 수 있습니다.
다음 연습으로 넘어가기 전에 고려해야 할 몇 가지 마지막 사항은 다음과 같습니다.
- "당신이 해야 한다는 것을 의미할 수 없다고 해서"가 여기에 적용된다는 것을 기억하십시오. 자연어를 SQL에 애플리케이션에 통합하기 전에 매우 신중하고 신중한 계획을 사용합니다. 잠재적인 위험을 이해하고 이를 계획하는 것이 중요합니다.
- 이러한 유형의 기술을 사용하기 전에 팀, 데이터베이스 관리자, 보안 팀, 이해 관계자 및 기타 관련 당사자와 잠재적 시나리오를 논의하여 조직에 적합한지 확인합니다. SQL에 대한 자연어가 보안, 개인 정보 보호 및 조직에 있을 수 있는 기타 요구 사항을 충족하는지 논의하는 것이 중요합니다.
- 보안은 주요 관심사이며 계획, 개발 및 배포 프로세스에 기본 제공되어야 합니다.
- SQL에 대한 자연어는 매우 강력할 수 있지만, 프롬프트에 필요한 규칙이 있고 사후 처리 기능이 포함되도록 신중하게 계획해야 합니다. 이 유형의 기능을 구현 및 테스트하고 예기치 않은 결과가 반환되는 시나리오를 고려하여 추가 시간을 계획합니다.
- Azure OpenAI를 사용하면 고객은 OpenAI와 동일한 모델을 실행하면서 Microsoft Azure의 보안 기능을 얻을 수 있습니다. Azure OpenAI는 프라이빗 네트워킹, 지역 가용성 및 책임 있는 AI 콘텐츠 필터링을 제공합니다. Azure OpenAI의 데이터, 개인 정보 및 보안에 대해 자세히 알아봅니다.
이제 Azure OpenAI를 사용하여 자연어를 SQL로 변환하는 방법을 알아보고 이러한 유형의 기능을 구현하는 장단점을 알아보았습니다. 다음 연습에서는 Azure OpenAI를 사용하여 전자 메일 및 SMS 메시지를 생성하는 방법을 알아봅니다.