Унапредете ги вашите API-ја за да ја снабдуваат ВИ со вистинска деловна логика
Функциите со ВИ стануваат навистина корисни кога можат да дејствуваат според истите деловни правила што го прават остатокот од производот доверлив. Четбот што може да резимира сметка е интересен. Асистент што може точно да објасни фактура, да идентификува доцнење на испорака и да подготви дозволено следно дејство е дел од производот.
Разликата ретко е само во јазичниот модел. Таа е во квалитетот на API-површината зад него.
Ако деловната логика е расфрлана низ контролери, барања до базата на податоци, шаблони и позадински задачи, интеграцијата со ВИ или ќе заобиколи важни правила или ќе стане кревка збирка од посебни случаи. Добро осмислените API-ја ѝ даваат на ВИ ограничен и разбирлив начин да работи со реалниот систем.
Не ѝ давајте на ВИ интерфејс обликуван како база на податоци
Чест прв импулс е да се изложат податоци: клиенти, нарачки, претплати, тикети. Но табелите се детали на имплементацијата, а не деловни можности. Тие не кажуваат кои записи смеат да се прегледуваат, како се пресметуваат вкупните износи или кои премини на состојби се валидни.
Алатката за ВИ треба да бара исход на јазикот на доменот. Споредете ги овие два пристапа:
SELECT * FROM invoices WHERE customer_id = ?getOutstandingBalance(customerId)
Првиот ја изложува внатрешната структура и го принудува повикувачот повторно да го изгради значењето. Вториот враќа деловен одговор произведен според истите правила што се користат на друго место во апликацијата.
Оваа разлика е важна дури и кога ВИ само чита податоци. Салдото може да исклучува спорни фактури, да одразува плаќања што се во тек, да користи правило за валута специфично за клиентот или да крие записи според улогата на корисникот што го поднесува барањето. Тие детали припаѓаат зад API ориентирано кон доменот, а не во промпт или ад хок барање.
Претворете ги деловните можности во експлицитни алатки
Добрите операции наменети за ВИ обично се тесно определени, именувани според деловната намера и лесни за валидација. Наместо една широка операција manageOrder, претпочитајте мал сет како:
findOrdersByReferencegetOrderStatuslistEligibleReturnItemscreateReturnDraftsubmitReturnForApproval
Секоја операција треба да има јасен влезен договор, предвидлив одговор и дефиниран начин на неуспех. Ова е корисно за луѓето, конвенционалните клиенти и системите со ВИ. Нејасноста е скапа: ВИ може да закрепне по грешка при валидација; не може сигурно да заклучи непосочена политика.
На пример, PHP услуга може да централизира дејство наместо да го вградува во HTTP контролер:
final class ReturnDraftService
{
public function create(
User $actor,
Order $order,
array $itemIds
): ReturnDraft {
if (!$actor->can('createReturn', $order)) {
throw new AuthorizationException();
}
$items = $order->eligibleReturnItems($itemIds);
if ($items->isEmpty()) {
throw new DomainException('No eligible items were selected.');
}
return ReturnDraft::fromOrderItems($order, $items);
}
}
Контролерот, веб-корисничкиот интерфејс, процесот од командна линија и адаптерот за алатка со ВИ можат сите да ја повикаат оваа услуга. Така, интеграцијата со ВИ станува уште еден клиент на деловната логика, наместо нејзина паралелна имплементација.
Задржете го моделот надвор од границата на доверба
ВИ може да предлага дејства, да избира од достапните алатки и да претвора структурирани резултати во корисен јазик. Таа не треба да стане авторитетот што одлучува за дозволи, цени или промени на состојби.
Секое повикување на алатка треба да носи доверлив идентитет на апликацијата и контекст на барањето. Заднинскиот систем мора независно да спроведува авторизација, граници на закупци, валидација, ограничувања на стапката и правила на работниот тек. Никогаш не потпирајте се на моделот верно да повтори ID на сметка, улога или ниво на дозвола од разговорот.
Практичниот дизајн одвојува три слоја:
- Слој на разговор: го прима јазикот на корисникот и одлучува дали алатката може да помогне.
- Адаптер за алатка: валидира влез во облик на алатка, воспоставува доверлив контекст и ги преведува грешките во безбедни структурирани одговори.
- Доменски слој: извршува авторизација и деловна работа со складишта, услуги и трансакции.
Оваа структура исто така ја ограничува штетата од инјектирање промптови. Ако корисник побара од асистент да „ги игнорира правилата и да ја рефундира секоја фактура“, моделот може да произведе несоодветно барање, но заднинскиот систем и понатаму одбива неовластена или невалидна операција. Одбраната доаѓа од вообичаените контроли на апликацијата, а не од надежта дека промптот е доволно силен.
Дизајнирајте одговори за одлуки, а не необработени исфрлања
Одговорите на алатките треба да содржат доволно контекст за следната безбедна одлука, без стандардно да враќаат цел запис од базата на податоци. Големите, неструктурирани податоци ја зголемуваат цената, изложуваат непотребни информации и го прават последователното расудување помалку доверливо.
Претпочитајте фокусиран резултат како:
{
"order_reference": "ORD-10482",
"returnable_items": [
{
"line_id": "line_7",
"name": "Wireless keyboard",
"quantity_available": 1,
"return_deadline": "2026-11-03"
}
],
"reason_if_unavailable": null
}
Вклучете стабилни идентификатори каде што ѝ се потребни на следната операција, но избегнувајте да изложувате полиња само затоа што е удобно да се сериализираат. Одговорот треба да одговори на тековното прашање и да го овозможи експлицитно поддржаниот следен чекор.
Грешките заслужуваат иста грижа. Разликувајте невалидно формулирано барање од забрането дејство, запис што недостасува и конфликт предизвикан од променета состојба. На пример, нацрт за враќање може да не успее бидејќи ставката веќе е рефундирана. Тоа е информација врз која може да се дејствува; генеричка серверска грешка не е.
Направете ги операциите за запишување намерни и повратни
Операциите за читање не се безопасни, но операциите за запишување бараат дополнително ниво на дисциплина. Најбезбедниот образец често е: предложи, прегледај, потврди, изврши.
Асистентот може да создаде нацрт, да ги пресмета последиците и да претстави кратко резиме. Корисникот или овластениот работен тек потоа ја потврдува конечната промена. Ова ги намалува случајните дејства и создава природна точка за евидентирање и ревизибилност.
За операции што може повторно да се обидат, користете клучеви за идемпотентност или друг стабилен идентификатор на барањето. Системите со ВИ, мрежните клиенти и работниците за задачи можат да ги повторат повиците по истекување на времето. Рефундирање, создавање нарачка или известување не треба да се случи двапати само затоа што одговорот бил изгубен.
Исто така, направете ги премините на состојби експлицитни. Метод именуван approveInvoice е полесен за заштита и ревизија отколку генеричка крајна точка за ажурирање што прифаќа произволни полиња. Тој му дава на системот едно место за проверка дали одобрувањето е валидно од тековната состојба на фактурата.
Усовршувањето се исплаќа и надвор од ВИ
Напорот за градење API-ја подготвени за ВИ не е спореден проект за четбот. Тој е архитектонско средување со непосредни придобивки. Помалите доменски операции полесно се тестираат. Експлицитните договори ги прават интеграциите побезбедни. Централизираната авторизација го намалува разидувањето меѓу интерфејсите. Фокусираните одговори ги подобруваат перформансите и ја прават набљудливоста позначајна.
Почнете со еден вреден работен тек, а не со универзален асистент. Мапирајте ги одлуките што корисникот треба да ги донесе, идентификувајте ги потребните деловни можности и изложете само најмал безбеден сет операции. Тестирајте ги патеките на неуспех исто толку сериозно како и успешните: истечени дозволи, застарена состојба, дупликат-барања, записи што недостасуваат и делумни неуспеси во надолните системи.
ВИ станува корисна кога е поврзана со доверливи системи со јасни граници. Најпрво усовршете го API-то, и моделот ќе добие нешто многу повредно од неограничен пристап: сигурен начин да учествува во вистинската деловна логика.