Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Zitat "Nur weil Sie nicht bedeuten können, dass Sie nicht bedeuten sollten" ist ein nützlicher Leitfaden, wenn Sie über KI-Funktionen nachdenken. Die natürliche Sprache von Azure OpenAI in SQL ermöglicht Benutzern beispielsweise das Erstellen von Datenbankabfragen in einfachem Englisch, was ein leistungsfähiges Tool sein kann, um ihre Produktivität zu verbessern. Leistungsstärke bedeutet jedoch nicht immer angemessen oder sicher. In dieser Übung wird gezeigt, wie Sie dieses KI-Feature verwenden, während sie wichtige Überlegungen berücksichtigen müssen, bevor Sie sich für die Implementierung entscheiden.
Nachfolgend finden Sie ein Beispiel für eine Abfrage mit natürlicher Sprache, die zum Abrufen von Daten aus einer Datenbank verwendet werden kann:
Get the the total revenue for all companies in London.
Mit den richtigen Eingabeaufforderungen konvertiert Azure OpenAI diese Abfrage in SQL, die verwendet werden kann, um Ergebnisse aus der Datenbank zurückzugeben. Daher können nicht technische Benutzer, einschließlich Business Analysts, Marketers und Führungskräften, wertvolle Informationen aus Datenbanken einfacher abrufen, ohne sich mit einer komplexen SQL-Syntax zu befassen oder auf eingeschränkte Datengrids und Filter zu vertrauen. Dieser optimierte Ansatz kann die Produktivität steigern, indem die Benutzer keine Unterstützung von technischen Experten benötigen.
Diese Übung bietet einen Ausgangspunkt, der Ihnen hilft, zu verstehen, wie natürliche Sprache für SQL funktioniert, Sie zu einigen wichtigen Überlegungen führen, Sie über Vor- und Nachteile nachdenken und Ihnen den Code zeigen, um zu beginnen.
In dieser Übung führen Sie die folgenden Schritte aus:
- Verwenden Sie GPT-Eingabeaufforderungen, um natürliche Sprache in SQL zu konvertieren.
- Experimentieren Sie mit verschiedenen GPT-Eingabeaufforderungen.
- Verwenden Sie die generierte SQL-Datei, um die Zuvor gestartete PostgreSQL-Datenbank abzufragen.
- Gibt Abfrageergebnisse aus PostgreSQL zurück und zeigt sie im Browser an.
Beginnen wir mit dem Experimentieren mit verschiedenen GPT-Eingabeaufforderungen, die zum Konvertieren natürlicher Sprache in SQL verwendet werden können.
Verwenden der natürlichen Sprache zum SQL-Feature
In der vorherigen Übung haben Sie die Datenbank, APIs und Anwendung gestartet. Sie haben die
.env
Datei auch aktualisiert. Wenn Sie diese Schritte nicht abgeschlossen haben, führen Sie die Anweisungen am Ende der Übung aus, bevor Sie fortfahren.Wechseln Sie zurück zum Browser (http://localhost:4200), und suchen Sie den Abschnitt "Benutzerdefinierte Abfrage " der Seite unterhalb des Datagrids. Beachten Sie, dass bereits ein Beispielabfragewert enthalten ist: Abrufen des Gesamtumsatzes für alle Bestellungen. Gruppieren Sie nach Unternehmen, und schließen Sie die Stadt ein.
Wählen Sie die Schaltfläche "Abfrage ausführen " aus. Dadurch wird die Natürliche Sprachabfrage des Benutzers an Azure OpenAI übergeben, die sie in SQL konvertiert. Die SQL-Abfrage wird dann verwendet, um die Datenbank abzufragen und mögliche Ergebnisse zurückzugeben.
Führen Sie die folgende benutzerdefinierte Abfrage aus:
Get the total revenue for Adventure Works Cycles. Include the contact information as well.
Zeigen Sie das Terminalfenster an, in dem der API-Server in Visual Studio Code ausgeführt wird, und beachten Sie, dass die von Azure OpenAI zurückgegebene SQL-Abfrage angezeigt wird. Die JSON-Daten werden von den serverseitigen APIs verwendet, um die PostgreSQL-Datenbank abzufragen. Alle in der Abfrage enthaltenen Zeichenfolgenwerte werden als Parameterwerte hinzugefügt, um SQL-Einfügungsangriffe zu verhindern:
{ "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"] }
Wechseln Sie zurück zum Browser, und wählen Sie "Daten zurücksetzen " aus, um alle Kunden erneut im Datagrid anzuzeigen.
Erkunden der natürlichen Sprache in SQL-Code
Tipp
Wenn Sie Visual Studio Code verwenden, können Sie Dateien direkt öffnen, indem Sie Folgendes auswählen:
- Windows/Linux: STRG+P
- Mac: Cmd + P
Geben Sie dann den Namen der Datei ein, die Sie öffnen möchten.
Hinweis
Ziel dieser Übung ist es, zu zeigen, was mit natürlicher Sprache für SQL-Funktionen möglich ist und wie Sie mit der Verwendung beginnen. Wie bereits erwähnt, ist es wichtig zu diskutieren, ob diese Art von KI für Ihre Organisation geeignet ist, bevor Sie mit einer Implementierung fortfahren. Es ist auch zwingend erforderlich, geeignete Eingabeaufforderungsregeln und Datenbanksicherheitsmaßnahmen zu planen , um unbefugten Zugriff zu verhindern und vertrauliche Daten zu schützen.
Nachdem Sie die natürliche Sprache für das SQL-Feature in Aktion gesehen haben, untersuchen wir, wie sie implementiert wird.
Öffnen Sie die Datei server/apiRoutes.ts , und suchen Sie die
generateSql
Route. Diese API-Route wird von der clientseitigen Anwendung aufgerufen, die im Browser ausgeführt wird und zum Generieren von SQL aus einer Abfrage mit natürlicher Sprache verwendet wird. Nachdem die SQL-Abfrage abgerufen wurde, wird sie verwendet, um die Datenbank abzufragen und Ergebnisse zurückzugeben.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.' }); } });
Beachten Sie die folgenden Funktionen in der
generateSql
Route:- Er ruft den Benutzerabfragewert ab
req.body.prompt
und weist ihn einer Variablen mit dem NamenuserPrompt
zu. Dieser Wert wird in der GPT-Eingabeaufforderung verwendet. - Sie ruft eine
getSQLFromNLP()
Funktion auf, um natürliche Sprache in SQL zu konvertieren. - Sie übergibt die generierte SQL an eine Funktion mit dem Namen
queryDb
, die die SQL-Abfrage ausführt, und gibt Ergebnisse aus der Datenbank zurück.
- Er ruft den Benutzerabfragewert ab
Öffnen Sie die Datei server/openAI.ts im Editor, und suchen Sie die
getSQLFromNLP()
Funktion. Diese Funktion wird von dergeneratesql
Route aufgerufen und wird verwendet, um natürliche Sprache in SQL zu konvertieren.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; }
- Ein
userPrompt
Parameter wird an die Funktion übergeben. DeruserPrompt
Wert ist die vom Benutzer im Browser eingegebene Abfrage der natürlichen Sprache. - A
systemPrompt
definiert den Typ des zu verwendenden KI-Assistenten und Regeln, die befolgt werden sollen. Dies hilft Azure OpenAI dabei, die Datenbankstruktur zu verstehen, welche Regeln angewendet werden sollen, und wie die generierte SQL-Abfrage und -Parameter zurückgegeben werden. - Eine benannte
callOpenAI()
Funktion wird aufgerufen, und diesystemPrompt
WerteuserPrompt
werden an sie übergeben. - Die Ergebnisse werden überprüft, um sicherzustellen, dass in der generierten SQL-Abfrage keine unzulässigen Werte enthalten sind. Wenn unzulässige Werte gefunden werden, wird die SQL-Abfrage auf eine leere Zeichenfolge festgelegt.
- Ein
Sehen wir uns die Systemaufforderung ausführlicher an:
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"] } `;
Der Typ des zu verwendenden KI-Assistenten wird definiert. In diesem Fall eine "natürliche Sprache für SQL-Bot".
Tabellennamen und Spalten in der Datenbank werden definiert. Das allgemeine Schema, das in der Eingabeaufforderung enthalten ist, finden Sie in der Datei "server/db.schema" und sieht wie folgt aus.
- 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)
Tipp
Sie können das Erstellen schreibgeschützter Ansichten in Betracht ziehen, die nur die Datenbenutzer enthalten, die abfragen dürfen, indem Sie eine natürliche Sprache in SQL verwenden.
Eine Regel wird definiert, um Zeichenfolgenwerte in einen parametrisierten Abfragewert zu konvertieren, um SQL-Einfügungsangriffe zu vermeiden.
Eine Regel wird definiert, um immer ein JSON-Objekt mit der SQL-Abfrage und den Darin enthaltenen Parameterwerten zurückzugeben.
Beispielbenutzeraufforderungen und die erwarteten SQL-Abfrage- und Parameterwerte werden bereitgestellt. Dies wird als "wenigen" Lernen bezeichnet. Obwohl LLMs auf große Datenmengen geschult werden, können sie mit nur wenigen Beispielen an neue Aufgaben angepasst werden. Ein alternativer Ansatz ist das "Zero-Shot"-Lernen, bei dem kein Beispiel bereitgestellt wird, und das Modell wird erwartet, dass die richtigen SQL-Abfrage- und Parameterwerte generiert werden.
Die
getSQLFromNLP()
Funktion sendet das System und die Benutzeraufforderungen an eine Funktion mit dem NamencallOpenAI()
, die sich auch in der Datei server/openAI.ts befindet. DiecallOpenAI()
Funktion ermittelt, ob Azure OpenAI in Foundry Models oder der OpenAI-Dienst durch Überprüfung von Umgebungsvariablen aufgerufen werden soll. Wenn ein Schlüssel, Endpunkt und Modell in den Umgebungsvariablen verfügbar sind, wird Azure OpenAI aufgerufen, andernfalls wird OpenAI aufgerufen.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); }
Hinweis
Obwohl wir uns in diesem Lernprogramm auf Azure OpenAI konzentrieren, wenn Sie nur einen
OPENAI_API_KEY
Wert in der env-Datei angeben, verwendet die Anwendung stattdessen OpenAI. Wenn Sie openAI anstelle von Azure OpenAI verwenden, werden in einigen Fällen möglicherweise unterschiedliche Ergebnisse angezeigt.Suchen Sie die
getAzureOpenAICompletion()
Funktion.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; }
Diese Funktion führt folgende Aktionen aus:
Parameter:
-
systemPrompt
,userPrompt
undtemperature
sind die hauptparameter.-
systemPrompt
: Informiert das Azure OpenAI-Modell über seine Rolle und die zu befolgenden Regeln. -
userPrompt
: Enthält die vom Benutzer bereitgestellten Informationen, z. B. Eingaben natürlicher Sprache oder Regeln zum Generieren der Ausgabe. -
temperature
: Bestimmt die Kreativitätsebene der Reaktion des Modells. Ein höherer Wert führt zu kreativeren Ausgaben, während niedrigere Werte (z. B. 0) mehr deterministische Antworten erzeugen.
-
-
Vervollständigung:
- Die Funktionsaufrufe
createAzureOpenAICompletion()
mitsystemPrompt
,userPrompt
undtemperature
zum Generieren eines Abschlusses. - Er extrahiert den Inhalt aus der ersten Auswahl im Abschluss, wobei alle zusätzlichen Leerzeichen gekürzt werden.
- Wenn der Inhalt JSON-ähnliche Strukturen enthält (durch vorhandensein
{
und}
angegeben), extrahiert er den JSON-Inhalt.
- Die Funktionsaufrufe
Protokollierungs- und Rückgabewert:
- Die Funktion protokolliert die Azure OpenAI-Ausgabe in der Konsole.
- Er gibt den verarbeiteten Inhalt als Zeichenfolge zurück.
Suchen Sie die
createAzureOpenAICompletion()
Funktion.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.`); } } }
Diese Funktion führt folgende Aktionen aus:
Parameter:
-
systemPrompt
,userPrompt
undtemperature
sind die wichtigsten Parameter, die weiter oben erläutert werden. - Ein optionaler
dataSources
Parameter unterstützt das Feature "Azure Bring Your Own Data", das weiter unten in diesem Lernprogramm behandelt wird.
-
Umgebungsvariablen überprüfen:
- Die Funktion überprüft das Vorhandensein wesentlicher Umgebungsvariablen und löst einen Fehler aus, falls vorhanden.
Configuration-Objekt:
- Ein
config
Objekt wird mithilfe von Werten aus der.env
Datei (OPENAI_API_KEY
,OPENAI_ENDPOINT
, ,OPENAI_API_VERSION
OPENAI_MODEL
) erstellt. Diese Werte werden verwendet, um die URL für den Aufruf von Azure OpenAI zu erstellen.
- Ein
AzureOpenAI-Instanz:
- Eine Instanz von
AzureOpenAI
wird erstellt (unter Verwendung des Objektsconfig
). DasAzureOpenAI
Symbol ist Teil desopenai
Pakets, das am Anfang der Datei importiert werden soll.
- Eine Instanz von
Generieren eines Abschlusses:
- Die
chat.completions.create()
Funktion wird mit den folgenden Eigenschaften aufgerufen:-
model
: Gibt das GPT-Modell (z. B. gpt-4o, gpt-3.5-turbo) wie in Ihrer.env
Datei definiert an. -
max_tokens
: Definiert die maximale Anzahl von Token für den Abschluss. -
temperature
: Legt die Probenahmetemperatur fest. Höhere Werte (z. B. 0,9) liefern kreativere Antworten, während niedrigere Werte (z. B. 0) mehr deterministische Antworten erzeugen. -
response_format
: Definiert das Antwortformat. Hier wird festgelegt, dass ein JSON-Objekt zurückgegeben wird. Weitere Details zum JSON-Modus finden Sie in der Azure OpenAI-Referenzdokumentation. -
messages
: Enthält die Nachrichten zum Generieren von Chatabschlussen. Dieses Beispiel enthält zwei Meldungen: eine aus dem System (definieren von Verhalten und Regeln) und eine vom Benutzer (die den Eingabeaufforderungstext enthält).
-
- Die
Rückgabewert:
- Die Funktion gibt das von Azure OpenAI generierte Abschlussobjekt zurück.
Kommentieren Sie die folgenden Zeilen in der
getSQLFromNLP()
Funktion aus:// if (isProhibitedQuery(queryData.sql)) { // queryData.sql = ''; // }
Speichern Sie openAI.ts. Der API-Server erstellt den TypeScript-Code automatisch neu und startet den Server neu.
Wechseln Sie zurück zum Browser, und geben Sie "Alle Tabellennamen aus der Datenbank auswählen" in die Eingabe " Benutzerdefinierte Abfrage " ein. Wählen Sie Run Query (Abfrage ausführen) aus. Werden Tabellennamen angezeigt?
Wechseln Sie zurück zur
getSQLFromNLP()
Funktion in Server/openAI.ts , und fügen Sie die folgende Regel in denRules:
Abschnitt der Systemaufforderung ein, und speichern Sie die Datei.- Do not allow the SELECT query to return table names, function names, or procedure names.
Wechseln Sie zurück zum Browser, und führen Sie die folgenden Aufgaben aus:
- Geben Sie "Alle Tabellennamen aus der Datenbank auswählen " in die Eingabe " Benutzerdefinierte Abfrage " ein. Wählen Sie Run Query (Abfrage ausführen) aus. Werden Tabellennamen angezeigt?
- Geben Sie "Alle Funktionsnamen aus der Datenbank auswählen " ein. Geben Sie in die Eingabe "Benutzerdefinierte Abfrage " ein, und wählen Sie erneut "Abfrage ausführen" aus. Werden Funktionsnamen angezeigt?
FRAGE: Folgt ein Modell immer den Regeln, die Sie in der Eingabeaufforderung definieren?
ANTWORT: Nein! Es ist wichtig zu beachten, dass OpenAI-Modelle gelegentlich unerwartete Ergebnisse zurückgeben können, die möglicherweise nicht den von Ihnen definierten Regeln entsprechen. Es ist wichtig, dies in Ihrem Code zu planen.
Wechseln Sie zurück zu Server/openAI.ts , und suchen Sie die
isProhibitedQuery()
Funktion. Dies ist ein Beispiel für nach der Verarbeitung von Code, der ausgeführt werden kann, nachdem Azure OpenAI Ergebnisse zurückgegeben hat. Beachten Sie, dass diesql
Eigenschaft auf eine leere Zeichenfolge festgelegt wird, wenn unzulässige Schlüsselwörter in der generierten SQL-Abfrage zurückgegeben werden. Dadurch wird sichergestellt, dass, wenn unerwartete Ergebnisse aus Azure OpenAI zurückgegeben werden, die SQL-Abfrage nicht für die Datenbank ausgeführt wird.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)); }
Hinweis
Es ist wichtig zu beachten, dass dies nur Democode ist. Möglicherweise sind andere unzulässige Schlüsselwörter erforderlich, um Ihre spezifischen Anwendungsfälle abzudecken, wenn Sie eine natürliche Sprache in SQL konvertieren möchten. Dies ist ein Feature, das Sie mit Bedacht planen und verwenden müssen, um sicherzustellen, dass nur gültige SQL-Abfragen zurückgegeben und für die Datenbank ausgeführt werden. Zusätzlich zu verbotenen Schlüsselwörtern müssen Sie auch die Sicherheit berücksichtigen.
Wechseln Sie zurück zu Server/openAI.ts , und entfernen Sie die Auskommentierung des folgenden Codes in der
getSQLFromNLP()
Funktion. Speichern Sie die Datei.if (isProhibitedQuery(queryData.sql)) { queryData.sql = ''; }
Entfernen Sie die folgende Regel aus
systemPrompt
der Datei, und speichern Sie sie.- Do not allow the SELECT query to return table names, function names, or procedure names.
Wechseln Sie zurück zum Browser, geben Sie alle Tabellennamen aus der Datenbank erneut in die Benutzerdefinierte Abfrageeingabe ein, und wählen Sie die Schaltfläche " Abfrage ausführen " aus.
Werden Tabellenergebnisse angezeigt? Auch ohne die Regel verbietet der Code nach der
isProhibitedQuery
Verarbeitung, dass dieser Abfragetyp für die Datenbank ausgeführt wird.Wie bereits erwähnt, kann die Integration natürlicher Sprache in SQL in Branchenanwendungen für Benutzer von Vorteil sein, aber sie enthält eigene Überlegungen.
Vorteile:
Benutzerfreundlichkeit: Dieses Feature kann Benutzern ohne technische Kenntnisse die Datenbankinteraktion leichter zugänglich machen, wodurch die Notwendigkeit von SQL-Kenntnissen verringert und die Vorgänge möglicherweise beschleunigt werden.
Höhere Produktivität: Geschäftsanalysten, Marketer, Führungskräfte und andere nicht technische Benutzer können wertvolle Informationen aus Datenbanken abrufen, ohne sich auf technische Experten verlassen zu müssen, wodurch die Effizienz erhöht wird.
Breite Anwendung: Mithilfe erweiterter Sprachmodelle können Anwendungen so konzipiert werden, dass sie auf eine breite Palette von Benutzern und Anwendungsfällen ausgerichtet sind.
Überlegungen:
Sicherheit: Einer der größten Bedenken ist Sicherheit. Wenn Benutzer mit Datenbanken mit natürlicher Sprache interagieren können, müssen robuste Sicherheitsmaßnahmen vorhanden sein, um unbefugten Zugriff oder böswillige Abfragen zu verhindern. Sie können erwägen, einen schreibgeschützten Modus zu implementieren, um zu verhindern, dass Benutzer Daten ändern.
Datenschutz: Bestimmte Daten sind möglicherweise vertraulich und sollten nicht leicht zugänglich sein, daher müssen Sie sicherstellen, dass angemessene Garantien und Benutzerberechtigungen vorhanden sind.
Genauigkeit: Während die Verarbeitung natürlicher Sprachen erheblich verbessert wurde, ist sie nicht perfekt. Falschinterpretation von Benutzerabfragen kann zu ungenauen Ergebnissen oder unerwartetem Verhalten führen. Sie müssen planen, wie unerwartete Ergebnisse behandelt werden.
Effizienz: Es gibt keine Garantien, dass die von einer Abfrage mit natürlicher Sprache zurückgegebene SQL effizient ist. In einigen Fällen sind möglicherweise zusätzliche Aufrufe an Azure OpenAI erforderlich, wenn nach der Verarbeitung Regeln Probleme mit SQL-Abfragen erkennen.
Schulung und Benutzeranpassung: Benutzer müssen geschult werden, um ihre Abfragen richtig zu formulieren. Obwohl es einfacher ist, SQL zu erlernen, kann es immer noch eine Lernkurve geben.
Einige abschließende Punkte, die Sie berücksichtigen sollten, bevor Sie mit der nächsten Übung fortfahren:
- Denken Sie daran, dass "Nur weil Sie nicht meinen sollten" hier gilt. Verwenden Sie extreme Vorsicht und sorgfältige Planung, bevor Sie natürliche Sprache in SQL in eine Anwendung integrieren. Es ist wichtig, die potenziellen Risiken zu verstehen und sie zu planen.
- Bevor Sie diese Art von Technologie verwenden, besprechen Sie potenzielle Szenarien mit Ihrem Team, Datenbankadministratoren, Sicherheitsteam, Projektbeteiligten und anderen relevanten Parteien, um sicherzustellen, dass sie für Ihre Organisation geeignet ist. Es ist wichtig zu besprechen, ob die natürliche Sprache sql Sicherheit, Datenschutz und andere Anforderungen erfüllt, die Ihre Organisation möglicherweise eingerichtet hat.
- Sicherheit sollte ein Hauptanliegen sein und in den Planungsprozess, die Entwicklung und den Bereitstellungsprozess integriert werden.
- Während die natürliche Sprache in SQL sehr leistungsfähig sein kann, müssen sie sorgfältig geplant werden, um sicherzustellen, dass Eingabeaufforderungen über erforderliche Regeln verfügen und dass die Funktionalität nach der Verarbeitung enthalten ist. Planen Sie zusätzliche Zeit, um diese Art von Funktionalität zu implementieren und zu testen, und berücksichtigen Sie Szenarien, in denen unerwartete Ergebnisse zurückgegeben werden.
- Mit Azure OpenAI erhalten Kunden die Sicherheitsfunktionen von Microsoft Azure, wobei sie die gleichen Modelle wie OpenAI ausführen. Azure OpenAI bietet private Netzwerke, regionale Verfügbarkeit und verantwortungsvolle KI-Inhaltsfilterung. Erfahren Sie mehr über Daten, Datenschutz und Sicherheit für Azure OpenAI.
Sie haben jetzt erfahren, wie Sie Azure OpenAI verwenden, um natürliche Sprache in SQL zu konvertieren, und erfahren Sie mehr über die Vor- und Nachteile der Implementierung dieser Art von Funktionalität. In der nächsten Übung erfahren Sie, wie E-Mail- und SMS-Nachrichten mithilfe von Azure OpenAI generiert werden können.