Моя вторая публикация и снова на базе https://github.com/vbondarevsky/Connector
В приложенной обработке реализовано получение токена Bearer для обращения к API GigaChat, помещение файла pdf в хранилище GigaChat для последующего анализа и обработки и простой чат вопрос - ответ.
Выкладываю код, он же в приложенной обработке.
Подставляем в функцию Токен() <Authorization key> из кабинета developers.sber.ru
&НаСервере
Функция Токен()
Аутентификация = КоннекторHTTP.НоваяАутентификацияBearer("<Authorization key>");
Также понадобится <id клиента>
Данные = Новый Структура("purpose", "general");
Заголовки = Новый Соответствие;
Заголовки.Вставить("x-client-id", "<id клиента>");
Прилагаю код формы:
&НаКлиенте
Процедура Команда1(Команда)
РеквизитТокен = Токен();
КонецПроцедуры
&НаКлиенте
Процедура Команда2(Команда)
СкормитьПДФ();
КонецПроцедуры
&НаСервере
Функция Токен()
Аутентификация = КоннекторHTTP.НоваяАутентификацияBearer("<Authorization key>");
Данные = Новый Структура("scope", "GIGACHAT_API_PERS");
Заголовки = Новый Соответствие;
Заголовки.Вставить("RqUID",XMLСтрока(Новый УникальныйИдентификатор));
Результат = КоннекторHTTP.КакJSON(КоннекторHTTP.Post("https://ngw.devices.sberbank.ru:9443/api/v2/oauth", Неопределено, Новый Структура("Аутентификация,Заголовки, Данные", Аутентификация, Заголовки, Данные)));
Возврат Результат["access_token"];
КонецФункции
&НаСервере
Процедура СкормитьПДФ()
Аутентификация = КоннекторHTTP.НоваяАутентификацияBearer(Токен());
Файлы = Новый Массив;
ФайлДанных = КоннекторHTTP.НовыйОтправляемыйФайл("file", "d:\test.pdf", Новый ДвоичныеДанные("d:\test.pdf"), "application/pdf");
Файлы.Добавить(ФайлДанных);
Данные = Новый Структура("purpose", "general");
Заголовки = Новый Соответствие;
Заголовки.Вставить("x-client-id", "<id клиента>");
Результат = КоннекторHTTP.Post("https://gigachat.devices.sberbank.ru/api/v1/files", Неопределено, Новый Структура("Файлы,Данные,Аутентификация,Заголовки", Файлы, Данные, Аутентификация, Заголовки));
Ответ = КоннекторHTTP.КакJson(Результат)["id"];
КонецПроцедуры
&НаСервере
Процедура СпроситьИИНаСервере()
ИДФайла = Ответ;
Аутентификация = КоннекторHTTP.НоваяАутентификацияBearer(Токен());
Заголовки = Новый Соответствие;
Заголовки.Вставить("x-client-id", "<id клиента>");
// Определение структуры
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("model", "GigaChat");
Сообщения = Новый Массив;
СообщениеСистемы = Новый Структура;
СообщениеСистемы.Вставить("role", "system");
СообщениеСистемы.Вставить("content", "Ты - пьяный гопник и быдло. Тебе нужно отвечать на все вопросы как будто ты маргинал.");
Сообщения.Add(СообщениеСистемы);
СообщениеПользователя = Новый Структура;
СообщениеПользователя.Вставить("role", "user");
СообщениеПользователя.Вставить("content", ВопросИИ);
//СообщениеПользователя.Вставить("attachments", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИДФайла));
Сообщения.Add(СообщениеПользователя);
СтруктураДанных.Вставить("messages", Сообщения);
// Теперь структура готова к использованию
Результат = КоннекторHTTP.PostJSON("https://gigachat.devices.sberbank.ru/api/v1/chat/completions", СтруктураДанных, Новый Структура("Аутентификация,Заголовки", Аутентификация, Заголовки));
Ответ = Результат["choices"][0]["message"]["content"];
КонецПроцедуры
&НаКлиенте
Процедура СпроситьИИ(Команда)
СпроситьИИНаСервере();
КонецПроцедуры
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.142