Интеграция с GLM AI

Введение

GLM - китайская нейросеть с хорошими ценами на API за токены + 20м токенов дает на входе бесплатно. 

В феврале 2026 вышла GLM-5 (но в пиковые часы есть замедления). 

В этой статье научимся подключать профиль GLM в нашу подсистему  iachat - т.е. создаем провайдера для нейросети GLM. 

Получение API токена

Инструкцию можно спросить у самого z.ai (их ИИ чат).

Регистрируемся на сайте https://open.bigmodel.cn/ по номеру телефона (есть там нюансы с прохождением капчи на китайском). 

Затем в кабинете переходим в API Key и создаем новый ключ.

Также рекомендуется в профиле сразу создать пароль, чтобы в будущем входить по логину (нюанс - это телефон без +7) и паролю. 

Пробы подключения к API 

В /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.

Создание провайдера API 

Делаем на /asapi исходящий метод glm1 (POST).

Токен кладем в /settings с кодом glmToken

Процедура request метода API

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

Процедура request для метода API

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 с нужным профилем.

Страница-источник на сайте falconspace.ru