Галоўная / Артыкулы

Інжынерыя цыклаў для агентаў ШІ: пяць частак, чатыры распашчыя і стварэнне ў LangGraph.

Інжынерыя ціклаў для агентаў AI: пяць частак, чатыры распашчатыя формы, агент для дакладжэння і практыкавання ў LangGraph, захопленне ад неудач, і калі не трэба вярнуцца да цікла.

Выдавец: REACTAPP.TOP15 хв чытання3382 слоў

Крыніцы: Loop Engineering with Agents

Кожны агент AI ужо працуе ў цыкле, і майжэ ніхто спецыяльна не праектуе гэты цыкл. Гэтыя разлікі ведуць да таго, што агент, які тыха завершае задачу, не падобаецца таму, дзе іншыі выгарае бюджэт за ноччу, будучы перакананым, што ён досягае прагрэсу. Практыка скасавання гэтых разлікаў мае свае назва: інжынерыя цыклаў.

Структурна ў гэтым мало чаго. На кожным кроку агент разважае, што робіць, выкананае дзеянне — напрыклад, вызов інструмента або пошук — пасля чаго ён аналізуе рэзультаты і зноў разважае. Гэты цыкл разумовых працэсаў, дзеянняў і абзірвання стоіць у основе такіх інструментоў, як Claude Code і Cursor. Час ад часу патрэбнымі становіліся навыкі формулювання запітоў, тое ўсё лепшага формулювання адзінаго запіту. Мадэлі, якія можуць дзеяць, шукаць і чытаць своі выходныя даны, паднялі большую запытанне: што выбірае наступны крок агента і што кажа яму зупініцца?

Інжыніерыя цікла — гэта прычынна практыка даўання адпаведных адказаў. Дзяржаўальнік выбірае мету, крытэрыя перагледу і пункт завершэння, пасля чаго стварае компактную сістэму, якая адзін раз зафіксавае цю мету і дазволяе агенту продаваць працэс парадоксаў пакуль задача не будзе завершана. Адпаведна, адпаведнасць пераходзіць з пасляпэўнага керавання агентам па кроках на стварэнне таго, што неабходна для выпанення інструкцый.

Гэта супернагледная ідэя, але самэ гэтам часам пачынаецца самая складная частка. Некачэнныя ціклы выкорыстоўваюць зайвыя рэсурсы, ніколі не завершаюцца або пераканваюць сябе, што працуюць. Хорашыя ціклы ёсць эканамічнымі, завершаюцца у правы момант і даюць надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзею на надзе

У прыкладах ніжэй выкарыстоўваецца LangGraph, таму што ён дапамагае лёгка адразумець структуру ціклу, але нічога тут не прыязначана конкрэтнаму фрэймворку. Тыя ж ідэі прыемлівыя і з іншым фрэймворкам для агентаў чы проста з рукапісным кодам. Фрэймворкі зміняюцца, аякія ж самыя панявы застаюцца незменнымі.

Пяць частак агентскага ціклу

Перш чым адлучыцца, калі цікл ёсць прыдатным, корыстна знаты, з чаго ён складаецца. Практычна кожны агентскі цікл мае пяць частак.

  • Трыгар. Які-небудзь запускаючы ўздзейснення, напрыклад, калі чалавек набірае слова «go», запускаецца планавальнік, прыходзіць заявка чы відкрываецца запрос да змін. Без трыгара агент застаецца без дзеяння.
  • Цель, якую можна пераканалізаваць. Лупа павінна ведаць, як выглядае завершэнне, жадаўна ў форме, яюя можа падтвердзіць машына. Удосконаленне прыстанку спрыяе бесканечнаму выкананню. Неабходна, каб усі тэсты працавалі, альбо была даўана адпаведнасць, у якой усе твэрджэнні падкрэплены джэрамі, і якая забезпечвае справжню межу завершэння.
  • Інструменты. Агент павінен маты можлівасць дзеяць і таксама спазірваць рэзультат: запускаць код і чытаць адзінкі, альбо шукаць у інтэрнэты і чытаць рэзультаты. Калі сэраўак ніколі не адпавядае, агент толькі здагадваецца.
  • Стан. Гэта ўсё, што відбываецца падчас выканання задання: падзеі, якія ўжо адбыліся, нарадкі, колькі раундаў працавало. Гэта найскладнейшая частка дызайну лупы, адтолькі што занадта вялікі стан пакрывае корыстны сігнал шумамі.
  • Правіла завершэння. Яны візначаюць, як заканчываецца цыкл, і існуе тры якія варыянты. Успех означае, што была досягнута мета. Здачася означае, што быў выкарыстоўан бюджэт спроб. Перадача означае, што цыкл стаўся на ўзбочэнні з-за чагось небяпечнага або неяснага, і ён быў перадан чалавеку замест таго, каб прымусіцься здагадвацца.

