Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Si applica a: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
Crea un oggetto modello esterno che contiene la posizione, il metodo di autenticazione e lo scopo di un endpoint di inferenza del modello di intelligenza artificiale.
Sintassi
Convenzioni relative alla sintassi Transact-SQL
CREATE EXTERNAL MODEL external_model_object_name
[ AUTHORIZATION owner_name ]
WITH
( LOCATION = '<prefix>://<path>[:<port>]'
, API_FORMAT = '<OpenAI, Azure OpenAI, etc>'
, MODEL_TYPE = EMBEDDINGS
, MODEL = 'text-embedding-model-name'
[ , CREDENTIAL = <credential_name> ]
[ , PARAMETERS = '{"valid":"JSON"}' ]
[ , LOCAL_RUNTIME_PATH = 'path to the ONNX Runtime files' ]
);
Argomenti
external_model_object_name
Specifica il nome definito dall'utente per il modello esterno. Il nome deve essere univoco all'interno del database.
owner_name
Specifica il nome dell'utente o del ruolo proprietario del modello esterno. Se non specifichi questo argomento, l'utente attuale diventa il proprietario. A seconda dei permessi e dei ruoli, potresti dover concedere permessi espliciti agli utenti per utilizzare modelli esterni specifici.
UBICAZIONE
Fornisce il protocollo di connettività e il percorso dell'endpoint di inferenza del modello di intelligenza artificiale.
API_FORMAT
Formato del messaggio API per il provider di endpoint di inferenza del modello di intelligenza artificiale.
I valori accettati sono:
Azure OpenAIOpenAIOllamaONNX Runtime
TIPO_DI_MODULO
Il tipo di modello accessibile dalla posizione finale di inferenza del modello AI.
I valori accettati sono:
EMBEDDINGS
MODELLO
Modello specifico ospitato dal provider di intelligenza artificiale. Ad esempio, text-embedding-ada-002, text-embedding-3-large o o3-mini.
CREDENZIALE
Specifica l'oggetto DATABASE SCOPED CREDENTIAL utilizzato con l'endpoint di inferenza del modello AI. Per ulteriori informazioni sui tipi di credenziali accettati e sulle regole di denominazione, consulta sp_invoke_external_rest_endpoint o la sezione Osservazioni di questo articolo.
PARAMETRI
Una stringa JSON valida che contiene parametri di runtime da aggiungere al messaggio di richiesta endpoint di inferenza del modello AI. Per esempio:
'{ "dimensions": 1536 }'
LOCAL_RUNTIME_PATH
LOCAL_RUNTIME_PATH specifica la directory sull'istanza locale di SQL Server dove si trovano gli eseguibili ONNX.
Autorizzazioni
Creazione e modifica di modelli esterni
Richiede ALTER ANY EXTERNAL MODEL o CREATE EXTERNAL MODEL l'autorizzazione del database.
Per esempio:
GRANT CREATE EXTERNAL MODEL TO [<PRINCIPAL>];
O:
GRANT ALTER ANY EXTERNAL MODEL TO [<PRINCIPAL>];
Concessioni di modelli esterni
Per usare un modello esterno in una funzione di intelligenza artificiale, è necessario concedere a EXECUTE un'entità di sicurezza la possibilità.
Per esempio:
GRANT EXECUTE ON EXTERNAL MODEL::MODEL_NAME TO [<PRINCIPAL>];
GO
Conteggio tentativi
Se la chiamata incorporamenti rileva codici di stato HTTP che indicano problemi temporanei, è possibile configurare la richiesta per riprovare automaticamente. Per specificare il numero di tentativi, aggiungere il codice JSON seguente a in PARAMETERS in EXTERNAL MODEL. Deve <number_of_retries> essere un numero intero compreso tra zero (0) e dieci (10), inclusi e non può essere NULL o negativo.
{ "sql_rest_options": { "retry_count": <number_of_retries> } }
Ad esempio, per impostare il retry_count a 3, usa la seguente stringa JSON:
{ "sql_rest_options": { "retry_count": 3 } }
Numero di tentativi con altri parametri
Puoi combinare il conteggio dei tentativi con altri parametri purché la stringa JSON sia valida.
{ "dimensions": 725, "sql_rest_options": { "retry_count": 5 } }
Osservazioni:
HTTPS e TLS
Per il LOCATION parametro, sono supportati solo gli endpoint di inferenza del modello AI configurati per usare HTTPS con il protocollo di crittografia TLS.
Formati di API accettati e tipi di modello
Le sezioni seguenti illustrano i formati API accettati per ciascun MODEL_TYPE.
API_FORMAT per EMBEDDINGS
Questa tabella delinea i formati API e le strutture endpoint URL per il EMBEDDINGS tipo di modello. Per visualizzare strutture di payload specifiche, usare il collegamento nella colonna Formato API.
| Formato API | Formato percorso percorso |
|---|---|
| Azure OpenAI | https://{endpoint}/openai/deployments/{deployment-id}/embeddings?api-version={date} |
| OpenAI | https://{server_name}/v1/embeddings |
| Ollama | https://localhost:{port}/api/embed |
Creare endpoint di incorporamento
Per altre informazioni sulla creazione di endpoint di incorporamento, usare questi collegamenti per il provider di endpoint di inferenza del modello di intelligenza artificiale appropriato:
Regole del nome delle credenziali per un modello esterno
Il modello creato DATABASE SCOPED CREDENTIAL utilizzato da un modello esterno deve seguire queste regole:
Deve essere un URL valido
Il dominio URL deve essere uno di quei domini inclusi nella lista di permessi.
L'URL non deve contenere una stringa di query
Protocollo + nome di dominio completo (FQDN) dell'URL chiamato deve corrispondere al protocollo e al nome FQDN del nome della credenziale
Ogni parte del percorso URL chiamato deve corrispondere completamente alla rispettiva parte del percorso URL nel nome delle credenziali.
La credenziale deve indicare un percorso più generico dell'URL della richiesta. Ad esempio, una credenziale creata per path
https://northwind.azurewebsite.net/customersnon può essere usata per l'URLhttps://northwind.azurewebsite.net.
Regole di confronto e nome credenziali
La sezione 6.2.2.1 dell'RFC 3986 afferma che "Quando un URI utilizza componenti della sintassi generica, si applicano sempre le regole di equivalenza della sintassi dei componenti; ovvero, che lo schema e l'ospite non distinguono la maiuscole." La sezione 2.7.3 della RFC 7230 menziona che "tutte le altre vengono confrontate in modo sensibile alla maiuscolare."
Poiché una regola di collation è impostata a livello di database, la seguente logica si applica per mantenere la regola di collation del database e le regole RFC coerenti. (La regola descritta potrebbe essere potenzialmente più restrittiva rispetto alle regole RFC, ad esempio se il database è impostato per utilizzare una collazione a seconda delle mazze e minuscole e minuscoli.)
Controllare se l'URL e la corrispondenza delle credenziali usano la RFC, ovvero:
- Controllare lo schema e l'host usando regole di confronto senza distinzione tra maiuscole e minuscole (
Latin1_General_100_CI_AS_KS_WS_SC) - Verificare che tutti gli altri segmenti dell'URL vengano confrontati in regole di confronto con distinzione tra maiuscole e minuscole (
Latin1_General_100_BIN2)
- Controllare lo schema e l'host usando regole di confronto senza distinzione tra maiuscole e minuscole (
Verificare che l'URL e le credenziali corrispondano usando le regole di confronto del database (e senza eseguire alcuna codifica URL).
Identità gestita
Per utilizzare l'identità gestita dell'host Arc/VM come credenziale a livello di database in SQL Server 2025 (17.x), devi abilitare l'opzione utilizzando sp_configure con un utente che abbia ottenuto il permesso a livello server ALTER SETTINGS.
EXECUTE sp_configure 'allow server scoped db credentials', 1;
RECONFIGURE WITH OVERRIDE;
SCHEMABINDING
Le viste create con SCHEMABINDING questo riferimento fanno riferimento a un modello esterno (come un'istruzione SELECT che usa AI_GENERATE_EMBEDDINGS) non possono essere eliminate, e il Database Engine genera un errore. Per rimuovere le dipendenze che fanno riferimento a un modello esterno, devi prima modificare o eliminare la definizione di vista.
Vista del catalogo
Puoi visualizzare i metadati dei modelli esterni interrogando la vista del catalogo sys.external_models . Devi avere accesso a un modello per visualizzare i suoi metadati.
SELECT *
FROM sys.external_models;
Esempi con endpoint remoti
Creare un MODELLO ESTERNO con Azure OpenAI usando l'identità gestita
Questo esempio crea un modello esterno di questo EMBEDDINGS tipo utilizzando Azure OpenAI e utilizza Managed Identity per l'autenticazione.
In SQL Server 2025 (17.x) e versioni successive, devi collegare il tuo SQL Server ad Azure Arc e abilitare l'identità gestita primaria.
Importante
Se utilizzi Managed Identity con Azure OpenAI e SQL Server 2025 (17.x), il ruolo di Contributor OpenAI dei Servizi Cognitivi deve essere assegnato all'identità gestita assegnata al sistema di SQL Server abilitata da Azure Arc. Per ulteriori informazioni, consulta Controllo di accesso basato sui ruoli per Azure OpenAI in Azure AI Foundry Models.
Crea credenziali di accesso ad Azure OpenAI usando un'identità gestita:
CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
WITH IDENTITY = 'Managed Identity', secret = '{"resourceid":"https://cognitiveservices.azure.com"}';
GO
Crea il modello esterno:
CREATE EXTERNAL MODEL MyAzureOpenAIModel
AUTHORIZATION CRM_User
WITH (
LOCATION = 'https://my-azure-openai-endpoint.cognitiveservices.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2024-02-01',
API_FORMAT = 'Azure OpenAI',
MODEL_TYPE = EMBEDDINGS,
MODEL = 'text-embedding-ada-002',
CREDENTIAL = [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
);
Crea un modello esterno con Azure OpenAI usando chiavi API e parametri
Questo esempio crea un modello esterno del EMBEDDINGS tipo utilizzando Azure OpenAI e utilizza API Keys per l'autenticazione. L'esempio usa PARAMETERS anche per impostare il parametro dimensions nell'endpoint su 725.
Crea credenziali di accesso ad Azure OpenAI usando una chiave:
CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
WITH IDENTITY = 'HTTPEndpointHeaders', secret = '{"api-key":"YOUR_AZURE_OPENAI_KEY"}';
GO
Crea il modello esterno:
CREATE EXTERNAL MODEL MyAzureOpenAIModel
AUTHORIZATION CRM_User
WITH (
LOCATION = 'https://my-azure-openai-endpoint.cognitiveservices.azure.com/openai/deployments/text-embedding-3-small/embeddings?api-version=2024-02-01',
API_FORMAT = 'Azure OpenAI',
MODEL_TYPE = EMBEDDINGS,
MODEL = 'text-embedding-3-small',
CREDENTIAL = [https://my-azure-openai-endpoint.cognitiveservices.azure.com/],
PARAMETERS = '{"dimensions":725}'
);
Creare un MODELLO ESTERNO con Ollama e un proprietario esplicito
Questo esempio crea un modello esterno del EMBEDDINGS tipo utilizzando Ollama ospitato localmente per scopi di sviluppo.
CREATE EXTERNAL MODEL MyOllamaModel
AUTHORIZATION AI_User
WITH (
LOCATION = 'https://localhost:11435/api/embed',
API_FORMAT = 'Ollama',
MODEL_TYPE = EMBEDDINGS,
MODEL = 'all-minilm'
);
Creare un MODELLO ESTERNO con OpenAI
Questo esempio crea un modello esterno del EMBEDDINGS tipo utilizzando le credenziali basate su OpenAI API_FORMAT e header HTTP per l'autenticazione.
-- Create access credentials
CREATE DATABASE SCOPED CREDENTIAL [https://openai.com]
WITH IDENTITY = 'HTTPEndpointHeaders', secret = '{"Bearer":"YOUR_OPENAI_KEY"}';
GO
-- Create the external model
CREATE EXTERNAL MODEL MyAzureOpenAIModel
AUTHORIZATION CRM_User
WITH (
LOCATION = 'https://api.openai.com/v1/embeddings',
API_FORMAT = 'OpenAI',
MODEL_TYPE = EMBEDDINGS,
MODEL = 'text-embedding-ada-002',
CREDENTIAL = [https://openai.com]
);
Esempio con ONNX Runtime che funziona localmente
ONNX Runtime è un motore di inferenza open source che consente di eseguire modelli di Machine Learning in locale, rendendolo ideale per l'integrazione delle funzionalità di intelligenza artificiale negli ambienti SQL Server.
Questo esempio ti guida nella configurazione di SQL Server 2025 (17.x) con ONNX Runtime per abilitare la generazione locale di embedded di testo basata su AI locale. Si applica solo in Windows.
Importante
Questa funzionalità richiede l'installazione di Machine Learning Services per SQL Server .
Passaggio 1: Abilitare le funzionalità di anteprima per sviluppatori in SQL Server 2025
Esegui il seguente comando Transact-SQL (T-SQL) per abilitare le funzionalità di anteprima di SQL Server 2025 (17.x) nel database che desideri utilizzare per questo esempio:
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
Passaggio 2: Abilitare il runtime di intelligenza artificiale locale in SQL Server 2025
Abilita runtime di IA esterne eseguendo la seguente query T-SQL:
EXECUTE sp_configure 'external AI runtimes enabled', 1;
RECONFIGURE WITH OVERRIDE;
Passo 3: Configura la libreria di runtime ONNX
Crea una directory sull'istanza SQL Server per contenere i file della libreria ONNX Runtime. In questo esempio viene C:\onnx_runtime usato .
Per creare la directory, è possibile usare i comandi seguenti:
cd C:\
mkdir onnx_runtime
Successivamente, scarica una versione di ONNX Runtime (1.19 o superiore) adatta al tuo sistema operativo. Dopo aver decompresso il download, copiare ( onnxruntime.dll che si trova nella directory lib) nella C:\onnx_runtime directory creata.
Passaggio 4: Configurare la libreria di tokenizzazione
Scaricare e compilare la tokenizers-cpp libreria da GitHub. Dopo aver creato la dll, posizionare il tokenizer nella C:\onnx_runtime directory .
Annotazioni
Verificare che la DLL creata sia denominata tokenizers_cpp.dll
Passaggio 5: Scaricare il modello ONNX
Per iniziare, creare la model directory in C:\onnx_runtime\.
cd C:\onnx_runtime
mkdir model
Questo esempio usa il all-MiniLM-L6-v2-onnx modello, che può essere scaricato da Hugging Face.
Clonare il repository nella C:\onnx_runtime\model directory con il comando git seguente:
Se non è installato, è possibile scaricare git dal collegamento di download seguente o tramite winget (winget install Microsoft.Git)
cd C:\onnx_runtime\model
git clone https://huggingface.co/nsense/all-MiniLM-L6-v2-onnx
Passaggio 6: Impostare le autorizzazioni della directory
Usa il seguente script PowerShell per fornire all'utente MSSQLLaunchpad l'accesso alla directory ONNX Runtime:
$AIExtPath = "C:\onnx_runtime";
$Acl = Get-Acl -Path $AIExtPath
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("MSSQLLaunchpad", "FullControl", "ContainerInherit,ObjectInherit", "None","Allow")
$Acl.AddAccessRule($AccessRule)
Set-Acl -Path $AIExtPath -AclObject $Acl
Passaggio 7: Creare il modello esterno
Esegui la seguente query per registrare il tuo modello ONNX come oggetto modello esterno:
Il valore 'PARAMETERS' utilizzato qui è un segnaposto necessario per SQL Server 2025 (17.x).
CREATE EXTERNAL MODEL myLocalOnnxModel
WITH (
LOCATION = 'C:\onnx_runtime\model\all-MiniLM-L6-v2-onnx',
API_FORMAT = 'ONNX Runtime',
MODEL_TYPE = EMBEDDINGS,
MODEL = 'allMiniLM',
PARAMETERS = '{"valid":"JSON"}',
LOCAL_RUNTIME_PATH = 'C:\onnx_runtime\'
);
-
LOCATIONdovrebbe puntare alla directory che contienemodel.onnxetokenizer.jsonfile. -
LOCAL_RUNTIME_PATHdovrebbe indicare la cartella che contieneonnxruntime.dlletokenizer_cpp.dllfile.
Passaggio 8: Generare incorporamenti
Usa la ai_generate_embeddings funzione per testare il modello eseguendo la seguente query:
SELECT AI_GENERATE_EMBEDDINGS(N'Test Text' USE MODEL myLocalOnnxModel);
Questo comando avvia , AIRuntimeHostcarica le DLL necessarie ed elabora il testo di input.
Il risultato della query precedente è un array di embedding:
[0.320098,0.568766,0.154386,0.205526,-0.027379,-0.149689,-0.022946,-0.385856,-0.039183...]
Abilita il logging del sistema XEvent
Esegui la seguente query per abilitare il logging di sistema per la risoluzione dei problemi.
CREATE EVENT SESSION newevt
ON SERVER
ADD EVENT ai_generate_embeddings_airuntime_trace
(
ACTION (sqlserver.sql_text, sqlserver.session_id)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY = 4096 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY = 30 SECONDS, TRACK_CAUSALITY = ON, STARTUP_STATE = OFF);
GO
ALTER EVENT SESSION newevt ON SERVER STATE = START;
GO
Successivamente, usa questa query e consulta i log di sistema catturati:
SELECT event_data.value('(@name)[1]', 'varchar(100)') AS event_name,
event_data.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
event_data.value('(data[@name = "model_name"]/value)[1]', 'nvarchar(200)') AS model_name,
event_data.value('(data[@name = "phase_name"]/value)[1]', 'nvarchar(100)') AS phase,
event_data.value('(data[@name = "message"]/value)[1]', 'nvarchar(max)') AS message,
event_data.value('(data[@name = "request_id"]/value)[1]', 'nvarchar(max)') AS session_id,
event_data.value('(data[@name = "error_code"]/value)[1]', 'bigint') AS error_code
FROM (SELECT CAST (target_data AS XML) AS target_data
FROM sys.dm_xe_sessions AS s
INNER JOIN sys.dm_xe_session_targets AS t
ON s.address = t.event_session_address
WHERE s.name = 'newevt'
AND t.target_name = 'ring_buffer') AS data
CROSS APPLY target_data.nodes('//RingBufferTarget/event') AS XEvent(event_data);
Pulizia
Per rimuovere l'oggetto modello esterno, esegui la seguente istruzione T-SQL:
DROP EXTERNAL MODEL myLocalOnnxModel;
Per rimuovere le autorizzazioni della directory, eseguire i comandi di PowerShell seguenti:
$Acl.RemoveAccessRule($AccessRule)
Set-Acl -Path $AIExtPath -AclObject $Acl
Eliminare infine la C:/onnx_runtime directory.
Contenuti correlati
- ALTERARE IL MODELLO ESTERNO (Transact-SQL)
- DROP MODELLO ESTERNO (Transact-SQL)
- AI_GENERATE_EMBEDDINGS (Transact-SQL)
- AI_GENERATE_CHUNKS (Transact-SQL)
- sys.external_models
- Creare e distribuire una risorsa Azure OpenAI in Azure AI Foundry Models
- Opzioni di configurazione del server
- Controllo degli accessi in base al ruolo per Azure OpenAI nei modelli di Azure AI Foundry