Aracılığıyla paylaş


Yapay Zeka: Doğal Dilden SQL'e

"Yalnızca bunu yapmalısınız anlamına gelmez" alıntısı, yapay zeka özelliklerini düşünürken yararlı bir kılavuzdur. Örneğin, Azure OpenAI'nin sql'e doğal dili özelliği, kullanıcıların veritabanı sorgularını düz İngilizce olarak oluşturmasına olanak tanır ve bu da üretkenliğini artırmak için güçlü bir araç olabilir. Ancak , güçlü her zaman uygun veya güvenli anlamına gelmez. Bu alıştırmada bu yapay zeka özelliğinin nasıl kullanılacağı gösterilirken, uygulamaya karar vermeden önce göz önünde bulundurulması gereken önemli noktalar ele alınacaktır.

Veritabanından veri almak için kullanılabilecek bir doğal dil sorgusu örneği aşağıda verilmişti:

Get the the total revenue for all companies in London.

Uygun istemlerle, Azure OpenAI bu sorguyu veritabanından sonuç döndürmek için kullanılabilecek SQL'e dönüştürür. Sonuç olarak, iş analistleri, pazarlamacılar ve yöneticiler de dahil olmak üzere teknik olmayan kullanıcılar, karmaşık SQL söz dizimiyle boğuşmadan veya kısıtlanmış veri kılavuzlarına ve filtrelere güvenmeden veritabanlarından değerli bilgileri daha kolay alabilir. Bu kolaylaştırılmış yaklaşım, kullanıcıların teknik uzmanlardan yardım isteme gereksinimini ortadan kaldırarak üretkenliği artırabilir.

Bu alıştırma, SQL'e doğal dilin nasıl çalıştığını anlamanıza, bazı önemli noktaları size tanıtmanıza, avantajları ve dezavantajları düşünmenize yardımcı olacak ve başlangıç kodunu göstermenize yardımcı olacak bir başlangıç noktası sağlar.

Bu alıştırmada şunları yapacaksınız:

  • Doğal dili SQL'e dönüştürmek için GPT istemlerini kullanın.
  • Farklı GPT istemleriyle denemeler yapın.
  • Daha önce başlatılan PostgreSQL veritabanını sorgulamak için oluşturulan SQL'i kullanın.
  • PostgreSQL'den sorgu sonuçlarını döndür ve tarayıcıda görüntüle.

Doğal dili SQL'e dönüştürmek için kullanılabilecek farklı GPT istemleriyle denemeler yaparak başlayalım.

Doğal Dilden SQL'e Özelliğini Kullanma

  1. Önceki alıştırmada veritabanını, API'leri ve uygulamayı başlattınız. Dosyayı da güncelleştirmişsiniz .env . Bu adımları tamamlamadıysanız devam etmeden önce alıştırmanın sonundaki yönergeleri izleyin.

  2. Tarayıcıya (http://localhost:4200) dönün ve datagrid'in altındaki sayfanın Özel Sorgu bölümünü bulun. Örnek sorgu değerinin zaten dahil olduğuna dikkat edin: Tüm siparişlerin toplam gelirini alın. Şirkete göre gruplandırın ve şehri dahil edin.

    Doğal dilden SQL sorgusuna.

  3. Sorguyu Çalıştır düğmesini seçin. Bu, kullanıcının doğal dil sorgusunu SQL'e dönüştürecek olan Azure OpenAI'ye geçirir. Sql sorgusu daha sonra veritabanını sorgulamak ve olası sonuçları döndürmek için kullanılır.

  4. Aşağıdaki Özel Sorguyu çalıştırın:

    Get the total revenue for Adventure Works Cycles. Include the contact information as well.
    
  5. Visual Studio Code'da API sunucusunu çalıştıran terminal penceresini görüntüleyin ve Azure OpenAI'den döndürülen SQL sorgusunu görüntülediğine dikkat edin. JSON verileri sunucu tarafı API'leri tarafından PostgreSQL veritabanını sorgulamak için kullanılır. Sorguya dahil edilen tüm dize değerleri, SQL ekleme saldırılarını önlemek için parametre değerleri olarak eklenir:

    { 
        "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"] 
    }
    
  6. Datagrid'de tüm müşterileri yeniden görüntülemek için tarayıcıya dönün ve Verileri Sıfırla'yı seçin.

Sql Code'a Doğal Dili Keşfetme

İpucu