Рэшта дыскусіі, якая расглядае, калі трэба весты цыкл, калі — ні і як, выходзіць з гэтых пяці пунктав.

Калі цыкл ўзводзі плоды

Цыкл стае неабходным, калі адна праходзка праз модэль недастатня, і задача дасканальна вымагае, каб агент пробаваў, перакантроліваў і пробаваў знову. Чатыры сігналы указваюць на гэта.

  • Рэзультаты можна пераканаць. Гэта якраз найважлівейша частка. Калі рэзультат можна аўтаматычна пераканаць – чыргаваюць тэсты, адпаведна ўсё праходзіць або не праходзіць, адпаведна ў адпаведзі ёсць або няма рэальных выкладнікаў, чы рэчавым дадзенням ёсць або няма правільнага фармата, тады цыкл можа выкарыстаць гэтыя перакананні, каб знайсці правільны варыянт. Перакананне выступае як керама, а цыкл без яго проста трацыць грошы.
  • Першая спроба часта бывае некорэктной, але яе можна пасправіць. Код, чэрнавікі доследжэнняў і чыстка некаляканых дадзенняў стаюць лепшымі з кожным разам. Агент стварае якісь рэзультат, з’являецца увага да дыфектаў і яны пасправляюцца.
  • Ніхто не ведае, скількі крокаў будзе патрэбна. Аднаго роду проблема сёння можа выклікваць два крокі, а завтра – семь. Фіксаваныя працэсы не можу так адчувствіваць змяны, тады як цыкл, які продовжаецца да досягнення меты, можа.
  • Ніхто не стачырае. Адаробка заявак у ночны час або прабавы працавання нестабільнай інтэграцыі пакуль яна не запрацуе вымагаюць сістэмы, якая сама выбірае наступны крок і не чакае на паведамлення.
  • Ярок прыклад — гэты доследны агент, які пераглядае сябе ж свае нараджэнні. Ён прабуее адпаведзь, пераканальваецца, чы рэшанні падтрымліваюць кожна з твэрдзенняў, і зноў вяртаецца да тых, якія ўзяліся слабкія. Ён продовжае такі цыкл, пакуль адпаведзь не стане адпрацоўаным або не будзе досягнута межа. Усе чатыры сігналы ўсёродзе, і гэты агент практычна створаны на адповідны прыклад.

    Звычныя формы цыклаў

    Большасць агентных цыклаў ўскладненні калякоў канкрэтных форм. Іх адгледжэнне памагае з’ясаваць, каторую форму патрэбуе проблема, прычым нічога ўсё ўсё ўжо не было з’едынавана.

    Стварэнне і перакананне, іншымі словамі — адбіракцыя. У першым этапе ствараецца выходны рэзультат, а ў другім яго адбываецца перагляд; гэты цыкл павтараецца пакуль перагляд не будзе успешным. Сігнал керавання ёсць бінарным: перагляд можа затвердзіць рэзультат або паказаць, што не так. Гэты падход падходзіць для сітуацый, дзе можна пераканацца ў правільнасці, напрыклад, для коду, які павінен працаваць у тэстах, або для даследжэнняў, чыя тверджэнні патрабуюць падтрымкі. Гэтае ўзора ўтвараецца пазней.

       +-----------+      +-----------+
    -->| Generate  |----->|  Verify   |----- pass -----> [ done ]
       +-----------+      +-----+-----+
            ^                   |
            +------- fail ------+
    

    Выберыце гэты падход, калі існуе об’ектыўны тэст на правільнасць, і агент павінен продаваць рэмонтаванне пакуль тэст не пройдзе. Класычным прыкладам ёсць агент, які пішае SQL-запыт, запускае яго і ціклізуе, пакуль запыт не будзе выкананы і не вернуе правдападобныя рэкорды.

    Атрыбуты ацэнкавальніка і оптымізатора, якія таксама называюцца генераваннем і оцэнкаваннем. Атрыбут оцэнкавальніка ставіць бал кожнай спробе заместо простага «так» чы «нет», а цікл прагне да найвышэйшага бала, а не толькі да правільнага рэзультата. Гэта дапамагае, калі няма чыстага прызнака прыемнасці чы непрыемнасці, але все ж можна вымерыць паняву «лепшага», як у налагоджэнні запытання, удосконаленні тэкста адарынку чы ранжыраванні рэзультатаў.

       +-----------+      +-----------+
    -->| Generate  |----->|  Score    |--- good enough --> [ done ]
       +-----------+      +-----+-----+
            ^                   |
            +-- improve --------+
                (use the score)
    

    Выберыце тады, калі якасць можа быць адметавана на шкале і ў той жытак практычна парадактувана. Разрабатка слогана для продукту, калі за дапамою шкалы адметуецца яго яснасць і выразнасць, а цыкл выбірае найкрашчы варыянт, дэманструее гэю ідэю.

    Планаванне, адкананне, парадзельны планаванне. Планавальнік накрэсляе этапы, а адканальнікі іх выкананяюць, і калі на якомнебудзь этапе выявляецца нечаканае, цыкл вяртаецца, каб пераскладзіць план. Цыкл абрамляе весь план, а не толькі адзін рэзультат, таму ён падходзіць для працы з нефіксаваным канцэном, якая складаецца з калькі этапаў, такой як дакледжэнні або праект прыемніка.

       +-----------+      +-----------+
    -->|   Plan    |----->|  Execute  |-- all steps done --> [ done ]
       +-----------+      +-----+-----+
            ^                   |
            +-- replan ---------+
                (hit a surprise)
    

    Выберыце гэты варыянт, калі задача складаецца з многа крокаў, і не всі з іх можна знайсці з самага пачатку. Міграцыя службы ў новую парадку таксама працюе: плануеце крокі, прыначынаеце ўжыццё і перапланаваеце, калі які-небудзь крок адкрывае нечаканую залежнасць.

    Запланаваны ці цікл адзорвання. У працоўкі замест таго, каб ітарацыйна працаваць над цялевым рэзультатам за адну практыку, гэты варыянт працюе па таймеры або пад час падыходжэння паводку, каб старацца і рэагаваць — напрыклад, сортаваць новыя заявкі, шукаць зламаныя версіі або практыкаваць занова ненадзеяныя задачы. Ён распрастраńваецца па часе і не знаходзіцца ўнутрь адной задачы.

       +-----------+     +-----------+     +-----------+
    -->|   Wait    |---->|   Check   |---->|    Act    |---+
       | (timer /  |     +-----------+     +-----------+   |
       |  trigger) |                                       |
       +-----------+ <-------------------------------------+
            (no fixed end — keeps watching over time)
    

    Выберыце гэты варыянт, калі не існуе адзінай канцэльнай лініі, а мета — аднойчынны старанная адзірэнне і рэакцыя, падобна да перагляду пашткі кожныя калькі мінут або ўечарнага перагляду за застарэлымі запросамі.

    Гэтыя фарматы не ўзаемна выключаюць адзін другога. Рэальныя сістэмы часта ўжываюць іх разам, напрыклад, запланаваны цыкл, які ў кожны момент запускаць працэс стварэння і пераканання. Найбольш распашчытаны фармат — стварэння і пераканання — ёсць тым, які будуецца з канца ў канец далей.

    Стварэнне цыклу з LangGraph

    Агент, якіго трэба стварыць, — гэта дзеячы, які не давае паверы сваёй першай версіі. Калі ёму даецца запытанне, ён збірае інфармацыю, пішае адказ і пасля пераканальваецца ў правядзібнасць кожнага твэрджэння, супорачыць яго з рэальнымі джэрамі. Твэрджэння, якое не мае падтрымкі, адправляецца знову на дальнейшыя даследаванні. Гэты цыкл продовжваецца, пакуль не будзе готавы цэлы адказ, альбо пакуль не будзе досягнута межа прабоўкаў; тады агент вяртае сваю найкрашчую версію і пазначае тое, што яшчэ неясна. Корача кажучы, ён адпавядае, а пасля пераканальваецца, што адказ правы, перш чым яго аддаць.

    Гэтая самапераканальваючаяся дзеяльнасць — гэта самэ ўзроўнавальны цыкл «генераванне і перакананне», таму агент стварае чыстую першую версію.

    LangGraph ўжо падходзіць, таму што ён опісвае агента як граф. Вузлы — гэта элементы, якія выкананяюць задачы, а рэшткі — гэта стрэлкі, якія вялікія, што будзе выканана далей. Рэшткі могу вядзіць у спін, што дазволяе існаванне цыклу. Простая лінейная ланцоўка не можа павтарыцца, але граф можа.

    Дзеярнік мае трыя завады, адтуды і трыя вузлы. Першыя два дзеляюць работу между тым, хто стварае, і тым, хто перакантравляе; между тым, хто выканае, і тым, хто крытыкуе — гэта распад, часта зустрэчаецца ў ціклах.

                        +------------------+
      START ----------> |     Research     | <-------------+
                        | (draft / revise) |               |
                        +--------+---------+               |
                                 |                         |
                                 v                         | needs work
                        +------------------+               | (+ feedback)
                        |      Verify      |               |
                        |  (check claims)  |               |
                        +--------+---------+               |
                                 |                         |
                                 v                         |
                           +-----------+   needs work      |
                           |  Decide   |-------------------+
                           | (router)  |
                           +-----+-----+
                                 | verified / out of tries
                                 v
                              [ END ]
    
    1. Дзеерчэнне сарабарае з матэрыяламі і прабуея стварыць адпаведны адказ.
    2. Перакананне аналізуе праект адказа і пераканаецца, чыя кожна твэрдзіба падтрымваная доказамі.
    3. Рашэнне — гэта невялікі працоўнік, які чытае рашэнне і выбірае, што рабіць далей: завершыць работу чы вярнуцца і дзеерчаць недостаткі.

    Эты прыклад працуе на Python 3.12. Патрэбны тры пакеты:

    pip install langgraph==1.2.6 langchain-openai==1.3.3 pydantic==2.13.4
    
    • langgraph — гэта двыжок графа і цыкла, які включае StateGraph, START і END.
    • langchain-openai абгрунтуе мадэль чату OpenAI пад назвай ChatOpenAI.
    • pydantic візначае структураваны вынік, які вярнюе пераканальнік.

    Перад запускам трэба, каб у сяродовісці таксама быў наявны ключ API OpenAI:

    export OPENAI_API_KEY="your-key-here"
    
    from typing import TypedDict, Literal
    from langgraph.graph import StateGraph, START, END
    from langchain_openai import ChatOpenAI
    from pydantic import BaseModel, Field
    
    # A model client on OpenAI's Responses API, with the built-in web-search tool
    # bound on — so the model can search the web itself, no extra package needed.
    # "gpt-5" is a reasoning model; swap it for any current model you have access to.
    llm = ChatOpenAI(model="gpt-5", use_responses_api=True)
    searcher = llm.bind_tools([{"type": "web_search"}])
    
    MAX_ITERATIONS = 3         # a stop rule, decided up front
    
    # STATE — the shared memory passed between every node
    class ResearchState(TypedDict):
        question: str          # what we're answering
        draft: str             # the current best answer
        verdict: str           # "verified" or "needs_work"
        feedback: str          # what the verifier said to fix
        iterations: int        # how many times we've looped
    
    # The verifier returns a typed result, so the router gets a clean
    # "verified" / "needs_work" to branch on instead of parsing prose.
    class Verdict(BaseModel):
        status: str = Field(description='"verified" or "needs_work"')
        feedback: str = Field(description="claims lacking support, if any")
    
    # NODE 1 — the maker: search the web, then draft (or revise) the answer.
    def research(state: ResearchState) -> dict:
        prompt = "Search the web, then answer the question. Back every claim with a source.\n"
        if state.get("feedback"):
            prompt += f"A reviewer flagged these gaps — fix them:\n{state['feedback']}\n"
        prompt += f"\nQuestion: {state['question']}"
        draft = searcher.invoke(prompt).text
        return {"draft": draft, "iterations": state["iterations"] + 1}
    
    # NODE 2 — the checker: search for evidence, then critique the draft.
    def verify(state: ResearchState) -> dict:
        evidence = searcher.invoke(
            f"Search the web for evidence to fact-check claims about: {state['question']}"
        ).text
        checker = llm.with_structured_output(Verdict)
        result = checker.invoke(
            "You are a fact-checker. Using the evidence below, reply 'verified' "
            "only if every claim in the answer is supported; otherwise 'needs_work' "
            "and list the unsupported claims as feedback.\n\n"
            f"Evidence:\n{evidence}\n\nAnswer:\n{state['draft']}"
        )
        return {"verdict": result.status, "feedback": result.feedback}
    
    # ROUTER — the heart of the loop. Reads the verdict, picks the next step.
    def decide(state: ResearchState) -> Literal["research", "__end__"]:
        if state["verdict"] == "verified":
            return "__end__"                      # success: goal met
        if state["iterations"] >= MAX_ITERATIONS:
            return "__end__"                      # surrender: out of tries
        return "research"                         # loop back and fix the gaps
    
    # WIRE IT UP
    graph = StateGraph(ResearchState)
    graph.add_node("research", research)
    graph.add_node("verify", verify)
    
    graph.add_edge(START, "research")            # trigger
    graph.add_edge("research", "verify")         # always verify a fresh draft
    graph.add_conditional_edges("verify", decide, {
        "research": "research",                   # the backward arrow = the loop
        "__end__": END,
    })
    
    agent = graph.compile()
    
    result = agent.invoke({
        "question": "What were the main causes of the 2008 financial crisis?",
        "draft": "", "verdict": "", "feedback": "", "iterations": 0,
    })
    print(result["draft"])
    

    Два моманты выдзеляюцца. Першы: оба вузлы прабываюць у жывым вебе праз вбудоўваны інструмент web_search ад OpenAI, прыўязаны за дапамогай bind_tools. Вузел research адбывае пошук пры падготовцы праекту, ўнаследке чыяго яго тверджэнні стаюць аднойчы з рэальнымі рэзультатамі. Вузел verify адбывае пошук ўтроце, каб пераканацца ў правільнасці праекту на аднойчы з новымі доказамі, а не на памяці модэлю, і самэ гэты вторы пошук дае ціклу об’ектыўны сігнал. Другі момант: verify апыяецца на with_structured_output, які вымагае заданага фармата verdict і feedback замест абычнага тэксту, тады рутэр можа надзеязна роздзеляць шляхі без паводлівання вольнага тэксту.

    Пяць частак ціклу чыста адпавядаюць коду:

    • Трыгар: вызов invoke(...) з пытаннем пачынае ўжыццё.
    • Цель для перагляду: правіла verify магчымае буць verified або needs_work.
    • Інструменты: оба вузлы выкарыстоўваюць вбудованы пошук у інтэрнэце, research для напісання і verify для перагляду.
    • Стан: словнік ResearchState перамешчае чэрнавік, адзывы і лік ітэрацый між вузламі.
    • Правіла зупнення: маршрутызатор decide завершае працу пасля успеху або пасля досягнення MAX_ITERATIONS.

    Пасляпэўны пункт — гэта весь прынцып гэйму, калі ўжо ў маршрутызаторы знаходзіцца сэрцэ логікі ціклу. Одна лінія — «зупніцца, як толькі пераглянуто», «зупніцца пасля трох прымоў», інакш — вярнуцца — разлічвае агента, які надзеямо павышае якасць свайго адказу, ад таго, які безканечна працуе.

    У гэтым прыкладзе ёсць два выходы. У прыемных цыклах частаўкаюць трэці выход – перадача задачы чалавеку. Калі агент сталкнуецца з чым-небудзь рызыкавым або незрозумелым, для яго лепшая не толькі не здагадвацца, але і не зупыніцца тыха, а зупыніцца і практыкаваць адгукаванне, выкорыстоўваючы всю засобленую інфармацыю. У маршрутызаторы гэта проста ўсьмо ўжо адна галузь: калі доверлівасць нізкая або дзеянне чутлівае, маршрут escalate завершае цыкл і паказвае праект, нерашаныя пытанні і здабытыя спробы. Умець адгадаць, калі не трэба прымыкаты рашэнне, ўскладнівае дызайн цыкла.

    Формы неудач і іх захопнікі

    Калі цыкл запускаецца сама сабою, з’яўляецца короткі спіс прыемлівых неудач, і кожная з іх мае стандартны захопнік.

    • Бесканцэнтны цыкл. Агент ніколі не вырашае, што ўсё завершана, і продовжае працаваць, пакуль чыго-небудзь не зламаецца або грошы не скончаюцца. «Страж» — гэта жорсткі ліміт колькасці ітэрацый, напрыклад MAX_ITERATIONS вышэй, тое самае выход з цыклу, які не залежыць ад суб’екtyвнай думкі агента.
    • Спаленне токенав. З кожным пасажам перасылаецца все большы захоп кантэксту, і вітраты падыходзяць непазірна. Чыніце стан лёгкім, перадаючы толькі тое, што неабходна наступнам кроку — чырвонакі праект і конкрэтныя адзінакі, а ніколі цэлую історыю.
    • Уявны прагрэс. Агент анунціруе успех, якога не досяг, напрыклад стверджуе пра выправленне, якога ніколі не было. Не дазвольце яму пазначаць свою работу ў тым пункце, які мае значэнне. Адзінэцкі крок пераканання з об’екtyвным тэстам, тэстамі, якія насправды запускаюцца, або джэрэламі, якія насправды існуюць, робіць так, што «зроблена» значыць «зроблена».
  • Павтарэнне аднаго бяспеклівага дзеяння. Цыкл прабуе ўжо раз тое ж сама няякое дзеянне і знову сталквіцца з тым жа бяспеклівым рэзультатам. Неабходна перадача паказанага ранейша бяспеклівага рэзультата да наступной спробы, каб методыка змянілася; самэўсёле research атрымлеў feedback ад пераканальніка.
  • Дзеяння без адпаведнасці. Праз дзействаванне працоўніка ў длігі час стае важка сказаць, што і чаму адбылася. Неабходна фіксацыя кожнага крока: што бачыў агент, калі рашыў і што зрабіў. Возможнасць абсервавання больш не можна счыляць зайвай, калі цыкл тычыцца ў ўсё важнае, і існуюць такія інструменты, як LangSmith, для атрымання інформацыі пра такія запускі.
  • Полная автонамія з самага пачатку. Цыкл, які дзействаў без нагляду з першага дня, яшчэ не заслужыў доверы. Неабходна поступовае введэнне: спачатку толькі рэжым атрымання звястака, які паказвае, што ён збіраецца зрабіць, потым дзеяння пад адказам чалавека, які іх затверджуе, і нарэшце праца без нагляду; кожны наступны этап можа быць перадуць толькі пасля таго, як паказае рэзультаты папераднага.
  • Калі не трэба ствараць цыкл

    Цыклы ўзлёгкія у вікорыстоўванні, таму іх часта застаўляюць занадта часта. У такіх сітуацыях лепшы варыянт — ўжо простыя рашэнні.

    • Дастатнія адна пераглядка. Падсумаванне дакумента, пераклад тэксту, адпаведзь на фактычны запыт і класыфікацыя электрана — гэта задачы, якія можна выконаць за адну спробу. Цыкл у такіх случаях толькі падвышае вітраты, затрымкі і рызыкі непаводкі. Калі паследовнасць крокаў достатнек, вярніцеся да яе.
    • Успех немагчыма адзначыць. Калі цель суб’ектываўная або нечыста, альбо ёе можа адзначыць толькі чалавек, цыкл не мае чаго следаваць і можа заканчыцца хаотычна або ціклічна. Цель, якую нельга пераканаць, стварае машыну для азартных гэмэлей, а не цыкл.
  • Памялкі ўскладнююць або стаюць стойкімі. Цыкл, які з кожнай ітэрацыі надае электранаў, пераказвае грошы або вычырае даны, можа быстра завандальніць. Залучайце чалавека да процэсу затверджэння або не выконвуйце цыкл для наступных дзеянняў.
  • Скорасць і косцы маюць перавагу над автонаміяй. Кожная ітэрацыя значыць дадатковыя вызовы, токены і час. У функцыях з вялікым обсягам, малымя маржамі або чутлівымі да затрымакоў аспектамі, прыемны вызов часта лепшы за хітры, але дорогі цыкл.
  • Адно проста правіла: калі умовы успеху і перастанку не можна запісаць, цыкл не гатовы да стварэння.

    Спіс пераконтраціяў пры выконванні цыклу

    Інжынерыя цікла перамешчае момент адплатаў. Напісанне бездоганнага запіту мае меньшое значэнне, чым праектаванне сістэмы, якая керуе агентам, тыяму значыць яго трыгер, цель, інструменты, стан і правілы зупінкі. Усё-такі цікл — гэта толькі адні з інструментоў, а не стандартна альтэрнатыва. Перш за ўсё варта задаць пяць запытанняў:

    1. Можна лягкаду пераканацца ў успеху? Калі няма, прыхіліцеся да іншага падходу, таму што цікл не будзе матыць нічога, чым керавацца.
    2. Чы задача павышае свою якасць праз павтарэння? Калі дапамагае адна спроба, залучыце простыя рашэнні.
    3. Што самэўсёродна значыць «завершанае»? Запісайце умову успеху раней, чым працаваць над кодам.
    4. Калі ён павінен завершыцца? Установіце жорсткі ліміт, каб цікл не могаў працаваць безканечна.
    5. Можна безпечна павтараць дзеянні? Калі павтарэнне можа завесты да серйозных наследків, дадзіце можлівасць перагляду з боку чалавека або не вікорыстоўвайце цікл у такім кроцы.

    За адказамі на всі пяцьце запытанняяў чыста, рэзультат можа быць надзеяным цыклам, а не проста празрашным. Найлепей падходзіць скромны першы праект: адна раунд з даследжэння і пераканання, як опісана вышэй, з чыста вялікімі правіламі зупінкі ўжо на пачатку.

    Паштое зауважэнне: цыкл не толькі прышвычвае працу. Ён падсілляе будзь-яе рашэнне, якое было прынята, павтараючы як хорашыя, так і паслабыя рашэнні з шырокай шчыльнасцю. Таму мета — не проста стварыць цыкл і застацься. Патрэбна дысцыпліна, каб заставацца дастаткова блізка, каб разумець, што робіць цыкл пасля таго, як ён пачне працаваць сам, такім чынам, каб яго создаталік заставаўся яго інжынерам, а не проста людзьм, якая нажымае кнопку запуску.

    Супаўзвязаная літэратура

  • Практычныя прыемы: Апэксіт(0) – як AI-агенты выдаюць ся за успех — Паследовыя інструкцыі па вікорыстоўванню Практычных прыемаў: Апэксіт(0) – як AI-агенты выдаюць ся за успех: контракты, перакрыццяі і месцы для коду для команд, якія впрыменяюць гэты патэрн.
  • Практычныя прыемы: Стварэнне платформы AI з калькамі агентамі – Частка 5: Перцэпцыя — Паследовыя інструкцыі па вікорыстоўванні Практычных прыемаў: Стварэнне платформы AI з калькамі агентамі – Частка 5: Перцэпцыя: контракты, перакрыццяі і месцы для коду для команд, якія впрыменяюць гэты патэрн.
  • Практычныя прыемкі: Agent Loop Engineering : Полны блог па шляху да AI у працэйнай сістэме — Дэталізаваныя інструкцыі па вікорыстоўванні Практычныя прыемкі: Agent Loop Engineering : Полны блог па шляху да AI у працэйнай сістэме: контракты, перакрыццяі і шаблоны коду для команд, якія впрымоўваюць гэты патэрн. —