Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Относится к: SQL Server 2025 (17.x)
Azure SQL Database
SQL Database в Microsoft Fabric
Создает внешний объект модели, содержащий расположение, метод проверки подлинности и назначение конечной точки вывода модели ИИ.
Синтаксис
Соглашения о синтаксисе 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' ]
);
Аргументы
external_model_object_name
Задает определяемое пользователем имя внешней модели. В базе данных это имя должно быть уникальным.
owner_name
Указывает имя пользователя или роли, которая владеет внешней моделью. Если не указать этот аргумент, текущий пользователь становится владельцем. В зависимости от разрешений и ролей, возможно, потребуется предоставить пользователям явное разрешение на использование определённых внешних моделей.
МЕСТОПОЛОЖЕНИЕ
Предоставляет протокол подключения и путь к конечной точке вывода модели ИИ.
Формат_API
Формат сообщения API для поставщика конечной точки вывода модели ИИ.
Допустимые значения:
Azure OpenAIOpenAIOllamaONNX Runtime
MODEL_TYPE
Тип модели, к которой можно получить доступ из AI-модели, определяет местоположение конечной точки.
Допустимые значения:
EMBEDDINGS
МОДЕЛЬ
Конкретная модель, размещенная поставщиком ИИ. Например, text-embedding-ada-002, text-embedding-3-large или o3-mini.
УЧЁТНЫЕ ДАННЫЕ
Задаёт DATABASE SCOPED CREDENTIAL объект, используемый с конечной точкой вывода модели ИИ. Для получения дополнительной информации о типах принятых удостоверений и правилах именования смотрите sp_invoke_external_rest_endpoint или раздел «Замечания » в этой статье.
ПАРАМЕТРЫ
Действительная JSON-строка, содержащая параметры выполнения для добавления в сообщение запроса конечной точки модели AI. Рассмотрим пример.
'{ "dimensions": 1536 }'
LOCAL_RUNTIME_PATH
LOCAL_RUNTIME_PATH указывает каталог на локальном экземпляре SQL Server, где находятся исполняемые файлы ONNX Runtime.
Разрешения
Создание и изменение внешней модели
Требуется ALTER ANY EXTERNAL MODEL или CREATE EXTERNAL MODEL разрешение базы данных.
Рассмотрим пример.
GRANT CREATE EXTERNAL MODEL TO [<PRINCIPAL>];
Или:
GRANT ALTER ANY EXTERNAL MODEL TO [<PRINCIPAL>];
Предоставление внешних моделей
Чтобы использовать внешнюю модель в функции ИИ, субъекту необходимо предоставить ему возможность EXECUTE .
Рассмотрим пример.
GRANT EXECUTE ON EXTERNAL MODEL::MODEL_NAME TO [<PRINCIPAL>];
GO
Счетчик повторов
Если вызов внедрения обнаруживает коды состояния HTTP, указывающие на временные проблемы, можно настроить запрос для автоматического повтора. Чтобы указать количество повторных попыток, добавьте следующий код JSON в поле .PARAMETERSEXTERNAL MODEL. Должно <number_of_retries> быть целое число от нуля (0) до десяти (10), включительно и не может быть NULL или отрицательным.
{ "sql_rest_options": { "retry_count": <number_of_retries> } }
Например, чтобы установить 3 retry_count , используйте следующую JSON-строку:
{ "sql_rest_options": { "retry_count": 3 } }
Число повторных попыток с другими параметрами
Вы можете комбинировать количество повторных попыток с другими параметрами, если строка JSON валидна.
{ "dimensions": 725, "sql_rest_options": { "retry_count": 5 } }
Замечания
HTTPS и TLS
Для параметра LOCATION поддерживаются только конечные точки вывода модели ИИ, настроенные на использование HTTPS с протоколом шифрования TLS.
Допустимые форматы API и типы моделей
В следующих разделах описаны принятые форматы API для каждого MODEL_TYPE.
API_FORMAT для EMBEDDINGS
В этой таблице представлены форматы API и структуры конечных точек URL для типа EMBEDDINGS модели. Чтобы просмотреть определенные структуры полезных данных, используйте ссылку в столбце "Формат API".
| Формат API | Формат пути расположения |
|---|---|
| Azure OpenAI | https://{endpoint}/openai/deployments/{deployment-id}/embeddings?api-version={date} |
| OpenAI | https://{server_name}/v1/embeddings |
| Ollama | https:localhost://{port}/api/embed |
Создание конечных точек внедрения
Дополнительные сведения о создании конечных точек внедрения используйте эти ссылки для соответствующего поставщика конечных точек вывода модели ИИ:
Правила имени учетных данных для внешней модели
Созданная DATABASE SCOPED CREDENTIAL модель, используемая внешней моделью, должна следовать следующим правилам:
Должен быть допустимым URL-адресом
Домен URL должен быть одним из тех доменов, включённых в список разрешений.
URL-адрес не должен содержать строку запроса
Протокол + полное доменное имя (FQDN) вызываемого URL-адреса должно соответствовать протоколу +FQDN имени учетных данных.
Каждая часть вызываемого пути URL должна полностью совпадать с соответствующей частью пути URL в имени учетных данных.
Учетная запись должна указывать на более общий путь, чем URL запроса. Например, учётная запись, созданная для пути
https://northwind.azurewebsite.net/customers, не может быть использована для URLhttps://northwind.azurewebsite.net.
Правила параметров сортировки и имени учетных данных
Раздел 6.2.2.1 RFC 3986 гласит, что «Когда URI использует компоненты общего синтаксиса, всегда применяются правила эквивалентности синтаксиса компонентов; а именно, что схема и ведущий не чувствительны к регистру.» Раздел 2.7.3 RFC 7230 отмечает, что «все остальные сравниваются с учётом регистра».
Поскольку правило сопоставления устанавливается на уровне базы данных, применяется следующая логика для поддержания согласованности правила сбора базы данных и правил RFC. (Описанное правило потенциально может быть более ограничительным, чем правила RFC, например, если база данных настроена на использование регистр-чувствительной колляции.)
Проверьте, совпадают ли URL-адреса и учетные данные с помощью RFC, то есть:
- Проверьте схему и узел с помощью нечувствительной сортировки регистра (
Latin1_General_100_CI_AS_KS_WS_SC) - Проверьте все остальные сегменты URL-адреса сравниваются в параметров сортировки с учетом регистра (
Latin1_General_100_BIN2)
- Проверьте схему и узел с помощью нечувствительной сортировки регистра (
Убедитесь, что URL-адрес и учетные данные соответствуют правилам сортировки базы данных (и без кодирования URL-адресов).
Манажируемая идентичность
Чтобы использовать управляемую идентичность хоста Arc/VM в качестве учетной записи на уровне базы данных в SQL Server 2025 (17.x), необходимо включить эту опцию, используя sp_configure с пользователем, которому предоставлено серверное право ALTER SETTINGS.
EXECUTE sp_configure 'allow server scoped db credentials', 1;
RECONFIGURE WITH OVERRIDE;
SCHEMABINDING
Представления, созданные с SCHEMABINDING этой ссылкой на внешнюю модель (например, SELECT оператор с AI_GENERATE_EMBEDDINGS), не могут быть удалены, и Database Engine выдает ошибку. Чтобы убрать зависимости, ссылающиеся на внешнюю модель, сначала нужно изменить или отказаться от определения представления.
Вид в каталоге
Вы можете просмотреть метаданные внешней модели, задавая запросы к sys.external_models каталогу. Для просмотра её метаданных необходимо иметь доступ к модели.
SELECT *
FROM sys.external_models;
Примеры с удаленными конечными точками
Создание ВНЕШНЕЙ МОДЕЛИ с помощью Azure OpenAI с помощью управляемого удостоверения
Этот пример создаёт внешнюю модель типа EMBEDDINGS с помощью Azure OpenAI и использует управляемую идентичность для аутентификации.
В SQL Server 2025 (17.x) и более поздних версиях необходимо подключить ваш SQL Server к Azure Arc и включить основную управляемую идентичность.
Это важно
Если вы используете управляемую идентичность с Azure OpenAI и SQL Server 2025 (17.x), роль Cognitive Services OpenAI Contributor должна быть присвоена системной управляемой идентичности SQL Server, поддерживаемой Azure Arc. Для получения дополнительной информации см . Управление доступом на основе ролей для Azure OpenAI в Azure AI Foundry Models.
Создайте учетные данные доступа к Azure OpenAI с помощью управляемой идентичности:
CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
WITH IDENTITY = 'Managed Identity', secret = '{"resourceid":"https://cognitiveservices.azure.com"}';
GO
Создайте внешнюю модель:
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/]
);
Создайте внешнюю модель с помощью Azure OpenAI, используя ключи API и параметры
В этом примере создаётся внешняя модель этого EMBEDDINGS типа с использованием Azure OpenAI и использует ключи API для аутентификации. В примере также используется PARAMETERS для задания параметра измерения в конечной точке значение 725.
Создайте учетные данные доступа к Azure OpenAI с помощью ключа:
CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
WITH IDENTITY = 'HTTPEndpointHeaders', secret = '{"api-key":"YOUR_AZURE_OPENAI_KEY"}';
GO
Создайте внешнюю модель:
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}'
);
Создание ВНЕШНЕЙ МОДЕЛИ с помощью Ollama и явного владельца
Этот пример создаёт внешнюю модель типа EMBEDDINGS с использованием локально размещенной Ollama для целей разработки.
CREATE EXTERNAL MODEL MyOllamaModel
AUTHORIZATION AI_User
WITH (
LOCATION = 'https://localhost:11435/api/embed',
API_FORMAT = 'Ollama',
MODEL_TYPE = EMBEDDINGS,
MODEL = 'all-minilm'
);
Создание ВНЕШНЕЙ МОДЕЛИ с помощью OpenAI
В этом примере создаётся внешняя модель такого EMBEDDINGS типа, используя учетные данные на основе заголовков OpenAI API_FORMAT и HTTP для аутентификации.
-- 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]
);
Пример с локальным запуском ONNX Runtime
Среда выполнения ONNX — это подсистема вывода с открытым кодом, которая позволяет локально запускать модели машинного обучения, что идеально подходит для интеграции возможностей ИИ в среды SQL Server.
Этот пример поможет вам настроить SQL Server 2025 (17.x) с ONNX Runtime для обеспечения локальной генерации текста на базе ИИ. Она применяется только в Windows.
Это важно
Эта функция требует установки служб машинного обучения SQL Server .
Шаг 1. Включение предварительных версий функций разработчика в SQL Server 2025
Выполните следующую команду Transact-SQL (T-SQL), чтобы включить функции предварительного просмотра SQL Server 2025 (17.x) в базе данных, которую вы хотите использовать для этого примера:
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
Шаг 2. Включение локальной среды выполнения ИИ в SQL Server 2025
Включите внешние AI-серверы выполнения, выполнив следующий запрос T-SQL:
EXECUTE sp_configure 'external AI runtimes enabled', 1;
RECONFIGURE WITH OVERRIDE;
Шаг 3: Настройте библиотеку ONNX Runtime
Создайте каталог на экземпляре SQL Server для хранения файлов библиотеки ONNX Runtime. В этом примере C:\onnx_runtime используется.
Для создания каталога можно использовать следующие команды:
cd C:\
mkdir onnx_runtime
Далее скачайте версию ONNX Runtime (1.19 или выше), подходящую для вашей операционной системы. После распакуйте скачивание, скопируйте onnxruntime.dll (расположенную в каталоге lib) в C:\onnx_runtime созданный каталог.
Шаг 4. Настройка библиотеки токенизации
Скачайте и создайте библиотеку tokenizers-cpp из GitHub. После создания библиотеки DLL поместите токенизатор в C:\onnx_runtime каталог.
Замечание
Убедитесь, что созданная библиотека dll называется tokenizers_cpp.dll
Шаг 5. Скачивание модели ONNX
Начните с создания model каталога в C:\onnx_runtime\.
cd C:\onnx_runtime
mkdir model
В этом примере используется all-MiniLM-L6-v2-onnx модель, которую можно скачать из Hugging Face.
Клонируйте репозиторий в каталог с помощью следующей C:\onnx_runtime\model команды Git :
Если это не установлено, вы можете скачать git со следующей ссылки для скачивания или с помощью winget (winget install Microsoft.Git)
cd C:\onnx_runtime\model
git clone https://huggingface.co/nsense/all-MiniLM-L6-v2-onnx
Шаг 6. Настройка разрешений каталога
Используйте следующий скрипт PowerShell для предоставления пользователю MSSQLLaunchpad доступа к каталогу 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
Шаг 7. Создание внешней модели
Выполните следующий запрос, чтобы зарегистрировать вашу модель ONNX как внешний объект модели:
Значение 'PARAMETERS', используемое здесь, — это временная отметка, необходимая для 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\'
);
-
LOCATIONдолжно указывать на каталог, содержащийmodel.onnxиtokenizer.jsonфайлы. -
LOCAL_RUNTIME_PATHдолжно указывать на каталоги, содержащиеonnxruntime.dllфайлыtokenizer_cpp.dll.
Шаг 8. Создание внедрения
Используйте ai_generate_embeddings функцию для тестирования модели, выполнив следующий запрос:
SELECT AI_GENERATE_EMBEDDINGS(N'Test Text' USE MODEL myLocalOnnxModel);
Эта команда запускает AIRuntimeHostнеобходимые библиотеки DLL и обрабатывает входной текст.
Результатом предыдущего запроса является массив вложенных элементов:
[0.320098,0.568766,0.154386,0.205526,-0.027379,-0.149689,-0.022946,-0.385856,-0.039183...]
Включить логирование системы XEvent
Выполните следующий запрос, чтобы включить системное логирование для устранения неполадок.
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
Далее используйте этот запрос, чтобы посмотреть захваченные системные журналы:
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);
Очистка
Чтобы удалить внешний объект модели, выполните следующий оператор T-SQL:
DROP EXTERNAL MODEL myLocalOnnxModel;
Чтобы удалить разрешения каталога, выполните следующие команды PowerShell:
$Acl.RemoveAccessRule($AccessRule)
Set-Acl -Path $AIExtPath -AclObject $Acl
Наконец, удалите C:/onnx_runtime каталог.
Связанный контент
- ИЗМЕНИТЬ ВНЕШНЮЮ МОДЕЛЬ (Transact-SQL)
- УБРАТЬ ВНЕШНЮЮ МОДЕЛЬ (Transact-SQL)
- AI_GENERATE_EMBEDDINGS (Transact-SQL)
- AI_GENERATE_CHUNKS (Transact-SQL)
- sys.external_models
- Создание и развертывание Azure OpenAI в ресурсе Azure AI Foundry Models
- Параметры конфигурации сервера
- Управление доступом на основе ролей для Azure OpenAI в моделях Azure AI Foundry