Перейти до вмісту

Generative AI в ABAP Cloud

Generative AI в ABAP Cloud — механізм викликати large language models (LLM) з ABAP-коду через released API. Головний фреймворк — ABAP AI SDK, інтегрований з Intelligent Scenario Lifecycle Management (ISLM). Ти не конфігуруєш LLM-ключ у ABAP — замість цього адміністратор створює intelligent scenario (ABAP репо-обʼєкт) та intelligent scenario model (прив’язку до конкретного LLM), а ти у коді посилаєшся на імʼя сценарію і викликаєш LLM через фабрику.

Сторінка актуальна тільки для ABAP Cloud (BTP ABAP Environment + S/4HANA Cloud). У Standard ABAP цих released API немає.

  1. Адмін-частина (її робить базис, не розробник):
    • Підключити генеративний сервіс на BTP.
    • Створити intelligent scenario (ABAP репо-обʼєкт).
    • Створити intelligent scenario model — прив’язку сценарію до конкретної моделі LLM.
  2. Розробницька частина:
    • Створити або використати існуючий prompt template (включений в intelligent scenario model).
    • Викликати completion API з коду.

У прикладах використовуються демо-імена ZDEMO_ABAP_INT_SCEN (сценарій), ZDEMO_ABAP_INT_SCEN_MODEL (модель) і ZDEMO_PROMPT_TEMPLATE (template).

TRY.
FINAL(ai_api) = cl_aic_islm_compl_api_factory=>get( )->create_instance( 'ZDEMO_ABAP_INT_SCEN' ).
FINAL(result) = ai_api->execute_for_string( `Розкажи анекдот.` ).
FINAL(completion) = result->get_completion( ).
CATCH cx_aic_api_factory cx_aic_completion_api INTO FINAL(error).
FINAL(error_text) = error->get_text( ).
ENDTRY.

Три кроки: фабрика → створення instance → виклик з промптом. Результат — обʼєкт IF_AIC_COMPLETION_API_RESULT з методами get_completion, get_prompt_token_count, тощо.

Налаштування параметрів

Section titled “Налаштування параметрів”

Температура, max tokens, інші параметри — через get_parameter_setter( ):

FINAL(params) = ai_api->get_parameter_setter( ).
params->set_maximum_tokens( 500 ).
params->set_temperature( '0.5' ). " значення від 0 до 1
FINAL(result) = ai_api->execute_for_string( `Що таке ABAP?` ).

Коли треба кілька повідомлень у контексті (system + user + assistant + user) — через message container:

FINAL(messages) = ai_api->create_message_container( ).
messages->set_system_role( `Ти професійний перекладач.` ).
messages->add_user_message( `Можеш перекладати з німецької англійською?` ).
messages->add_assistant_message( `Так.` ).
messages->add_user_message( `Переклади: "Entschuldigung, wie komme ich zum Bahnhof?"` ).
FINAL(answer) = ai_api->execute_for_messages( messages )->get_completion( ).

Це дозволяє few-shot prompting і підтримку ролі системного промпту.

Коли prompt централізується через intelligent scenario model (для перекладу, governance, повторного використання):

FINAL(tpl) = cl_aic_islm_prompt_tpl_factory=>get( )->create_instance(
islm_scenario = 'ZDEMO_ABAP_INT_SCEN'
template_id = 'ZDEMO_PROMPT_TEMPLATE' ).
FINAL(prompt) = tpl->get_prompt( ). " підставляє параметри, якщо є
FINAL(msgs) = ai_api->create_message_container( ).
msgs->set_system_role( prompt ).
msgs->add_user_message( `... user input ...` ).
FINAL(answer) = ai_api->execute_for_messages( msgs )->get_completion( ).

Якщо template приймає параметри — передавай їх через get_prompt( parameters = ... ).

IF_AIC_COMPLETION_API_RESULT дає не тільки текст:

FINAL(result) = ai_api->execute_for_string( `...` ).
DATA(completion) = result->get_completion( ).
DATA(prompt_tokens) = result->get_prompt_token_count( ).
DATA(output_tokens) = result->get_completion_token_count( ).
DATA(total_tokens) = result->get_total_token_count( ).
DATA(runtime_ms) = result->get_runtime_ms( ).

Використовуй для моніторингу вартості і швидкості.

Три типові exception-класи:

ExceptionКоли
CX_AIC_API_FACTORYСценарій не існує, модель не активована, немає прав
CX_AIC_COMPLETION_APIПомилка під час виклику LLM (timeout, rate limit, provider error)
CX_AIC_PROMPT_TEMPLATETemplate не знайдено або проблеми з параметрами

Завжди обгортай у TRY/CATCH — мережеві/квотні помилки неминучі.

Окрема гілка — Joule for Developers (AI-асистент всередині ADT для генерації CDS, BDL, класів з тексту). Це не runtime, а dev-time інструмент, на відміну від ABAP AI SDK, який викликається з коду.

Адаптовано з 30_Generative_AI.md (Apache 2.0). Повний перелік нюансів — в оригіналі.