Sdílet prostřednictvím


AI: Přirozený jazyk do SQL

Citace "Jen proto, že nemůžete neznamená, že byste měli" je užitečným průvodcem při úvahách o možnostech umělé inteligence. Funkce Přirozeného jazyka SQL pro Azure OpenAI například umožňuje uživatelům vytvářet databázové dotazy v prosté angličtině, což může být výkonný nástroj pro zvýšení produktivity. Výkon ale neznamená vždy vhodné ani bezpečné. V tomto cvičení si ukážeme, jak tuto funkci umělé inteligence používat, a zároveň probereme důležité aspekty, které je potřeba vzít v úvahu, než se rozhodnete ji implementovat.

Tady je příklad dotazu v přirozeném jazyce, který se dá použít k načtení dat z databáze:

Get the the total revenue for all companies in London.

Při správných výzev Azure OpenAI převede tento dotaz na SQL, který se dá použít k vrácení výsledků z databáze. V důsledku toho můžou uživatelé, včetně obchodních analytiků, obchodních analytiků a vedoucích pracovníků, snadněji načítat cenné informace z databází bez omezení syntaxe SQL nebo spoléhat se na omezené datovégridy a filtry. Tento zjednodušený přístup může zvýšit produktivitu tím, že eliminuje potřebu uživatelů hledat pomoc od technických odborníků.

Toto cvičení poskytuje výchozí bod, který vám pomůže pochopit, jak funguje přirozený jazyk SQL, seznámíte se s některými důležitými aspekty, začnete přemýšlet o výhodách a nevýhodách a ukážeme vám kód, který vám pomůže začít.

V tomto cvičení budete:

  • K převodu přirozeného jazyka na SQL použijte výzvy GPT.
  • Experimentujte s různými výzvami GPT.
  • Použijte vygenerovaný SQL k dotazování databáze PostgreSQL spuštěné dříve.
  • Vrátí výsledky dotazu z PostgreSQL a zobrazí je v prohlížeči.

Začněme experimentováním s různými výzvami GPT, které je možné použít k převodu přirozeného jazyka na SQL.

Použití funkce Přirozeného jazyka k SQL

  1. V předchozím cvičení jste spustili databázi, rozhraní API a aplikaci. Aktualizovali jste také .env soubor. Pokud jste tyto kroky nedokončili, před pokračováním postupujte podle pokynů na konci cvičení.

  2. Vraťte se do prohlížeče (http://localhost:4200) a vyhledejte část Vlastní dotaz na stránce pod datovou mřížkou. Všimněte si, že už je zahrnutá ukázková hodnota dotazu: Získejte celkové výnosy pro všechny objednávky. Seskupte podle společnosti a zahrňte město.

    Dotaz SQL v přirozeném jazyce.

  3. Vyberte tlačítko Spustit dotaz . Tím předáte dotaz přirozeného jazyka uživatele do Azure OpenAI, který ho převede na SQL. Dotaz SQL se pak použije k dotazování databáze a vrátí případné výsledky.

  4. Spusťte následující vlastní dotaz:

    Get the total revenue for Adventure Works Cycles. Include the contact information as well.
    
  5. Prohlédněte si okno terminálu se serverem rozhraní API v editoru Visual Studio Code a všimněte si, že se zobrazí dotaz SQL vrácený z Azure OpenAI. Data JSON používají rozhraní API na straně serveru k dotazování databáze PostgreSQL. Všechny řetězcové hodnoty zahrnuté v dotazu se přidají jako hodnoty parametrů, aby se zabránilo útokům prostřednictvím injektáže 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"] 
    }
    
  6. Vraťte se do prohlížeče a výběrem možnosti Obnovit data znovu zobrazte všechny zákazníky v datagridu.

Zkoumání přirozeného jazyka do kódu SQL

Návod

Pokud používáte Visual Studio Code, můžete soubory otevřít přímo tak, že vyberete:

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

