AI agent-ներ
LLM-ներ, որոնք ցիկլով օգտագործում են tools՝ բազմաքայլ առաջադրանքներ ավարտելու համար, և ինչպես դրանք պահել անվտանգ ու օգտակար։
30 վայրկյանում
AI agent-ը ցիկլով աշխատող լեզվական մոդել է․ այն նայում է նպատակին, որոշում, թե որ tool-ը կանչի, կարդում է արդյունքը և կրկնում, մինչև առաջադրանքը կատարվի։ Agent-ները կարող են որոնել, խմբագրել ֆայլեր, կանչել API-ներ կամ աշխատեցնել կոդ։ Դրանք հզոր են բաց, չսահմանված աշխատանքի համար, բայց վստահելի լինելու համար պետք են հստակ tools, սահմանափակումներ, իրավունքներ և գնահատում։
Իմ ամենօրյա stack-ում չէ․ գիտեմ հիմնական գաղափարները և մանրամասները կսովորեմ, երբ նախագիծը դա պահանջի։
Ինչու է սա կարևոր
- Agent-ները կատարում են առաջադրանքներ, որոնք հնարավոր չէ նախապես script անել՝ բագի ուսումնասիրություն, տարբեր աղբյուրներով հետազոտություն, ticket-ների triage, որովհետև մոդելն ընտրում է հաջորդ քայլը՝ ելնելով գտածից։
- Կոդավորող agent-ներն արդեն փոխել են ծրագրային թիմերի աշխատանքը, ուստի ինժեներներին պետք է հասկանալ, թե ինչպես են իրականում աշխատում ցիկլը, tools-ը և կոնտեքստը, ոչ թե միայն օգտագործել դրանք։
- Model Context Protocol-ի (MCP) նման ստանդարտները էժան են դարձնում agent-ները ընկերության համակարգերին միացնելը, ինչը նաև անվտանգության նախագծումը դարձնում է հրատապ։
- Թիմը agent է կառուցում միայն այն ժամանակ, երբ առաջադրանքը բազմաքայլ է, բավականաչափ արժեքավոր՝ ավելի բարձր արժեքն ու latency-ն արդարացնելու համար, և ունի սխալներ, որոնք հնարավոր է բռնել․ այլապես մեկ LLM կանչը կամ ֆիքսված workflow-ն ավելի լավ է։
Ինչպես է աշխատում
01Գաղափարը՝ մոդել ցիկլում՝ tools-ով
Chatbot-ը պատասխանում է մեկ անգամ։ Agent-ն աշխատում է կրտսեր գործընկերոջ պես, որին տրվել է նպատակ և գործիքների արկղ․ մտածում է հաջորդ քայլի մասին, օգտագործում է tool, նայում է արդյունքին և շարունակում, մինչև ավարտի կամ խրվի։ Տեխնիկապես դա tool-use API-ն է ցիկլում։ Ուղարկում եք նպատակը գումարած tool-երի սահմանումները, մոդելը պատասխանում է tool call-ով, ձեր կոդն այն աշխատեցնում է և հետ ուղարկում արդյունքը, կրկնում եք, մինչև մոդելն ավարտի իր հերթը։ «Պլանավորումը» հիմնականում մոդելի մտածելն է քայլերի միջև, երբեմն օգնում է նրան խնդրել սկզբում գրել պլան կամ to-do ցուցակ։ Agent-ի որակը կախված է չորս բանից՝ մոդելը, նրան տրված tools-ը, կոնտեքստը, որը նա տեսնում է, և guardrail-ները նրա շուրջ։ Anthropic-ի խորհուրդն արժե կրկնել՝ սկսեք ամենապարզ լուծումից և agent-ային բարդություն ավելացրեք միայն այն ժամանակ, երբ այն հստակ բարելավում է արդյունքները։
- Workflow՝ ձեր կոդն է որոշում քայլերը, LLM-ը լրացնում է մասերը
- Agent՝ LLM-ն է որոշում քայլերը, ձեր կոդը տրամադրում է tools և սահմանափակումներ
- Production համակարգերի մեծ մասը համակցում է երկուսը
02Նվազագույն agent loop
Ահա հիմնական ցիկլը Claude Messages API-ով TypeScript-ում։ Այն շարունակում է կանչել մոդելը, քանի դեռ վերջինս tools է խնդրում, աշխատեցնում է յուրաքանչյուր պահանջված tool և բոլոր արդյունքները վերադարձնում մեկ user հաղորդագրությամբ։ Կարևոր մանրամասներ՝ քայլերի առավելագույն քանակ, որպեսզի շփոթված agent-ը չկարողանա անվերջ ցիկլել, սխալները վերադարձվում են մոդելին որպես tool result՝ is_error-ով, որպեսզի այն կարողանա հարմարվել՝ crash լինելու փոխարեն, և assistant-ի յուրաքանչյուր պատասխանի ամբողջ content-ը ավելացվում է պատմությանը, ոչ թե միայն տեքստը։ Իրական նախագծերում կարող եք օգտագործել SDK-ի tool runner helper-ը (որը ձեր փոխարեն վարում է այս ցիկլը), Claude Agent SDK-ն (Claude Code harness-ը որպես գրադարան՝ ներկառուցված ֆայլային, shell և վեբ tools-ով) կամ hosted տարբերակներ, ինչպիսին է Claude Managed Agents-ը։ Մյուս էկոհամակարգերն առաջարկում են նման SDK-ներ, բայց դրանց տակ ցիկլը նույնն է։
const messages: Anthropic.MessageParam[] = [{ role: "user", content: goal }];
for (let step = 0; step < 20; step++) {
const res = await client.messages.create({ model: "claude-opus-5-5", max_tokens: 8000, tools, messages });
messages.push({ role: "assistant", content: res.content });
if (res.stop_reason !== "tool_use") return res;
const results: Anthropic.ToolResultBlockParam[] = [];
for (const block of res.content) {
if (block.type !== "tool_use") continue;
try {
const out = await runTool(block.name, block.input, currentUser); // your code, your auth
results.push({ type: "tool_result", tool_use_id: block.id, content: JSON.stringify(out) });
} catch (e) {
results.push({ type: "tool_result", tool_use_id: block.id, content: String(e), is_error: true });
}
}
messages.push({ role: "user", content: results });
}
throw new Error("Agent hit the step limit");
03Tools-ի նախագծում, որոնցից մոդելը կարող է լավ օգտվել
Tools-ը agent-ի ձեռքերն են, և agent-ների ձախողումների մեծ մասը tool-երի նախագծման ձախողումներ են։ Յուրաքանչյուր tool-ի տվեք մեկ հստակ գործառույթ, անուն, որն ասում է, թե ինչ է անում, և նկարագրություն, որը բացատրում է, թե երբ օգտագործել, ինչ է վերադարձնում և որոնք են տարածված թակարդները՝ կարծես նոր թիմակցի համար փաստաթուղթ եք գրում։ Նախընտրեք մի քանի բարձր մակարդակի tools («search_orders»՝ ֆիլտրերով) յուրաքանչյուր endpoint-ի շուրջ տասնյակ բարակ wrapper-ների փոխարեն։ Վերադարձրեք կոմպակտ, համապատասխան արդյունքներ․ 5 MB JSON dump ստացող agent-ը վատնում է կոնտեքստը և շփոթվում, ուստի pagination արեք, ամփոփեք և ներառեք id-ներ հաջորդ կանչերի համար։ Սխալները դարձրեք օգտակար («customer_id-ն չի գտնվել, սկզբում օգտագործիր search_customers»)։ Հնարավորության դեպքում գրող tools-ը դարձրեք idempotent և կարդացող tools-ն առանձնացրեք գրողներից, որպեսզի դրանց տարբեր իրավունքներ տաք։ Tools-ը փորձարկեք՝ դիտելով իրական transcript-ները․ որտեղ մոդելը սխալ է օգտագործում tool-ը, սովորաբար նկարագրությունն է պետք մշակել։
04MCP՝ agent-ներին համակարգերին միացնելը
Model Context Protocol-ը (MCP) բաց ստանդարտ է, որը ներկայացրել է Anthropic-ը և որն այժմ աջակցվում է բազմաթիվ AI գործիքներում և provider-ներում՝ AI հավելվածները tools-ին և տվյալներին միացնելու համար։ MCP server-ը ստանդարտ JSON-RPC պրոտոկոլով տրամադրում է tools (գործողություններ), resources (կարդալու տվյալներ) և prompts (կաղապարներ)՝ կամ լոկալ՝ stdio-ով, կամ հեռակա՝ HTTP-ով։ Ցանկացած MCP client՝ Claude Code, Claude հավելվածներ, IDE-ներ և այլ agent host-եր, կարող է այն օգտագործել առանց հատուկ «սոսնձող» կոդի։ Դա նշանակում է, որ «tickets» կամ «database» ինտեգրացիան գրում եք մեկ անգամ և վերաօգտագործում տարբեր agent-ներում։ Հեռակա MCP server-ները authorization-ի համար օգտագործում են OAuth, ուստի agent-ը գործում է օգտատիրոջ պատվիրակած, սահմանափակ իրավունքով։ Երրորդ կողմի MCP server-ներին վերաբերվեք որպես ցանկացած տեղադրվող dependency-ի՝ ստուգեք, թե ինչի հասանելիություն ունեն, pin արեք տարբերակները և նախընտրեք վստահելի հրատարակիչների server-ները։
{
"mcpServers": {
"tickets": {
"command": "node",
"args": ["./mcp/tickets-server.js"],
"env": { "TICKETS_API_URL": "https://api.example.com" }
}
}
}
05Կոնտեքստ՝ agent-ի աշխատանքային հիշողությունը
Այն ամենը, ինչ agent-ը գիտի առաջադրանքի ընթացքում, ապրում է նրա context window-ում՝ հրահանգներ, tool-երի սահմանումներ, կանչերի և արդյունքների պատմություն։ Երկար առաջադրանքները լցնում են այն, և որակը նվազում է, երբ կոնտեքստը դառնում է «աղմկոտ»։ Լավ harness-ները ակտիվորեն կառավարում են կոնտեքստը։ System prompt-ը պահեք կենտրոնացված նպատակների, սահմանափակումների և աշխատանքի ստուգման եղանակի վրա։ Երբ tools-ը շատ են, բեռնեք դրանք ըստ պահանջի (tool search)։ Մաքրեք հին, ծավալուն tool result-ները, երբ դրանք այլևս պետք չեն (context editing), կամ ամփոփեք ավելի վաղ պատմությունը (compaction)։ Agent-ին տվեք scratchpad կամ memory ֆայլ նշումների համար, որոնք պետք է պահպանվեն՝ պլան, որոշումներ, առաջընթաց։ Մեծ առաջադրանքների համար աշխատանքը բաժանեք subagent-ների միջև․ յուրաքանչյուրը ուսումնասիրում է իր սեփական թարմ կոնտեքստում և հիմնական agent-ին վերադարձնում միայն կարճ արդյունք։ Այսպես են կոդավորող agent-ները շարունակում աշխատել մեծ repository-ների վրա՝ առանց ֆայլերի բովանդակության մեջ խեղդվելու։
06Guardrail-ներ և human-in-the-loop
Agent-ը կարող է իրական գործողություններ կատարել, ուստի սահմանափակումները նախագծում եք այնպես, ինչպես production հասանելիություն ունեցող նոր աշխատակցի համար։ Least privilege՝ տվեք միայն առաջադրանքին անհրաժեշտ tools-ը՝ օգտատիրոջ կամ նեղ service account-ի սահմաններով credentials-ով։ Իրավունքների մակարդակներ՝ միայն կարդացող tools-ն աշխատում են ազատ, գրելը պահանջում է հաստատում կամ աշխատում է sandbox-ում, ավերիչ գործողությունները (վճարումներ, ջնջումներ, email-ներ հաճախորդներին) միշտ պահանջում են մարդ։ Բյուջեներ՝ քայլերի սահմանափակում, token-ի կամ արժեքի բյուջե և wall-clock timeout-ներ։ Sandboxing՝ կոդը և shell հրամանները աշխատեցրեք մեկուսացված կոնտեյներներում՝ առանց գաղտնիքների և սահմանափակ ցանցով։ Ստուգում՝ ասեք agent-ին, թե ինչպես ստուգել իր աշխատանքը՝ աշխատեցնել թեստերը, նորից կարդալ արդյունքը, և հնարավորության դեպքում ինքներդ ստուգեք կոդում։ Աուդիտ՝ log արեք յուրաքանչյուր tool call՝ մուտքերով, ելքերով և այն ինքնությամբ, որի անունից գործել է։
- Կարդալ՝ թույլատրել · Գրել՝ հաստատում կամ sandbox · Անդառնալի՝ մարդու հաստատում
- Քայլերի, token-ի և ժամանակի բյուջեներ յուրաքանչյուր գործարկման համար
- Գաղտնիքները մնում են tool-ի շերտում, երբեք prompt-ում
Օգտագործեք, երբ
- Բաց առաջադրանքներ, որտեղ քայլերը կախված են նրանից, թե ինչ եք գտնում՝ debugging, հետազոտություն, տվյալների ուսումնասիրություն, codebase-ի փոփոխություններ։
- Առաջադրանքներ՝ հաջողության ստուգման ներկառուցված եղանակով, օրինակ՝ թեստերն անցնում են, schema-ն վավերանում է կամ reviewer-ը հաստատում է։
- Ներքին գործողություններ, որոնք համակցում են մի քանի համակարգ (ticket-ներ, log-եր, փաստաթղթեր), որտեղ մարդը այլապես պետք է «քլիքեր» բազմաթիվ գործիքներով։
- Երկարատև ֆոնային աշխատանք, որտեղ մի քանի րոպեն և որոշ լրացուցիչ արժեքը ընդունելի են ավելի լավ արդյունքի համար։
Մի՛ օգտագործեք, երբ
- Ֆիքսված, հայտնի քայլերով առաջադրանքներ․ մեկ-երկու LLM կանչով պարզ workflow-ն ավելի էժան է, արագ և հեշտ է փորձարկվում։
- Բարձր ռիսկով անդառնալի գործողություններ՝ առանց մարդու հաստատման քայլի կամ հուսալի ավտոմատ ստուգման։
- Latency-ի համար կրիտիկական օգտատիրոջ փոխազդեցություններ, որոնք պետք է պատասխանեն մեկ վայրկյանից պակաս ժամանակում։
Այլընտրանքներ
- Մեկ LLM կանչ
Լավ կոնտեքստով մեկ հարցումը կարգավորում է դասակարգումը, դուրսբերումը և ամփոփումը․ սկսեք այստեղից։
- Ֆիքսված workflow (prompt chaining, routing)
Ձեր կոդը քայլերն աշխատեցնում է հերթականությամբ և մասերի համար կանչում մոդելը․ կանխատեսելի է և փորձարկելի։
- Դասական ավտոմատացում
Script-ներ, cron job-եր և rules engine-ներ, երբ տրամաբանությունը հայտնի է և դետերմինիստիկ։
- Hosted agent պլատֆորմներ
Կառավարվող agent ծառայությունները (ներառյալ Anthropic-ի Managed Agents-ը) ձեր փոխարեն աշխատեցնում են ցիկլը և sandbox-ը՝ վերահսկողությունը փոխանակելով ավելի քիչ ենթակառուցվածքի հետ։
Լավագույն պրակտիկաներ
- Սկսեք ամենապարզ դիզայնից (մեկ կանչ կամ workflow) և անցեք agent-ի միայն այն ժամանակ, երբ eval-ները ցույց են տալիս, որ այն օգնում է։
- Tool-երի նկարագրությունները գրեք փաստաթղթի պես, վերադարձրեք կոմպակտ արդյունքներ և օգտակար սխալի հաղորդագրություններ։
- Authorization-ը կիրառեք tools-ի ներսում՝ իրական օգտատիրոջ ինքնությամբ, երբեք մի վստահեք մոդելի առաջարկած id-ներին։
- Դրեք քայլերի, token-ի և ժամանակի բյուջեներ, սահմանին հասնելիս կանգ առեք մաքուր և հաղորդեք առաջընթացը։
- Անդառնալի կամ արտաքին գործողությունների համար պահանջեք մարդու հաստատում, կոդի կատարումը դրեք sandbox-ում։
- Agent-ին տվեք իր աշխատանքը ստուգելու միջոց (թեստեր, validator-ներ) և ասեք օգտագործել այն։
- Log արեք ամբողջական transcript-ները և tool call-երը, իսկ ձախողումները վերածեք գնահատման case-երի։
Տարածված սխալներ
- Բարդ multi-agent համակարգ կառուցել մի առաջադրանքի համար, որը կարող էր կատարել մեկ prompt-ը։
- Տասնյակ raw API endpoint-ներ տրամադրել որպես tools՝ մեկ տողանոց նկարագրություններով։
- API key-եր կամ բազայի գաղտնաբառեր դնել prompt-ի կամ tool result-ների մեջ։
- Քայլերի սահմանափակում չունենալ, ուստի շփոթված agent-ը ցիկլում է և ամբողջ գիշեր այրում բյուջեն։
- Agent-ներին գնահատել միայն մի քանի գեղեցիկ demo կարդալով՝ հստակ հաջողության չափանիշներով առաջադրանքների suite աշխատեցնելու փոխարեն։
Խորը վերլուծություն
07Context engineering երկարատև agent-ների համար
Երկար agent գործարկումը կոնտեքստի բյուջեի խնդիր է։ Յուրաքանչյուր քայլ ավելացնում է մոդելի մտածողությունը, tool call-ը և դրա արդյունքը․ մի քանի տասնյակ քայլից հետո window-ի մեծ մասը հնացած log-եր են։ Տեխնիկաները՝ մոտավորապես օգտագործման հերթականությամբ՝ tool-երի ելքերը դիզայնով պահեք փոքր (ամփոփումներ, pagination, id-ներ ամբողջական օբյեկտների փոխարեն), մաքրեք հին tool result-ները, որոնք մոդելին այլևս պետք չեն՝ պահելով այն փաստը, որ կանչը տեղի է ունեցել (context editing), պարբերաբար պատմությունը compact արեք ամփոփման մեջ, որից agent-ը շարունակում է, մնայուն վիճակը պահեք window-ից դուրս՝ առաջընթացի ֆայլ, առաջադրանքների ցուցակ, memory store, որպեսզի թարմ կոնտեքստը կարողանա վերսկսել, և ուսումնասիրությունը պատվիրակեք subagent-ներին, որոնք վերադարձնում են խտացված արդյունքներ։ Prompt caching-ը փոխազդում է այս ամենի հետ․ cache hit-երին պետք է կայուն prefix, ուստի պատմությանն ավելացրեք՝ այն վերագրելու փոխարեն, և կոնտեքստը խմբագրեք API-ի աջակցած մեխանիզմներով, ոչ թե ավելի վաղ հաղորդագրությունները փոփոխելով, ինչը ներկայիս մոդելներում կարող է նաև անվավեր դարձնել մոդելի պահպանված reasoning-ը։
08Prompt injection և «մահացու եռյակը»
Անվտանգության հետազոտողները նկարագրում են agent-ների համար վտանգավոր համակցություն՝ գաղտնի տվյալների հասանելիություն, անվստահելի բովանդակության ազդեցություն և տվյալներ դուրս ուղարկելու հնարավորություն (email tool, HTTP հարցում, նույնիսկ նկարի URL render անելը)։ Երեքի առկայության դեպքում չարամիտ վեբ էջը կամ փաստաթուղթը կարող է հրահանգել agent-ին կարդալ գաղտնիքները և արտահանել դրանք։ Քանի որ ոչ մի մոդել լիովին անխոցելի չէ injection-ի նկատմամբ, կոտրեք համակցությունը կառուցվածքային մակարդակում։ Հնարավորության դեպքում հեռացրեք մեկ «ոտքը»՝ sandbox-ում outbound ցանց չկա, կամ browsing-ի ժամանակ գաղտնի տվյալների հասանելիություն չկա։ Կիրառեք allow-list-եր դոմենների և ստացողների համար։ Պահանջեք հաստատում ցանկացած գործողության համար, որը տվյալներ է ուղարկում դուրս։ Credentials-ը պահեք tool-ի շերտում, որպեսզի մոդելը երբեք չտեսնի դրանք, և օգտագործեք յուրաքանչյուր օգտատիրոջ սահմանափակ token-ներ, որպեսզի վնասը սահմանափակվի այն բանով, ինչ այդ օգտատերը կարող էր անել։ Log և alert արեք անսովոր tool հաջորդականությունների դեպքում և eval suite-ի մաս կազմող injection-ով փաստաթղթերով red-team արեք ձեր agent-ը։
09MCP server-ի կառուցում
MCP server-ը փոքր ծրագիր է, որը հայտարարում է tools՝ JSON Schema մուտքերով, և մշակում կանչերը։ Պաշտոնական SDK-ներ կան TypeScript-ի, Python-ի և այլ լեզուների համար։ Լոկալ server-ները հաղորդակցվում են stdio-ով և ժառանգում օգտատիրոջ մեքենայի իրավունքները, հեռակա server-ներն օգտագործում են Streamable HTTP և պետք է իրականացնեն OAuth, որպեսզի յուրաքանչյուր օգտատեր տրամադրի սահմանափակ հասանելիություն։ Tools-ը նախագծեք agent-ների համար, ոչ թե API-ի ամբողջականության՝ քիչ tools, հստակ նկարագրություններ, կոմպակտ արդյունքներ։ Վավերացրեք յուրաքանչյուր մուտք և authorization-ը կիրառեք server-ի կողմում։ Տարբերակավորեք ձեր server-ը և փաստագրեք breaking change-երը, որովհետև agent-ները կախված են tool-երի անուններից և ձևերից։ Կառուցելուց առաջ ստուգեք MCP-ի ընթացիկ specification-ը և SDK-ի փաստաթղթերը, քանի որ պրոտոկոլը զարգանում է։
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "tickets", version: "1.0.0" });
server.registerTool(
"get_ticket",
{
description: "Fetch one support ticket by id, including status and last 5 messages.",
inputSchema: { id: z.string().describe("Ticket id, e.g. T-1042") },
},
async ({ id }) => {
const t = await fetchTicket(id); // your API, your auth
return { content: [{ type: "text", text: JSON.stringify(t) }] };
},
);
await server.connect(new StdioServerTransport());
10Արժեքի և հուսալիության ինժեներիա
Agent-ի արժեքը մեկ քայլի token-ներն են բազմապատկած մեկ առաջադրանքի քայլերով, և երկուսն էլ աճում են աննկատ։ Չափեք արժեքը և հաջողությունը ըստ ավարտված առաջադրանքի, ոչ թե ըստ հարցման։ Լծակներ՝ prompt caching կայուն prefix-ի վրա (system prompt և tools), ինչը շատ կարևոր է, որովհետև յուրաքանչյուր քայլ նորից ուղարկում է պատմությունը, ավելի ցածր effort կամ ավելի փոքր մոդել subagent-ների և պարզ քայլերի համար, ավելի քիչ, բայց ավելի լավ tools, որպեսզի agent-ին ավելի քիչ կանչ պետք լինի, և task budget-ներ, որոնք թույլ են տալիս մոդելին ինքը կարգավորել տեմպը՝ քայլի կեսին կտրվելու փոխարեն։ Հուսալիության համար tools-ը դարձրեք idempotent և retry-ները անվտանգ, checkpoint արեք առաջընթացը, որպեսզի crash եղած գործարկումը կարողանա վերսկսել, դրեք wall-clock սահմանափակումներ և ոչ-«happy» stop reason-ները (max_tokens, refusal, քայլերի սահմանափակում) մշակեք հստակ արդյունքով՝ լռության փոխարեն։ Երկար առաջադրանքներն աշխատեցրեք որպես ֆոնային job-եր՝ կարգավիճակի թարմացումներով, ոչ թե HTTP հարցման ներսում։
Իրական իրավիճակներ
Ներքին ops agent support triage-ի համար
Խնդիր
Support-ը ուզում է օգնական, որը կարդում է նոր ticket-ը, ստուգում հաճախորդի վերջին պատվերները և log-երը և առաջարկում լուծում։ Այն երբեք չպետք է ինքնուրույն refund անի։
Ինչպես լուծել
Սկսեք որպես workflow՝ դասակարգեք ticket-ը, հետո աշխատեցրեք agent-ային ուսումնասիրության քայլ երեք միայն կարդացող tools-ով՝ get_ticket, search_orders (ticket-ի ստուգված customer id-ով), get_recent_errors։ Tools-ը կիրառում են support օպերատորի իրավունքները և վերադարձնում կոմպակտ ամփոփումներ։ Agent-ը ելքում տալիս է կառուցվածքային առաջարկ (ախտորոշում, ապացույցների id-ներ, առաջարկվող գործողություն)։ «propose_refund» tool-ը միայն ստեղծում է սևագիր, որը մարդը հաստատում է admin UI-ում։ Դրեք 15 քայլի սահմանափակում և token-ի բյուջե, log արեք transcript-ները և rollout-ից առաջ eval suite կառուցեք 50 անցյալ ticket-ներից՝ հայտնի լուծումներով։
Agent-ը ցիկլում է և այրում բյուջեն
Խնդիր
Հետազոտական agent-ը երբեմն աշխատում է մեկ ժամ՝ նորից ու նորից կանչելով search-ը մի փոքր տարբեր հարցումներով, և երբեք վերջնական պատասխան չի տալիս։
Ինչպես լուծել
Կարդացեք transcript-ները։ Սովորաբար հաջողության չափանիշներն անհասկանալի են, իսկ արդյունքները՝ աղմկոտ։ System prompt-ը վերագրեք կոնկրետ արդյունքով և կանգառի կանոնով («երբ ունենաս երեք անկախ աղբյուր, գրիր պատասխանը»)։ Search tool-ը թող վերադարձնի ավելի քիչ, կրկնություններից մաքրված արդյունքներ՝ snippet-ներով։ Ավելացրեք քայլերի սահմանափակում և token-ի բյուջե․ դրանց հասնելիս harness-ը մոդելից խնդրում է հնարավորինս լավ ամփոփում՝ լուռ ձախողվելու փոխարեն։ Խորը ընթերցանությունը պատվիրակեք subagent-ներին, որոնք վերադարձնում են կարճ արդյունքներ։ Այս «փախած» առաջադրանքներն ավելացրեք eval suite-ին և հետևեք մեկ առաջադրանքի քայլերին։
Կոդավորող agent-ի միացումը ընկերության գործիքներին
Խնդիր
Ծրագրավորողներն ուզում են, որ իրենց կոդավորող agent-ը կարդա ticket-ները և հարցումներ անի staging բազային։ Անվտանգության թիմը մտահոգված է credentials-ով և տվյալների արտահոսքով։
Ինչպես լուծել
Կառուցեք երկու փոքր MCP server՝ ticket server, որն օգտագործում է յուրաքանչյուր ծրագրավորողի OAuth token-ը միայն կարդալու scope-ներով, և database server, որը միանում է միայն կարդացող role-ով և միայն staging-ին, աշխատեցնում է պարամետրացված հարցումներ՝ տողերի սահմանափակումով և արգելափակում DDL-ը։ Credentials-ն ապրում են MCP server-ի environment-ում կամ secret manager-ում, երբեք prompt-ներում։ Server-ների տարբերակները pin արեք նախագծի ընդհանուր կոնֆիգում, փաստագրեք, թե յուրաքանչյուր tool ինչի հասանելիություն ունի, և log արեք հարցումները։ Production տվյալները մնում են լիովին անհասանելի․ եթե հետագայում պետք լինեն, կստանան առանձին, ստուգված server՝ masking-ով։
Արագ ուղեցույց
- Հիմնական ցիկլի պայմանը
while (res.stop_reason === "tool_use") { run tools; send tool_result }- Tool-ի ձախողումը վերադարձնել մոդելին
{ type: "tool_result", tool_use_id, content: msg, is_error: true }- Զուգահեռ tool call-եր
Բոլոր tool_result բլոկները վերադարձրեք մեկ user հաղորդագրությամբ- Տեղադրել TypeScript MCP SDK-ն
npm install @modelcontextprotocol/sdk zod- Ավելացնել MCP server Claude Code-ին
claude mcp add tickets -- node ./mcp/tickets-server.js- Տեղադրել Claude Agent SDK-ն (TS)
npm install @anthropic-ai/claude-agent-sdk- Անվտանգ default բյուջեներ
max steps ≈ 20, token-ի բյուջե մեկ առաջադրանքի համար, wall-clock timeout- Իրավունքների մակարդակներ
read → թույլատրել; write → հաստատում/sandbox; անդառնալի → մարդու հաստատում- Հաջողության մետրիկ
հաջողության տոկոս ըստ առաջադրանքի, գումարած արժեք, քայլեր և ժամանակ ավարտված առաջադրանքի համար
Հարցեր և պատասխաններ
Q1Ո՞րն է տարբերությունը workflow-ի և agent-ի միջև։
Workflow-ում ձեր կոդն է սահմանում քայլերը․ օրինակ՝ դասակարգել ticket-ը, հետո ընտրել կաղապար, հետո սևագրել պատասխան։ LLM-ը լրացնում է յուրաքանչյուր քայլ, բայց ճանապարհը ֆիքսված է։ Agent-ում մոդելն է որոշում ճանապարհը՝ ընտրում է, թե որ tool-ը կանչի հաջորդը՝ ելնելով մինչ այժմ ստացված արդյունքներից, և քանի քայլ անի։ Workflow-ները կանխատեսելի են, ավելի էժան և հեշտ է դրանք փորձարկել, agent-ները ճկուն են և կարգավորում են առաջադրանքներ, որոնք չեք կարող նախապես ամբողջությամբ նկարագրել։ Production համակարգերից շատերը workflow-ներ են՝ մեկ agent-ային քայլով այնտեղ, որտեղ ճկունությունն իսկապես պետք է։
Q2Ի՞նչ է MCP-ն և ինչու է այն կարևոր։
Model Context Protocol-ը բաց ստանդարտ է AI հավելվածները արտաքին tools-ին և տվյալներին միացնելու համար։ MCP server-ը ստանդարտ ձևաչափով տրամադրում է tools, resources և prompts, և ցանկացած MCP-համատեղելի client կարող է օգտագործել այն։ Մինչ MCP-ն յուրաքանչյուր agent framework-ի պետք էր իր սեփական ինտեգրացիան յուրաքանչյուր համակարգի համար, հիմա կառուցում եք մեկ server, ասենք, ձեր ticket-ների համակարգի համար և վերաօգտագործում կոդավորող agent-ներում, chat հավելվածներում և IDE-ներում։ Այն նաև ստանդարտացնում է հեռակա authorization-ը OAuth-ով։ Հակառակ կողմն այն է, որ MCP server տեղադրելը agent-ին իրական հնարավորություններ է տալիս, ուստի այն պահանջում է նույն ստուգումը, ինչ ցանկացած dependency։
Q3Ինչպե՞ս կանխել, որ agent-ը վտանգավոր բան անի։
Նախագծեք զսպման, ոչ թե վստահության համար։ Agent-ին տվեք միայն առաջադրանքին անհրաժեշտ tools-ը՝ գործող օգտատիրոջ սահմաններով credentials-ով։ Authorization-ը կիրառեք յուրաքանչյուր tool-ի ներսում։ Tools-ը բաժանեք ըստ ռիսկի՝ կարդալը աշխատում է ավտոմատ, գրելը գնում է sandbox կամ պահանջում է հաստատում, անդառնալի գործողությունները պահանջում են մարդու հաստատում։ Կոդն աշխատեցրեք մեկուսացված կոնտեյներներում՝ առանց գաղտնիքների և սահմանափակ ցանցով։ Դրեք բյուջեներ քայլերի, token-ների և ժամանակի վրա։ Այն ամենին, ինչ agent-ը կարդում է՝ վեբ էջեր, ֆայլեր, email-ներ, վերաբերվեք որպես հնարավոր prompt injection պարունակողի։ Եվ log արեք յուրաքանչյուր գործողություն, որպեսզի կարողանաք աուդիտ անել և հետ գլորել։
Q4Ինչու՞ են agent-ները ամենից հաճախ ձախողվում։
Իրական agent transcript-ների վերանայումները սովորաբար մատնանշում են նույն պատճառները՝ անհասկանալի կամ համընկնող tools, ուստի մոդելն ընտրում է սխալը, չափազանց մեծ կամ աղմկոտ tool result-ներ, որոնք ողողում են կոնտեքստը, հրահանգներում բացակայող տեղեկություն, օրինակ՝ ինչ է նշանակում «ավարտված» կամ ինչպես ստուգել, feedback ազդանշանի բացակայություն, ուստի սխալները երբեք չեն նկատվում, և այնքան երկար կոնտեքստ, որ վաղ հրահանգները փաստացի մոռացվում են։ Ուղղումները հիմնականում ինժեներական են՝ ավելի լավ tool նկարագրություններ և ելքեր, բացահայտ հաջողության չափանիշներ, ստուգման քայլեր, կոնտեքստի կառավարում և գնահատման suite-եր, որոնք բռնում են regression-ները։
Q5Ինչպե՞ս եք գնահատում agent-ը։
Իրատեսական առաջադրանքների suite-ով, որոնցից յուրաքանչյուրն ունի հստակ, իդեալում ավտոմատ հաջողության ստուգում՝ թեստերն անցնում են, ճիշտ գրառումն է փոխվել, պատասխանը համընկնում է։ Յուրաքանչյուր առաջադրանք աշխատեցրեք մի քանի անգամ, որովհետև agent-ները ոչ-դետերմինիստիկ են, և հետևեք հաջողության տոկոսին, արժեքին, քայլերին և ժամանակին յուրաքանչյուր առաջադրանքի համար։ Ստուգեք նաև ճանապարհը, ոչ թե միայն արդյունքը․ արգելված tool call-երը, ավելորդ գրառումները կամ անտեսված հրահանգները ձախողումներ են, նույնիսկ եթե արդյունքը ճիշտ է թվում։ Բաց ելքերը գնահատեք rubric-ով՝ կալիբրացված մարդկային դատողության դեմ։ Suite-ը աշխատեցրեք prompt-ների, tools-ի կամ մոդելների յուրաքանչյուր փոփոխության դեպքում։
Q6Ե՞րբ եք օգտագործում մի քանի agent մեկի փոխարեն։
Երբ աշխատանքը բնականորեն բաժանվում է մասերի, որոնք կծանրաբեռնեին մեկ կոնտեքստը՝ բազմաթիվ աղբյուրների հետազոտություն, բազմաթիվ ֆայլերի վերանայում կամ անկախ ենթաառաջադրանքներ, որոնք կարող են զուգահեռ աշխատել։ Lead agent-ը պատվիրակում է subagent-ներին, որոնցից յուրաքանչյուրն ունի թարմ կոնտեքստ և նեղ առաջադրանք, և հետ ստանում կարճ ամփոփումներ։ Դա lead-ի կոնտեքստը մաքուր է պահում և կարող է արագացնել գործը։ Արժեքներն իրական են՝ ընդհանուր առմամբ ավելի շատ token-ներ, համակարգման overhead և ավելի դժվար debugging։ Հաջորդական առաջադրանքների համար, որոնք շատ կոնտեքստ են կիսում, սովորաբար ավելի լավ է մեկ լավ զինված agent-ը։
Սենիոր մակարդակի հարցեր
S1Ինչպե՞ս կնախագծեիք agent պլատֆորմ բազմաթիվ թիմեր ունեցող ընկերության համար։
Ես կառանձնացնեի երեք շերտ։ Ընդհանուր tool շերտ՝ MCP server-ներ յուրաքանչյուր համակարգի համար (ticket-ներ, CRM, data warehouse), որոնցից յուրաքանչյուրը պատկանում է համակարգի թիմին, օգտագործում է OAuth կամ յուրաքանչյուր օգտատիրոջ սահմանափակ credentials և ունի կենտրոնացված logging։ Harness շերտ՝ մեկ-երկու աջակցվող տարբերակ՝ SDK այն թիմերի համար, որոնք agent-ներ են ներդնում պրոդուկտներում, և hosted կամ ներքին runner ֆոնային agent-ների համար՝ ստանդարտ բյուջեներով, sandboxing-ով, հաստատման հոսքերով և transcript-ների պահպանմամբ։ Կառավարման շերտ՝ server-ների allow-list, տվյալների դասակարգման կանոններ (որ tools-ը կարող են համակցել գաղտնի տվյալները outbound գործողությունների հետ), production-ից առաջ գնահատման պահանջներ և արժեքի dashboard-ներ յուրաքանչյուր թիմի համար։ Փոխզիջումը արագությունն է ընդդեմ վերահսկողության․ չափազանց շատ կենտրոնական գործընթաց, և թիմերը «ստվերային» agent-ներ են կառուցում, չափազանց քիչ, և ստանում եք արտահոսած credentials և անսահմանափակ ծախս։ Ես անվտանգ ճանապարհը կդարձնեի ամենահեշտ ճանապարհը՝ միայն review-ներին ապավինելու փոխարեն։
S2Մեկ agent՝ բազմաթիվ tools-ով, թե՞ մի քանի մասնագիտացված agent․ որո՞նք են փոխզիջումները։
Մեկ agent-ը ամբողջ կոնտեքստը պահում է մեկ տեղում, ինչը իդեալական է, երբ քայլերը կախված են միմյանցից, օրինակ՝ կոդի փոփոխություն, որը դիպչում է կապված ֆայլերի։ Դրա սահմանները կոնտեքստի չափն ու tools-ի ծանրաբեռնվածությունն են․ մի քանի տասնյակ tool-ից հետո ընտրության որակը նվազում է, ինչը tool search-ը կարող է մեղմել։ Մի քանի agent-ն օգնում է, երբ աշխատանքը զուգահեռ է կամ ծանր է ընթերցանությամբ․ subagent-ները ուսումնասիրում են մաքուր կոնտեքստներում և վերադարձնում խտացված արդյունքներ, ուստի lead-ը տեսնում է միայն կարևորը, և wall-clock ժամանակը նվազում է։ Արժեքներ՝ ընդհանուր առմամբ ավելի շատ token-ներ, handoff-երի ժամանակ կորած տեղեկություն և ավելի դժվար debugging, քանի որ ձախողումները թաքնվում են առաջադրանքների ձևակերպումներում և ամփոփումներում։ Իմ կանոնը՝ սկսել մեկ agent-ով, subagent-ներ ավելացնել հստակ առանձնացվող, ընթերցանությամբ ծանր ենթաառաջադրանքների համար, խուսափել բարդ role-play հիերարխիաներից, քանի դեռ գնահատումը չի ապացուցել, որ դրանք օգնում են։
S3Ինչպե՞ս agent-ի վարքը բավականաչափ վերարտադրելի դարձնել debug-ի և աուդիտի համար։
Sampling-ի դեպքում լիարժեք վերարտադրելիությունն անհնար է, բայց կարելի է բավականաչափ մոտենալ։ Պահեք յուրաքանչյուր գործարկման ամբողջական transcript-ը՝ մոդելի id, effort կարգավորումներ, system prompt-ի տարբերակ, tool սահմանումների տարբերակ, յուրաքանչյուր tool-ի մուտք և ելք, և timestamp-ներ։ Հնարավորության դեպքում tools-ը դարձրեք դետերմինիստիկ և գրանցեք արտաքին պատասխանները, որպեսզի գործարկումը կարողանա replay արվել գրանցված արդյունքների դեմ։ Prompt-ները և tools-ը տարբերակավորեք կոդի պես և յուրաքանչյուր գործարկում կապեք commit-ի հետ։ Գնահատման առաջադրանքներն աշխատեցրեք մի քանի անգամ և հաղորդեք հաջողության տոկոսներ, ոչ թե առանձին արդյունքներ։ Աուդիտների համար log արեք այն ինքնությունը, որի անունից գործել է յուրաքանչյուր tool call, և հաստատման յուրաքանչյուր որոշում։ Փոխզիջումը պահեստավորումն ու գաղտնիությունն է․ transcript-ները պարունակում են զգայուն տվյալներ, ուստի կիրառեք պահպանման սահմանափակումներ, մուտքի վերահսկողություն և redaction՝ ճիշտ ինչպես հավելվածի log-երի դեպքում։
Բառարան
- Agent
- LLM, որը ցիկլով ընտրում և կանչում է tools, մինչև նպատակին հասնի։
- Harness
- Մոդելի շուրջ կոդը, որն աշխատեցնում է ցիկլը, կատարում tools-ը, կառավարում կոնտեքստը և կիրառում սահմանափակումները։
- Tool
- Ֆունկցիա, որը մոդելը կարող է պահանջել՝ նկարագրված անունով, նկարագրությամբ և մուտքի schema-ով։
- MCP
- Model Context Protocol՝ բաց ստանդարտ AI հավելվածներին tools և տվյալներ տրամադրելու համար։
- Subagent
- Առանձին agent գործարկում՝ սեփական թարմ կոնտեքստով, որին lead agent-ը տալիս է նեղ առաջադրանք։
- Compaction
- Ավելի վաղ զրույցի ամփոփում, որպեսզի երկարատև agent-ը կարողանա շարունակել իր context window-ի սահմաններում։
- Human-in-the-loop
- Դիզայն, որտեղ մարդը հաստատում կամ խմբագրում է agent-ի որոշ գործողություններ՝ նախքան դրանց ուժի մեջ մտնելը։
- Sandbox
- Մեկուսացված միջավայր, որտեղ agent-ի կոդն աշխատում է առանց գաղտնիքների կամ production համակարգերի հասանելիության։
- Indirect prompt injection
- Չարամիտ հրահանգներ՝ թաքցված բովանդակության մեջ, որը agent-ը կարդում է, օրինակ՝ վեբ էջեր, ֆայլեր կամ email-ներ։
Շարունակեք սովորել
Պրոդուկտի գաղափար ունե՞ք։Եկեք ստեղծենք այն։
Պատմեք ձեր գաղափարի, պրոդուկտի կամ թիմի մասին։ Սովորաբար պատասխանում եմ մեկ աշխատանքային օրվա ընթացքում։