Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к: 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