Potom zadejte název souboru, který chcete otevřít.

Poznámka:

Cílem tohoto cvičení je ukázat, co je možné v přirozeném jazyce s funkcemi SQL a ukázat, jak ho začít používat. Jak už bylo zmíněno dříve, je důležité prodiskutovat, jestli je tento typ AI vhodný pro vaši organizaci, než budete pokračovat v jakékoli implementaci. Je také nezbytné naplánovat správná pravidla výzvy a bezpečnostní opatření databáze , aby se zabránilo neoprávněnému přístupu a ochraně citlivých dat.

  1. Teď, když jste viděli funkci přirozeného jazyka SQL v akci, pojďme se podívat, jak se implementuje.

  2. Otevřete soubor serveru nebo apiRoutes.ts a vyhledejte trasu generateSql . Tuto trasu rozhraní API volá aplikace na straně klienta spuštěná v prohlížeči a používá se k vygenerování SQL z dotazu v přirozeném jazyce. Po načtení dotazu SQL se použije k dotazování databáze a vrácení výsledků.

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

    Všimněte si následujících funkcí na generateSql trase:

    • Načte hodnotu dotazu uživatele a req.body.prompt přiřadí ji k proměnné s názvem userPrompt. Tato hodnota se použije v příkazovém řádku GPT.
    • Volá funkci pro převod přirozeného getSQLFromNLP() jazyka na SQL.
    • Předá vygenerovaný SQL funkci s názvem queryDb , která spustí dotaz SQL a vrátí výsledky z databáze.
  3. Otevřete soubor serveru nebo openAI.ts v editoru getSQLFromNLP() a vyhledejte funkci. Tato funkce je volána trasou a slouží k převodu generatesql přirozeného jazyka na 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;
    }
    
    • Do userPrompt funkce se předá parametr. Hodnota userPrompt je dotaz v přirozeném jazyce zadaný uživatelem v prohlížeči.
    • A systemPrompt definuje typ pomocníka AI, který se má použít, a pravidla, která by se měla dodržovat. To pomáhá Azure OpenAI pochopit strukturu databáze, jaká pravidla se mají použít, a jak vrátit vygenerovaný dotaz a parametry SQL.
    • Volá se funkce callOpenAI() a systemPromptuserPrompt hodnoty se jí předají.
    • Výsledky jsou kontrolovány, aby se zajistilo, že do vygenerovaného dotazu SQL nejsou zahrnuté žádné zakázané hodnoty. Pokud jsou nalezeny zakázané hodnoty, dotaz SQL je nastaven na prázdný řetězec.
  4. Pojďme si projít výzvu systému podrobněji:

    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"] 
      }
    `;
    
    • Typ pomocníka AI, který se má použít, je definován. V tomto případě se jedná o přirozený jazyk robota SQL.

    • Názvy tabulek a sloupce v databázi jsou definovány. Schéma vysoké úrovně, které je součástí výzvy, najdete v souboru server/db.schema a vypadá takto.

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

      Návod

      Můžete zvážit vytvoření zobrazení jen pro čtení, která obsahují pouze data, která uživatelé mohou dotazovat pomocí přirozeného jazyka do SQL.

    • Pravidlo je definováno pro převod libovolných řetězcových hodnot na parametrizovanou hodnotu dotazu, aby se zabránilo útokům prostřednictvím injektáže SQL.

    • Pravidlo je definováno tak, aby vždy vrátilo objekt JSON s dotazem SQL a hodnotami parametrů.

    • Zobrazí se ukázkové výzvy uživatele a očekávané hodnoty dotazu a parametrů SQL. To se označuje jako učení s několika snímky. I když jsou LLM vytrénované na velkých objemech dat, je možné je přizpůsobit novým úlohám pouze s několika příklady. Alternativním přístupem je učení s nulovým snímkem, kde není k dispozici žádný příklad a očekává se, že model vygeneruje správné hodnoty dotazu a parametrů SQL.

  5. Funkce getSQLFromNLP() odešle systém a uživatele výzvu k funkci s názvem callOpenAI() , která se nachází také v souboru server/openAI.ts . Funkce callOpenAI() určuje, jestli se má volat Azure OpenAI v modelech Foundry nebo službě OpenAI kontrolou proměnných prostředí. Pokud je klíč, koncový bod a model k dispozici v proměnných prostředí, volá se Azure OpenAI, jinak se volá 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);
    }
    

    Poznámka:

    I když se v tomto kurzu zaměříme na Azure OpenAI, pokud do souboru OPENAI_API_KEY zadáte jenom hodnotu, aplikace místo toho použije OpenAI. Pokud se rozhodnete použít OpenAI místo Azure OpenAI, může se v některých případech zobrazit jiné výsledky.

  6. getAzureOpenAICompletion() Vyhledejte funkci.

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

    Tato funkce provede následující:

    • Parametry:

      • systemPrompt, userPrompta temperature jsou hlavními parametry.
        • systemPrompt: Informuje model Azure OpenAI o své roli a o pravidlech, která se mají dodržovat.
        • userPrompt: Obsahuje informace poskytnuté uživatelem, například vstup v přirozeném jazyce nebo pravidla pro generování výstupu.
        • temperature: Určuje úroveň kreativity odpovědi modelu. Vyšší hodnota vede k kreativním výstupům, zatímco nižší hodnoty (např. 0) vytvářejí deterministické odpovědi.
    • Generování dokončení:

      • Funkce volá pomocí createAzureOpenAICompletion()systemPromptfunkce , userPrompta temperature vygeneruje dokončení.
      • Extrahuje obsah z první volby v dokončení a oříznou všechny nadbytečné prázdné znaky.
      • Pokud obsah obsahuje struktury podobné formátu JSON (označené přítomností { a }), extrahuje obsah JSON.
    • Protokolování a návratová hodnota:

      • Funkce protokoluje výstup Azure OpenAI do konzoly.
      • Vrátí zpracovaný obsah jako řetězec.
  7. createAzureOpenAICompletion() Vyhledejte funkci.

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

    Tato funkce provede následující:

    • Parametry:

      • systemPrompt, userPrompta temperature jsou hlavními parametry, které jsou popsány dříve.
      • Volitelný dataSources parametr podporuje funkci Azure Bring Your Own Data, která se bude probírat dále v tomto kurzu.
    • Kontrola proměnných prostředí:

      • Funkce ověří přítomnost základních proměnných prostředí a vyvolá chybu, pokud nějaké chybí.
    • Objekt konfigurace:

      • Objekt config se vytvoří pomocí hodnot ze .env souboru (OPENAI_API_KEY, OPENAI_ENDPOINT, OPENAI_API_VERSION, OPENAI_MODEL). Tyto hodnoty se používají k vytvoření adresy URL pro volání Azure OpenAI.
    • Instance AzureOpenAI:

      • AzureOpenAI Instance je vytvořena pomocí objektuconfig. Symbol AzureOpenAI je součástí openai balíčku, který by se měl importovat v horní části souboru.
    • Generování dokončení:

      • Funkce chat.completions.create() se volá s následujícími vlastnostmi:
        • model: Určuje model GPT (např. gpt-4o, gpt-3.5-turbo) definovaný v .env souboru.
        • max_tokens: Definuje maximální počet tokenů pro dokončení.
        • temperature: Nastaví teplotu vzorkování. Vyšší hodnoty (např. 0,9) přinášejí kreativní odpovědi, zatímco nižší hodnoty (např. 0) vytvářejí deterministické odpovědi.
        • response_format: Definuje formát odpovědi. Tady je nastavená tak, aby vracela objekt JSON. Další podrobnosti o režimu JSON najdete v referenční dokumentaci k Azure OpenAI.
        • messages: Obsahuje zprávy pro generování dokončování chatu. Tento příklad obsahuje dvě zprávy: jednu ze systému (definování chování a pravidel) a jednu od uživatele (obsahující text výzvy).
    • Návratová hodnota:

      • Funkce vrátí objekt dokončení vygenerovaný službou Azure OpenAI.
  8. Zakomentujte následující řádky funkce getSQLFromNLP() :

    // if (isProhibitedQuery(queryData.sql)) { 
    //     queryData.sql = '';
    // }
    
  9. Uložte openAI.ts. Server rozhraní API automaticky znovu sestaví kód TypeScriptu a restartuje server.

  10. Vraťte se do prohlížeče a zadejte do vstupu Vlastní dotazvšechny názvy tabulek z databáze. Vyberte Spustit dotaz. Zobrazují se názvy tabulek?

  11. Vraťte se k getSQLFromNLP() funkci na serveru nebo openAI.ts a do části výzvy systému přidejte následující pravidlo Rules: a pak soubor uložte.

    - Do not allow the SELECT query to return table names, function names, or procedure names.
    
  12. Vraťte se do prohlížeče a proveďte následující úlohy:

    • Do vstupu Vlastní dotaz zadejte Vybrat všechny názvy tabulek z databáze. Vyberte Spustit dotaz. Zobrazují se názvy tabulek?
    • Zadejte příkaz Vybrat všechny názvy funkcí z databáze. Do vstupu vlastního dotazu a znovu vyberte Spustit dotaz . Zobrazují se názvy funkcí?
  13. OTÁZKA: Bude model vždy dodržovat pravidla, která definujete v příkazovém řádku?

    ODPOVĚĎ: Ne! Je důležité si uvědomit, že modely OpenAI můžou při příležitosti vrátit neočekávané výsledky, které nemusí odpovídat definovaným pravidlům. V kódu je důležité to naplánovat.

  14. Vraťte se na server nebo openAI.ts a vyhledejte isProhibitedQuery() funkci. Toto je příklad kódu po zpracování, který lze spustit po spuštění Azure OpenAI vrátí výsledky. Všimněte si, že vlastnost nastaví sql na prázdný řetězec, pokud jsou v generovaném dotazu SQL vrácena zakázaná klíčová slova. Tím se zajistí, že pokud se z Azure OpenAI vrátí neočekávané výsledky, dotaz SQL se na databázi nespustí.

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

    Poznámka:

    Je důležité si uvědomit, že se jedná pouze o ukázkový kód. Pokud se rozhodnete převést přirozený jazyk na SQL, můžou existovat další zakázaná klíčová slova potřebná k pokrytí konkrétních případů použití. Jedná se o funkci, kterou musíte naplánovat a používat s opatrností, abyste zajistili, že se vrátí a spustí pouze platné dotazy SQL v databázi. Kromě zakázaných klíčových slov budete také muset zohlástit zabezpečení.

  15. Vraťte se na server/openAI.ts a odkomentujte následující kód funkce getSQLFromNLP() . Uložte soubor.

    if (isProhibitedQuery(queryData.sql)) { 
        queryData.sql = '';
    }
    
  16. Odeberte následující pravidlo a systemPrompt soubor uložte.

    - Do not allow the SELECT query to return table names, function names, or procedure names.
    
  17. Vraťte se do prohlížeče, znovu zadejte Výběr všech názvů tabulek z databáze do vstupu Vlastní dotaz a vyberte tlačítko Spustit dotaz .

  18. Zobrazují se nějaké výsledky tabulky? I bez pravidla isProhibitedQuery zakáže kód následného zpracování tento typ dotazu spouštět v databázi.

  19. Jak jsme už zmínili dříve, integrace přirozeného jazyka do SQL v obchodních aplikacích může být pro uživatele docela přínosná, ale přináší vlastní sadu aspektů.

    Výhody:

    • Uživatelsky přívětivost: Díky této funkci je interakce databáze přístupnější uživatelům bez technických odborných znalostí, což snižuje potřebu znalostí SQL a potenciálně urychlit operace.

    • Vyšší produktivita: Obchodní analytici, obchodní analytici, vedoucí pracovníci a další uživatelé, kteří nejsou technickými uživateli, mohou načítat cenné informace z databází, aniž by museli spoléhat na technické odborníky, a tím zvýšit efektivitu.

    • Široká aplikace: Pomocí pokročilých jazykových modelů lze aplikace navrhnout tak, aby vyhovovaly široké škále uživatelů a případů použití.

    Aspekty:

    • Zabezpečení: Jedním z největších obav je zabezpečení. Pokud uživatelé můžou pracovat s databázemi pomocí přirozeného jazyka, musí existovat robustní bezpečnostní opatření, která brání neoprávněnému přístupu nebo škodlivým dotazům. Můžete zvážit implementaci režimu jen pro čtení, abyste uživatelům zabránili v úpravách dat.

    • Ochrana osobních údajů: Určitá data můžou být citlivá a neměla by být snadno přístupná, takže budete muset zajistit, aby byla zajištěna správná ochrana a uživatelská oprávnění.

    • Přesnost: Zpracování přirozeného jazyka se výrazně zlepšilo, ale není dokonalé. Nesprávná interpretace uživatelských dotazů může vést k nepřesným výsledkům nebo neočekávanému chování. Budete muset naplánovat způsob zpracování neočekávaných výsledků.

    • Efektivita: Neexistují žádné záruky, že SQL vrácený z dotazu v přirozeném jazyce bude efektivní. V některých případech se můžou vyžadovat další volání Azure OpenAI, pokud pravidla následného zpracování detekují problémy s dotazy SQL.

    • Školení a přizpůsobení uživatelů: Uživatelé musí být natrénovaní tak, aby správně formulovali své dotazy. I když je to jednodušší než učení SQL, stále může existovat křivka učení.

  20. Několik posledních bodů, které je potřeba zvážit před přechodem na další cvičení:

    • Mějte na paměti, že tady platí "Jen proto, že to neznamená, že byste měli" použít. Před integrací přirozeného jazyka do sql do aplikace používejte extrémní opatrnost a pečlivé plánování. Je důležité pochopit potenciální rizika a naplánovat je.
    • Než použijete tento typ technologie, proberte potenciální scénáře s týmem, správci databází, týmem zabezpečení, zúčastněnými stranami a všemi dalšími relevantními stranami, abyste měli jistotu, že je vhodná pro vaši organizaci. Je důležité prodiskutovat, jestli přirozený jazyk SQL splňuje požadavky na zabezpečení, ochranu osobních údajů a jakékoli další požadavky, které může mít vaše organizace.
    • Zabezpečení by mělo být primárním zájmem a mělo by být součástí procesu plánování, vývoje a nasazení.
    • I když může být přirozený jazyk SQL velmi výkonný, musí do něj přejít pečlivé plánování, aby se zajistilo, že výzvy mají požadovaná pravidla a že je zahrnuta funkce následného zpracování. Naplánujte si další čas na implementaci a otestování tohoto typu funkčnosti a pro scénáře, ve kterých se vrátí neočekávané výsledky.
    • Zákazníci s Azure OpenAI získají možnosti zabezpečení Microsoft Azure a zároveň spouštět stejné modely jako OpenAI. Azure OpenAI nabízí privátní sítě, regionální dostupnost a zodpovědné filtrování obsahu AI. Přečtěte si další informace o datech, ochraně osobních údajů a zabezpečení pro Azure OpenAI.
  21. Seznámili jste se s tím, jak pomocí Azure OpenAI převést přirozený jazyk na SQL a seznámit se s klady a nevýhodami implementace tohoto typu funkcí. V dalším cvičení se dozvíte, jak se dají e-maily a SMS zprávy vygenerovat pomocí Azure OpenAI.

Další krok