Практычныя прытамулкі: АІ-агенты проты традыцыйных застосоўкаў з адзюльтай часткай: што на самай працэўе
Практычныя прыказкі: АІ-агенты проты традыцыйных бэкенд-зялоў: што на самай працы ёсць — кантракты, перакрычанні та месцы для вставкі коду для команд, якія выкарыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўаны варыянт ідэй з артыкула «AI Agents проты традыцыйных backend-зялёжнасцей: у чаму насправды розніца?» для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі па вяснаванню, якія застаюцца пасля перадачы задання. Этап Апглэву лепш працюе, калі яго розглядаць як мерыемую паверхню. Запісаце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметкі па адвярненню перад тым, як расшырваць масштаб. Храніце настройкі параду ад коду прыложэння. Файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнай чытанняў усіх элементаў.
1. Лінейныя пайплайны проты цыкла разумавання
Для 1-айго лінейнага пайплайна пры выкананні адзіной стадзіі неабяжна пазначыць вхідныя даны, адпаведальнага за стадзію і крэтыяры завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск стадзіі з вядомай точкі контролю, не прабуючы спадароўваць сустоянне, якое залишылася непазначаным. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, перакрыцчя ад чалавека і обробка непрацэсаваных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Калі наступная стадзія — гэта код чы ўтварэнне вызову інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакрычэнням схемы, чым вольныя тэкстовыя апісанні.
Традыцыйныя бэкенды: статычны DAG
Для традыцыйных бэкендаў на стадіі Static неабходна прадзефінаваць вхідныя даны, адпаведальную особу за кожны крок і крэтарыя выходу пры змены коду. Аператары должны магчымае перзапускать крок з вядомай точкі контролю, не прабуючы спадарацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест амаль неканчатых скрыптав. Калі крок не выйшаў, прычына неудачы павінна вказываць на адзін конкрэтны аспект, а не на заплутаны процес. Неабходна людская апраўда для тых крокаў, якія выкарыстоўваюць грошы чы зміняюць даны ў працэсе. Компіляцыйныя налаштаванні не ўзроўнаўцяюцься з повнай адпаведальнасцю ў бізнесе.
[Request] ──> [Validate Input] ──> [Database Query] ──> [Transform Data] ──> [Response]
│
└── (Invalid) ──> [Return 400]
AI Agents: The ReAct Loop
Для АІ-агентаў на стадіі ReAct неабходна перш за ўсё визначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Спрыяйце таму, каб гэтае стадія выступала як контракт межа вхіднымі данымі та перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, визначыце крэтыры успеху та адмовіцеся ад беззвучнага частковага завершэння. Забезпечыце людскія парады на тых кроках, дзе відбываецца выдатак грошэй або зміняюцыся даны для працы. Компіляцыйныя налашчэння не є гарантыяю цэліснасці бізнес-процесаў. Для АІ-агентаў на стадіі ReAct неабходна перш за ўсё визначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Зберагачыце налашчэння параду коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных данных та флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь код.
┌────────────────────────┐
▼ │
[Objective] ──> [LLM Evaluates State] │
│ │
Does it need more info? │
├── Yes ──> [Select Tool & Arguments]
│ │
│ [Execute Tool] ────────┘
│ (API, DB, Search)
│
└── No ──> [Return Final Answer]
2. Конкрэтныя парадынкі: Автаматызацыя заяваў на падтрымку
Кал працуеце над стадзіяй «2. Конкрэтныя парадынкі», спачатку запісайце умовы контракту: неабяжныя данні, сігнал успеху і тое, што выканаецца у разы частковага нявыполнення. Такі список пераканае ў тым, што пасляэтапныя змены коду буду чыстымі. Дакументавайце як шлях успеху, так і шлях вярнення да нормы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пасляэтапнымі допанавамі. Зробіце пераконтральную пазнаку пасля дорогіх крокаў. Система вярнення не должна знову выклікаць той самы кантакт з LLM, калі аператар перапрыбуе пазнейшы элемент.
Традыцыйны падход
Калі працуеце на стадзіі «Традыцыйны падход», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкі дапамагае заліцвачыць змяны ў кодзе па правдзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, нявыпанне павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Зробіце пераконтроўку пасля дорогіх крокаў. Програма не павинна зноў выклікаць той самы LLM-званак, калі аператар пракушае пазнейшы вузел.
// Traditional Backend: Strict, deterministic logic
async function handleRefund(orderId: string, customerReason: string) {
const order = await db.orders.findById(orderId);
if (!order) {
throw new NotFoundError("Order not found");
}
// Strict business rule written by an engineer
const isEligible = order.status === "DELAYED" && order.daysDelayed > 5;
if (!isEligible) {
return { status: "rejected", reason: "Delay does not meet refund criteria." };
}
const refund = await paymentGateway.refund(order.paymentIntentId);
await db.orders.update(orderId, { status: "REFUNDED" });
await emailService.sendRefundNotice(order.customerEmail);
return { status: "success", refundId: refund.id };
}
Агентны падход
Калі працуеце над стадзіяй «The Agentic Approach», спачатку запісайце контракт: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Спрыятлівае ставленне да гэтай стадзіі як да контракту межа даннэмі і перакананымі выходамі. Дайце назву артыфактам, задаце правілы пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце перапытаку пасля дорогіх крокаў. Програма для продакцыі не павінна зноў выклікаць той самы вызыв LLM, калі аператар праканае пазнейшы вузел. Калі працуеце над стадзіяй «The Agentic Approach», спачатку запісайце контракт: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Зберагачыце настройкі за межамі коду прыемлівання. Файлы сераўнавальнага сяродовішча, хранілішчы секрэтных дадзеных і флагі функцый павінны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
// Agent Loop: The model decides which tools to call
import { generateText, tool } from "ai";
import { z } from "zod";
const tools = {
fetchOrder: tool({
description: "Fetch order details and shipping history",
parameters: z.object({ orderId: z.string() }),
execute: async ({ orderId }) => db.orders.findById(orderId),
}),
issueRefund: tool({
description: "Issue a monetary refund to the customer",
parameters: z.object({
paymentIntentId: z.string(),
amount: z.number(),
reason: z.string()
}),
execute: async (args) => paymentGateway.refund(args.paymentIntentId, args.amount),
}),
escalateToHuman: tool({
description: "Escalate edge cases or physical damage to a support manager",
parameters: z.object({ ticketSummary: z.string() }),
execute: async ({ ticketSummary }) => supportDesk.createEscalation(ticketSummary),
})
};
// The execution is governed by an evaluation loop
const response = await generateText({
model: yourConfiguredLLM,
tools,
maxSteps: 5, // Prevents infinite execution loops
prompt: `Customer Issue: "The package arrived on time, but the driver ran over my mailbox. Order #1234."
Evaluate policy guidelines and take appropriate action.`,
});
3. Разліки ў архітектуре, практыкуемыя паралельна
Этап 3 «Разліки ў архітектуре, практыкуемыя паралельна» найэфективней працюе, калі яго розглядаць як виміроўваную плошчу. Запісаце адну ідеальную версію, адин випадак неудачы і прыметкі па поверненню да пачатковага стану перш чым расширваць масштабы. Дакументаваце як шлях успеху, так і шлях відновлення разам. Перапробаванні, людзкі контрольны пункты і обработка некоректных поведань ўскладнень є частью продукту, а не етапамі далейшай доўнелівання. Зберагачыце стан графа ў простам і типаванам формате. Вкладаныя структуры маскуюць інформацію пра тое, який вузел запісаў якое поле, і спакшуюць возз’яджання пасля перерываў.
4. Чы что відбываецца за кулісамі: Вікна контексту як кэш CPU
Метод «4 таго, што выдзейчыцца за кульісамі» работае наяўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна «золатая» транскрыпцыю, адин прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры розшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты обработкі трэба зберагаць у простаму, типаваным формате. Вярнутыя структуры дакладнаўкі маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшуюць продажчыку працу пасля перарываў.
5. Формы неудач: чаму агенты важкія для падтрымкі
5 спосабаў неудачы: чаму этап работае найкраща, калі яго спрыяжваюць з мерымя можнасцямі. Зберагуйце адны ідеальны прыклад роботы, адзін кейс неудачы і прыказку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Спрыяжвайце гэты этап як кантракт между вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаць критэрыя успеху і не падзеўляйцеся частым, непূরным выкананнем задач. Рэзультаты графа трэба зберагаць у простам, типаваным формате. Вярнутыя структуры дадзення маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшуюць возз'яданне пасля перарываў. 5 спосабаў неудачы: чаму этап работае найкраща, калі яго спрыяжваюць з мерымя можнасцямі. Зберагуйце адны ідеальны прыклад роботы, адзін кейс неудачы і прыказку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Конфігурацыю трэба зберагаць паза кодам прыкладнай програмы. Файлы сяродавішча, хранільнікі секрэтных дадзенняў і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнага чытання всего графа.
Бесканечны цикл
Для стадіі «Бесканцэвы цикл» неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крэтары выходу пры перадзмене коду. Аператары должны магчыма было перзапусціць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія пераказы і обработка некоректных паведамленняў ёсць часткай продукту, а не чымось, што дадаецца пазней. Неабяжна застосавіць людзкую апраўдку для тых крокаў, якія выкарыстоўваюць грошы або зменяюць даны ў працэсе виробніцтва. Працэс складання коду не ўзроўнаважваецца з повнасцю бізнес-функцыяў.
Халюцинаваныя аргументы інструмента
Для стадіі Hallucinated Tool Arguments неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры перадзеі коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехарактэрнага результата павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Автентыфікуйцеся на входзе і парадзеўжайце правыя на роботу з дадзеннямі. Толькі токэн-носіцель не є межай адпаведальнасці.
// Expected:
{ "customerId": "cust_123", "amount": 50 }
// What the model occasionally outputs under high temperature:
{ "user_id": "cust_123", "refund_value": "$50.00" }
Недэтэрміністычны маршрутызацыя
Для стадіі недэтэрміністычнага маршрутызавання неабяжна практычна апісацыя вхідных дадзеных, адпаведнага адпаведальніка за этап і крэтынары завершэння перад змянайом коду. Аперацыйныя працавнікі павінны магчымае цяпер запускаць этап з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіі як даговору межа вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, практычна апісацыя крэтынараў успеху і адмовіцеся ад беззвучнага частковага завершэння. Забезпечыце людскія атстаўкі для тых крокоў, якія выкарыстоўваюць грошы або зміняюць даны для працы. Компіляцыйныя налашчэння не ўзроўнаваны з абсягам выконання бізнес-задач. Для стадіі недэтэрміністычнага маршрутызавання неабяжна практычна апісацыя вхідных дадзеных, адпаведнага адпаведальніка за этап і крэтынары завершэння перад змянайом коду. Аперацыйныя працавнікі павінны магчымае цяпер запускаць этап з вядомай точкі контролю, не падозрываючы прыхованы стан. Зберагачыце налашчэння параду аплікацыйскага коду. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое працавнікі можаць аудытаваць, не чытаючы весь код.
aph.
6. Калі выкорыстоўваць тую чы іншую архітектуру
Калі працюеце над этапам «6. Калі выкорыстоўваць», спачатку запісайте умовы працы: неабходныя даны, сігнал успеху і тое, што выканаецца у разы частковай нявыполненасці. Такі список дапамагае залічваць змяны ў кодзе чыста. Документавайце як шлях успеху, так і шлях вяснавання ситуацыі. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не дадатковымі правкамі пазней. Ствараюце контрольныя пункты пасля дорогіх крокаў. Система вярнення не павинна знову ставіць плату за той самы вызов LLM, калі аператар перапрыбуе пазнейшы вузел.
Выкорыстоўваць традыцыйны код бэкенду, калі:
Калі працуеце на стадыю «Іспользаванне традыцыйнага коду сервера», спачатку запісайце умовы вярбунка: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае залічваць змяны ў кодзе чыста і прозрачна. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Зробіце перапактаванне пасля дорогіх крокаў. Програма не должна зноў ставіць плату за той самы вызов ШІ, калі аператар праказвае спробу на болей пазнім этапе.
Іспользавайце агентаў ШІ, калі:
Калі працуеце над стадзіяй «Іспытанне AI-агентаў», спачатку запісайце кантракт: неабходныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список перакладоў заходзіць пазнейшыя змены ў кодзе чыстымі. Спрыймайце гэтую стадзію як кантракт межа данымі і перакананымі выходамі. Дайце назву рэзультатам, задаць тэсты на успех і адмовіцеся ад мовчанкавага частковага завершэння. Стварайце контрольныя пункты пасля дорогіх крокаў. Продакцыя не должна занова ставіць плату за той самы вызыв LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працуеце над стадзіяй «Іспытанне AI-агентаў», спачатку запісайце кантракт: неабходныя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список перакладоў заходзіць пазнейшыя змены ў кодзе чыстымі. Зберагайце настройкі параду ўнутры коду прыемлівача. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць без неабходнасці чытання всей структуры.
Оптимальныя умовы для вырабаткі: гібрыдная архітектура
Этап «Оптимальныя умовы для вырабаткі» працюе найэфективней, калі яго розглядаюць як вимерную плошчу. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да поперадньего стану перш чым расширваць масштабы. Дакументаваць трэба як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є частью продукту, а не чымсь, што дадаецца пазней. Храніце стан графаў у простаму і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў кожна поль і спакоююць працэс пасля перарываў.
[Incoming Request] ──> [Traditional API Gateway] ──> Authentication / Rate Limiting
│
▼
[Standard Business Logic] ──> Fast DB Reads / Validation
│
▼
[Targeted Agent Boundary] ──> Handles unstructured task
│ (Restricted to 3 safe tools)
▼
[Standard Business Logic] ──> Validates agent output
│
▼
[Final Response] <─── [Structured DB Write]
Вывод
Этап вынікнення рэшынкі працюе найэфектывней, калі яго спрыяваць як мерыемую паверхню. Запісайце адна ідеальная версія, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштабы. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Рэзультаты графа павінны быць простымі та з адначытаемымі датамі. Вярнутыя структуры маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшуюць продовжэнне роботы пасля перерываў.
Чэк-ліст для эксплуатацыі
Калі працуеце над этапам чэк-ліста для эксплуатацыі, спачатку запісайце умовы: неабходныя даннэ, сігнал успеху та тое, што выйдзе пад час частковай неудачы. Такі чэк-ліст дапамагае заставаць пазнейшыя змены коду чыстымі та прозрачнымі.
Запісвайце часы выконання та косты токеноў або запытаванняя разам з функцыйнальнымі рэзультатамі. Відразувыя данні пра косты запобегаюць неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўы.
Пауза пасля дорогіх крокаў. Функцыя аднова не павинна занова нарахоўваць плата за той самы вызыв LLM, калі аператар праказвае спробу на пазнейшый вузел.
Забезпечыце фіксацію версій залежнасцяў і запішыце хэш адобраза, які выканаў дэманстрацыю. Возможнасць перадарабаткі прыважней за традыцыйныя знаёмства.
Зберагаюце настройкі праза код аплікацыі. Файлы серавэра, хранільнікі секретных данных і пазначкі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнай чытанняў усіх элементаў структуры.
Пауза пасля дорогіх крокаў. Функцыя аднова не павинна занова нарахоўваць плата за той самы вызыв LLM, калі аператар праказвае спробу на пазнейшый вузел.
Перад апраноўкай структуры неабяжна заморозьце версіі, зафіксуйце ключовыя даны для критычнага маршруту і паказваце способы адворачэння змян. У спільных серавэрах неабяжны ліміты швайнаў, перагляд умов ваработкі та чыстка секретных данных праз адпаведнага власніка. Краща простая надзеянасць на стабільнасць, чым крэатывныя, але еднакратныя дэманстрацыі.
Запіскі для пакета 0b07728dd3ea: не класты ключі прадаўцоў у репазітарыю, задаць максымальны ліміт токена на сесію, а таксама зберагчы транскрыпціі празаўсюды з фікстурамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннэй.