GLM - китайская нейросеть с хорошими ценами на API за токены + 20м токенов дает на входе бесплатно.
В феврале 2026 вышла GLM-5 (но в пиковые часы есть замедления).
В этой статье научимся подключать профиль GLM в нашу подсистему iachat - т.е. создаем провайдера для нейросети GLM.
Инструкцию можно спросить у самого z.ai (их ИИ чат).
Регистрируемся на сайте https://open.bigmodel.cn/ по номеру телефона (есть там нюансы с прохождением капчи на китайском).
Затем в кабинете переходим в API Key и создаем новый ключ.
Также рекомендуется в профиле сразу создать пароль, чтобы в будущем входить по логину (нюанс - это телефон без +7) и паролю.
В /asapi пробуем создать тестовый метод API - Post, content-type application/json
URL - https://open.bigmodel.cn/api/paas/v4/chat/completions
Http Header = Authorization=Bearer __TOKEN__
Post body
{
"model": "glm-4-plus",
"messages": [
{
"role": "user",
"content": "Напиши короткий стих про искусственный интеллект."
},
{
"role": "system",
"content": "Отвечай максимально кратко. Не приводи никаких пояснений, рассуждений или промежуточных выводов. Выдай только конечный результат."
}
]
}
Model может быть glm-4, glm-4-flash, glm-5 (самая продвинутая, но и бывают замедления).
Если выдается нужный отклик, то переходим к созданию метода API.
Делаем на /asapi исходящий метод glm1 (POST).
Токен кладем в /settings с кодом glmToken
CREATE PROCEDURE [dbo].[api_glm1_request]
@parameters ExtendedDictionaryParameter READONLY, -- (Key, Value2)
@username nvarchar(32) -- current site user
AS
BEGIN
declare @text nvarchar(max) = (select value2 from @parameters where [key]='text')
declare @systemPrompt nvarchar(max) = (select value2 from @parameters where [key]='systemPrompt')
declare @profile nvarchar(max) = (select value2 from @parameters where [key]='profile')
declare @url nvarchar(max) = 'https://open.bigmodel.cn/api/paas/v4/chat/completions'
declare @token nvarchar(max) = dbo.as_setting('glmToken', '')
declare @g uniqueidentifier = (select try_convert(uniqueidentifier, value2) from @parameters where [key]='g')
declare @profileID int = (select id from as_apiProfiles where code = @profile)
declare @commands nvarchar(max) = ''
select @commands = @commands + isnull(prompt, '') + char(10) from as_apiProfileCommands
where profileID = @profileID and len(prompt)>3 and isActive = 1
if(len(@commands)>4) begin
set @systemPrompt = @commands + ' В остальных случаях не используй JSON с полем type. ' + @systemPrompt
end
declare @json nvarchar(max) = (
select 'glm-4-plus' model,
0.7 temperature,
(
select role, content from (
/*
это если нужно историю запросов зацепить для чата
select top 10 'user' role, request content, created dt from as_apiProfileLog
where profileID = @profileID and g <>@g order by id desc
union
select top 10 'assistant' role, response content, dateadd(second, 5, created) dt from as_apiProfileLog
where profileID = @profileID and g <>@g and len(request)>0
order by id desc
union
*/
select 'system' role, isnull(@systemPrompt, '') content, dateadd(ms, -200, getdate()) dt where len(@systemPrompt)>4
union
select 'user' role, isnull(@text, '') content, getdate() dt ) t1
order by dt
FOR JSON PATH) messages
for JSON PATH,WITHOUT_ARRAY_WRAPPER
)
-- SELECT 1 Msg, Result, Url (outer request url)
select '' Msg, 1 Result, @url Url, '' ContentType,
'' Certpath, '' CertPass, '' RequestParameterForResponse, 0 Timeout
-- SELECT 2 PARAMETERS - request parameters
select 'Authorization' name, 'Bearer ' + @token value, 'header' [type]
union
select 'json' name, @json value, 'json' [type]
END
CREATE PROCEDURE [dbo].[api_glm1_response]
@response nvarchar(max),
@parameters ExtendedDictionaryParameter READONLY, --(Key, Value2 - same as in request)
@username nvarchar(32)
AS
BEGIN
declare @g uniqueidentifier = (select try_convert(uniqueidentifier, value2) from @parameters where [key]='g')
declare @resp nvarchar(max) = @response
declare @tokens int = 0
if(ISJSON(@response) =1) begin
declare @t table (content nvarchar(max))
insert into @t
SELECT content FROM OPENJSON(@response, '$.choices')
WITH (
content NVARCHAR(MAX) '$.message.content'
)
declare @messages nvarchar(max) = ''
select @messages = @messages + isnull(content, '') + char(10)+ char(10) from @t
select @resp = @messages
set @tokens = JSON_VALUE(@response, '$.usage.total_tokens')
declare @msg nvarchar(max) = ''
-- обработка команды, если она есть в JSON
exec ai_processCommand
@s = @resp,
@ai = 'glm',
@username = @username,
@parameters = @parameters,
@msg = @msg OUTPUT
if(len(@msg)>0) set @resp = @resp + char(10)+ '
---
## Система:
'+ @msg
end
update as_apiProfileLog
set response = @resp,
jsonResponse = @response,
tokens = @tokens
where g = @g
-- SELECT 1
select '' Msg, 1 Result, @response Response
END
Все эти нюансы в процедурах нужны для поддержки подсистемы aichat (хранение запросов к ИИ и выдача результатов пользователям по профилям ИИ).
В /chatapiprofiles создаем новый профиль glm1 и в его настройках прописываем метод API glm1.
Далее этот профиль можно будет задействовать в формах отправки запросов ИИ, либо просто использовать чаты в /chat с нужным профилем.