Visual Studio Code kullanıyorsanız, şunları seçerek dosyaları doğrudan açabilirsiniz:

  • Windows/Linux: Ctrl + P
  • Mac: Cmd + P

Ardından açmak istediğiniz dosyanın adını yazın.

Uyarı

Bu alıştırmanın amacı, SQL işlevselliği için doğal dil ile mümkün olan şeyleri göstermek ve kullanmaya başlamayı göstermektir. Daha önce de belirtildiği gibi, herhangi bir uygulamaya geçmeden önce bu yapay zeka türünün kuruluşunuz için uygun olup olmadığını tartışmanız önemlidir. Ayrıca yetkisiz erişimi önlemek ve hassas verileri korumak için uygun istem kurallarını ve veritabanı güvenlik önlemlerini planlamak da şarttır .

  1. SQL özelliğinin doğal dilinin nasıl çalıştığını gördüğünüze göre şimdi nasıl uygulandığını inceleyelim.

  2. Sunucu/apiRoutes.ts dosyasını açın ve yolu bulungenerateSql. Bu API yolu, tarayıcıda çalışan istemci tarafı uygulaması tarafından çağrılır ve doğal dil sorgusundan SQL oluşturmak için kullanılır. SQL sorgusu alındıktan sonra veritabanını sorgulamak ve sonuçları döndürmek için kullanılır.

    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.' });
        }
    });
    

    Yolda aşağıdaki işlevlere generateSql dikkat edin:

    • kullanıcı sorgu değerini 'den req.body.prompt alır ve adlı userPromptbir değişkene atar. Bu değer GPT isteminde kullanılır.
    • Doğal dili SQL'e dönüştürmek için bir getSQLFromNLP() işlev çağırır.
    • Oluşturulan SQL'i, SQL sorgusunu yürüten ve veritabanından sonuçlar döndüren adlı queryDb bir işleve geçirir.
  3. Düzenleyicinizde sunucu/openAI.ts dosyasını açın ve işlevi bulun getSQLFromNLP() . Bu işlev yol tarafından çağrılır generatesql ve doğal dili SQL'e dönüştürmek için kullanılır.

    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;
    }
    
    • İşleve bir userPrompt parametre geçirilir. userPrompt Değer, tarayıcıda kullanıcı tarafından girilen doğal dil sorgusudur.
    • A systemPrompt , kullanılacak yapay zeka yardımcısı türünü ve izlenmesi gereken kuralları tanımlar. Bu, Azure OpenAI'nin veritabanı yapısını, hangi kuralların uygulanacağını ve oluşturulan SQL sorgusunu ve parametrelerini nasıl döndüreceklerini anlamasına yardımcı olur.
    • adlı callOpenAI() bir işlev çağrılır systemPrompt ve ve userPrompt değerleri bu işleve geçirilir.
    • Sonuçlar, oluşturulan SQL sorgusuna yasaklanmış değer eklenmediğinden emin olmak için denetlenir. Yasaklanmış değerler bulunursa, SQL sorgusu boş bir dizeye ayarlanır.
  4. Şimdi sistem istemini daha ayrıntılı inceleyelim:

    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"] 
      }
    `;
    
    • Kullanılacak yapay zeka yardımcısı türü tanımlanır. Bu durumda "SQL botu için doğal dil".

    • Veritabanındaki tablo adları ve sütunlar tanımlanır. İstemde yer alan üst düzey şema server/db.schema dosyasında bulunabilir ve aşağıdaki gibi görünür.

      - 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)
      

      İpucu

      Yalnızca kullanıcıların SQL'e doğal dil kullanarak sorgulamasına izin verilen verileri içeren salt okunur görünümler oluşturmayı düşünebilirsiniz.

    • SQL ekleme saldırılarını önlemek için herhangi bir dize değerini parametreli sorgu değerine dönüştürmek için bir kural tanımlanır.

    • Sql sorgusu ve içindeki parametre değerleriyle her zaman bir JSON nesnesi döndürmek için bir kural tanımlanır.

    • Örnek kullanıcı istemleri ve beklenen SQL sorgusu ve parametre değerleri sağlanır. Bu, "az çekim" öğrenme olarak adlandırılır. LLM'ler büyük miktarda veri üzerinde eğitilse de, yalnızca birkaç örnekle yeni görevlere uyarlanabilir. Alternatif bir yaklaşım, örnek sağlanmayan ve modelin doğru SQL sorgusu ve parametre değerlerini oluşturmasının beklendiği "sıfır çekim" öğrenme yaklaşımıdır.

  5. İşlev, getSQLFromNLP() sistem ve kullanıcı istemlerini callOpenAI() dosyasında da bulunan adlı bir işleve gönderir. İşlev, callOpenAI() Ortam değişkenlerini denetleyerek Foundry Modellerinde veya OpenAI hizmetinde Azure OpenAI'nin çağrılıp çağrılmadığını belirler. Ortam değişkenlerinde bir anahtar, uç nokta ve model varsa Azure OpenAI çağrılır, aksi takdirde OpenAI çağrılır.

    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);
    }
    

    Uyarı

    Bu öğretici boyunca Azure OpenAI'ye odaklanacağız ancak OPENAI_API_KEY dosyasında yalnızca bir değer sağlarsanız, uygulama bunun yerine OpenAI kullanır. Azure OpenAI yerine OpenAI kullanmayı seçerseniz bazı durumlarda farklı sonuçlar görebilirsiniz.

  6. İşlevi getAzureOpenAICompletion() bulun.

    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;
    }
    

    Bu işlev aşağıdakileri yapar:

    • Parametreler:

      • systemPrompt, userPromptve temperature ana parametrelerdir.
        • systemPrompt: Rolünü ve izlenmesi gereken kuralları Azure OpenAI modeline bildirir.
        • userPrompt: Doğal dil girişi veya çıkışı oluşturmak için kurallar gibi kullanıcı tarafından sağlanan bilgileri içerir.
        • temperature: Modelin yanıtının yaratıcılık düzeyini belirler. Daha yüksek bir değer daha yaratıcı çıkışlara neden olurken, daha düşük değerler (örneğin, 0) daha belirleyici yanıtlar üretir.
    • Tamamlama Oluşturma:

      • İşlev, bir tamamlama oluşturmak için , createAzureOpenAICompletion()ve systemPrompt ile userPromptçağrılartemperature.
      • Tamamlanmadaki ilk seçenekten içeriği ayıklar ve ek boşluklar kırpılır.
      • İçerik JSON benzeri yapılar içeriyorsa (ve {varlığıyla } gösterilir), JSON içeriğini ayıklar.
    • Günlüğe Kaydetme ve Dönüş Değeri:

      • İşlev, Azure OpenAI çıkışını konsola günlüğe kaydeder.
      • İşlenen içeriği dize olarak döndürür.
  7. İşlevi createAzureOpenAICompletion() bulun.

    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.`);
            }
        }
    }
    

    Bu işlev aşağıdakileri yapar:

    • Parametreler:

      • systemPrompt, userPromptve temperature daha önce ele alınan ana parametrelerdir.
      • İsteğe bağlı dataSources bir parametre, bu öğreticinin ilerleyen bölümlerinde ele alınacak olan "Azure Kendi Verilerini Getir" özelliğini destekler.
    • Ortam Değişkenleri Denetimi:

      • İşlev, temel ortam değişkenlerinin varlığını doğrulayarak eksik bir hata oluşturur.
    • Yapılandırma Nesnesi:

      • Dosyadaki config.env (OPENAI_API_KEY, OPENAI_ENDPOINT, , OPENAI_API_VERSIONOPENAI_MODEL) değerler kullanılarak bir nesne oluşturulur. Bu değerler, Azure OpenAI'yi çağırmak için URL'yi oluşturmak için kullanılır.
    • AzureOpenAI Örneği:

      • nesnesi kullanılarak AzureOpenAI bir config örneği oluşturulur. AzureOpenAI Simgesi, dosyanızın en üstünde içeri aktarılması gereken paketin bir parçasıdıropenai.
    • Tamamlama Oluşturma:

      • chat.completions.create() İşlev aşağıdaki özelliklerle çağrılır:
        • model: Dosyanızda .env tanımlandığı gibi GPT modelini (gpt-4o, gpt-3.5-turbo gibi) belirtir.
        • max_tokens: Tamamlanma için en fazla belirteç sayısını tanımlar.
        • temperature: Örnekleme sıcaklığını ayarlar. Daha yüksek değerler (örneğin, 0,9) daha yaratıcı yanıtlar verirken, daha düşük değerler (örneğin, 0) daha belirleyici yanıtlar üretir.
        • response_format: Yanıt biçimini tanımlar. Burada bir JSON nesnesi döndürecek şekilde ayarlanmıştır. JSON moduyla ilgili diğer ayrıntılar Azure OpenAI başvuru belgelerinde bulunabilir.
        • messages: Sohbet tamamlamaları oluşturmaya yönelik iletileri içerir. Bu örnek iki ileti içerir: biri sistemden (davranış ve kuralları tanımlama) diğeri de kullanıcıdan (istem metnini içeren).
    • Dönüş Değeri:

      • İşlev, Azure OpenAI tarafından oluşturulan tamamlama nesnesini döndürür.
  8. İşlevde aşağıdaki satırları açıklama satırı yapın getSQLFromNLP() :

    // if (isProhibitedQuery(queryData.sql)) { 
    //     queryData.sql = '';
    // }
    
  9. openAI.ts kaydedin. API sunucusu TypeScript kodunu otomatik olarak yeniden oluşturur ve sunucuyu yeniden başlatır.

  10. Tarayıcıya geri dönün ve Özel Sorgu girişine Veritabanındaki tüm tablo adlarını seçin yazın. Sorguyu Çalıştır'ı seçin. Tablo adları görüntüleniyor mu?

  11. getSQLFromNLP() işlevine geri dönün ve sistem isteminin bölümüne aşağıdaki kuralı Rules: ekleyin ve dosyayı kaydedin.

    - Do not allow the SELECT query to return table names, function names, or procedure names.
    
  12. Tarayıcıya geri dönün ve aşağıdaki görevleri gerçekleştirin:

    • Özel Sorgugirişine Veritabanındaki tüm tablo adlarını seçin yazın. Sorguyu Çalıştır'ı seçin. Tablo adları görüntüleniyor mu?
    • Veritabanındaki tüm işlev adlarını seçin yazın.Özel Sorgu girişine sorguyu çalıştır'ı yeniden seçin. İşlev adları görüntüleniyor mu?
  13. SORU: Model her zaman istemde tanımladığınız kurallara uyar mı?

    CEVAP: Hayır! OpenAI modellerinin bazen tanımladığınız kurallarla eşleşmeyen beklenmeyen sonuçlar döndürebileceğini unutmayın. Kodunuzda bunu planlamak önemlidir.

  14. Sunucuya/openAI.ts dönün ve işlevi bulunisProhibitedQuery(). Bu, Azure OpenAI sonuçları döndürdüğünde çalıştırılabilen işlem sonrası kodun bir örneğidir. Oluşturulan SQL sorgusunda sql yasaklı anahtar sözcükler döndürülürse özelliğini boş bir dizeye ayarlı olduğuna dikkat edin. Bu, Azure OpenAI'den beklenmeyen sonuçlar döndürülürse SQL sorgusunun veritabanında çalıştırılmamasını sağlar.

    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));
    }
    

    Uyarı

    Bunun yalnızca tanıtım kodu olduğunu unutmayın. Doğal dili SQL'e dönüştürmeyi seçerseniz, belirli kullanım örneklerinizi kapsayacak başka yasak anahtar sözcükler de gerekebilir. Bu, veritabanında yalnızca geçerli SQL sorgularının döndürülmesini ve çalıştırılmasını sağlamak için planlamanız ve dikkatli bir şekilde kullanmanız gereken bir özelliktir. Yasaklanmış anahtar sözcüklere ek olarak güvenliği de dikkate almanız gerekir.

  15. sunucuya/openAI.ts dönün ve işlevde aşağıdaki kodun açıklamasını getSQLFromNLP() kaldırın. Dosyayı kaydedin.

    if (isProhibitedQuery(queryData.sql)) { 
        queryData.sql = '';
    }
    
  16. Aşağıdaki kuralı kaldırın systemPrompt ve dosyayı kaydedin.

    - Do not allow the SELECT query to return table names, function names, or procedure names.
    
  17. Tarayıcıya geri dönün, Veritabanındaki tüm tablo adlarını seçin yazın ve Özel Sorgu girişine yeniden Sorgu Çalıştır düğmesini seçin.

  18. Tablo sonuçları görüntüleniyor mu? Kural yerinde olmasa bile, isProhibitedQuery işlem sonrası kodu bu tür bir sorgunun veritabanında çalıştırılmasını engeller.

  19. Daha önce de açıklandığı gibi, doğal dili iş kolu uygulamalarında SQL ile tümleştirmek kullanıcılar için oldukça yararlı olabilir, ancak kendi dikkat edilmesi gerekenler kümesiyle birlikte gelir.

    Avantajlar:

    • Kullanıcı dostu olma: Bu özellik, veritabanı etkileşimini teknik uzmanlığa sahip olmayan kullanıcılar için daha erişilebilir hale getirerek SQL bilgisine olan ihtiyacı azaltabilir ve işlemleri hızlandırabilir.

    • Artan üretkenlik: İş analistleri, pazarlamacılar, yöneticiler ve diğer teknik olmayan kullanıcılar, teknik uzmanlara güvenmek zorunda kalmadan veritabanlarından değerli bilgileri alabilir ve böylece verimliliği artırabilir.

    • Geniş uygulama: Gelişmiş dil modelleri kullanılarak, uygulamalar çok çeşitli kullanıcılara ve kullanım örneklerine uygun olarak tasarlanabilir.

    Önemli noktalar:

    • Güvenlik: En büyük endişelerden biri güvenliktir. Kullanıcılar doğal dil kullanarak veritabanlarıyla etkileşim kurabiliyorsa yetkisiz erişimi veya kötü amaçlı sorguları önlemek için sağlam güvenlik önlemlerinin alınması gerekir. Kullanıcıların verileri değiştirmesini önlemek için salt okunur mod uygulamayı düşünebilirsiniz.

    • Veri Gizliliği: Bazı veriler hassas olabilir ve kolayca erişilmemelidir, bu nedenle uygun korumaların ve kullanıcı izinlerinin sağlandığından emin olmanız gerekir.

    • Doğruluk: Doğal dil işleme önemli ölçüde geliştirilmiş olsa da mükemmel değildir. Kullanıcı sorgularının yanlış yorumlanması yanlış sonuçlara veya beklenmeyen davranışlara yol açabilir. Beklenmeyen sonuçların nasıl işleneceğini planlamanız gerekir.

    • Verimlilik: Doğal dil sorgusundan döndürülen SQL'in verimli olacağının garantisi yoktur. Bazı durumlarda, işlem sonrası kuralları SQL sorgularıyla ilgili sorunları algılarsa Azure OpenAI'ye yönelik ek çağrılar gerekebilir.

    • Eğitim ve Kullanıcı Uyarlaması: Kullanıcıların sorgularını doğru formüle etmek için eğitilmesi gerekir. SQL öğrenmekten daha kolay olsa da bir öğrenme eğrisi söz konusu olabilir.

  20. Sonraki alıştırmaya geçmeden önce göz önünde bulundurmanız gereken birkaç son nokta:

    • Unutmayın, "Çünkü bunu yapamazsınız" burada geçerlidir. Doğal dili SQL ile bir uygulamayla tümleştirmeden önce çok dikkatli ve dikkatli planlama yapın. Olası riskleri anlamak ve bunları planlamak önemlidir.
    • Bu tür bir teknolojiyi kullanmadan önce, kuruluşunuza uygun olduğundan emin olmak için ekibiniz, veritabanı yöneticileriniz, güvenlik ekibiniz, paydaşlar ve diğer ilgili taraflarla olası senaryoları tartışın. SQL'e doğal dilin güvenlik, gizlilik ve kuruluşunuzun karşılamış olabileceği diğer gereksinimleri karşılayıp karşılamayabileceğini tartışmanız önemlidir.
    • Güvenlik öncelikli bir konu olmalı ve planlama, geliştirme ve dağıtım sürecine dahil edilmelidir.
    • SQL'e doğal dil çok güçlü olsa da, istemlerin gerekli kurallara sahip olduğundan ve işlem sonrası işlevselliğinin dahil olduğundan emin olmak için dikkatli bir planlama yapılmalıdır. Bu tür işlevleri uygulamak ve test etmek ve beklenmeyen sonuçların döndürüldüğü senaryoları hesaba eklemek için ek süre planlayın.
    • Azure OpenAI ile müşteriler, OpenAI ile aynı modelleri çalıştırırken Microsoft Azure'ın güvenlik özelliklerine sahip olur. Azure OpenAI özel ağ, bölgesel kullanılabilirlik ve sorumlu yapay zeka içerik filtrelemesi sunar. Azure OpenAI için veriler, gizlilik ve güvenlik hakkında daha fazla bilgi edinin.
  21. Artık doğal dili SQL'e dönüştürmek için Azure OpenAI'yi nasıl kullanacağınızı gördünüz ve bu tür işlevleri uygulamanın avantajları ve dezavantajları hakkında bilgi edindiniz. Sonraki alıştırmada Azure OpenAI kullanılarak e-posta ve SMS iletilerinin nasıl oluşturulabileceğini öğreneceksiniz.

Sonraki Adım