Python munkafolyamat-ellenőrzőpontok frissítése 1.13.0-ra

Az Agent Framework 1.13.0 kisebb kompatibilitástörő módosításokat tartalmaz Python munkafolyamat-végrehajtáshoz. A legtöbb alkalmazás nem igényel módosításokat. A módosítások a pontos szupersztep-számoktól vagy iterációs számoktól függő alkalmazásokat érintik, amelyek a konvergenciahatáron vannak megadva max_iterations , ellenőrzik a kezdeti üzenetforrás-azonosítót, vagy feltételezéseket tesznek az ellenőrzőpontok elhelyezéséről és sorrendjéről.

Background

Az 1.13.0 előtt az ellenőrzőpont-ellenőrzés nem felelt meg teljes mértékben annak az ígéretének, hogy rögzíti a munkafolyamat állapotát, amely a végrehajtás bármely rögzített határvonalról való folytatásához szükséges. A kezdő végrehajtó a superstep és az ellenőrzőpont ciklus előtt futott, így a legkorábbi ellenőrzőpont a kezdő végrehajtó kimenetét és frissített állapotát tartalmazta, de az eredeti munkafolyamat-bemenetet nem. Hasonlóképpen, a kéréses eseményekre adott válaszok kézbesítése és feldolgozása anélkül történt meg, hogy azokat először feljegyezték volna egy ellenőrzőponton. Ennek eredményeképpen egyetlen ellenőrzőpont sem tudta visszajátszani a kezdő végrehajtót az eredeti bemenetből, vagy reprodukálni egy emberi folytatást a továbbított válaszból.

Viselkedésbeli változások

Az 1.13.0-s verzió bezárja ezeket a hiányosságokat. A kezdő végrehajtó most az első szuperstepben fut, a belépési ellenőrzőpont rögzíti a kezdeti bemenetet a szupersztep előtt, és egy válasz-bejegyzés ellenőrzőpont rögzíti a válaszokat a feldolgozás előtt. Ezek a módosítások együttesen egy ellenőrzőponttal rendelkező munkafolyamatot teljes mértékben visszajátszhatóvá tesznek a bemenetből, beleértve a cikluson belüli emberi folytatásokat is.

Important

Ezek a módosítások nem érintik az 1.13.0-s verzió előtt létrehozott ellenőrzőpontokat. A meglévő ellenőrzőpontok továbbra is támogatottak, és a frissítés után is visszaállíthatók.

Műveletet igénylő módosítások

Area 1.13.0 előtt Az 1.13.0-s és újabb verziókban Felhasználóra gyakorolt hatás
Végrehajtó indítása A kezdő végrehajtó a superstep ciklus előtt futott. A bemenet várólistára kerül a kezdő végrehajtóhoz, amely az első szuperstepben fut. Minden friss futtatás egy további superstep_started eseményt bocsát superstep_completed ki.
Iterációk száma Az 1. iteráció az első szupersztepet jelentette a kezdő végrehajtó futtatása után. Az 1. iteráció futtatja a kezdő végrehajtót. A későbbi munka egy iterációval vált. A korábban $N$ iterációkat igénylő munkafolyamatnak most $N + 1$-ra van szüksége.
Bemeneti üzenet forrása A kezdeti üzenetben a kódolt forrásazonosító "Workflow"volt. A kezdeti üzenet a kezdő végrehajtó belső peremén keresztül érkezik, és forrásazonosítóval INTERNAL_SOURCE_ID(start_executor.id)rendelkezik. A kezdeti üzenet forrásazonosítóját beolvasó vagy szűrő kódnak az új értéket kell használnia.

Visszajátszási fejlesztések

Area 1.13.0 előtt Az 1.13.0-s és újabb verziókban Javulás
Kezdeti ellenőrzőpont Az iteráció-0 ellenőrzőpont a kezdő végrehajtó futtatása után jött létre. Rögzítette a végrehajtó kimeneti üzeneteit és frissített állapotát, de az eredeti bemenetet nem. Az 1. szupersztep előtt létrejön egy belépési ellenőrzőpont. Rögzíti a kezdő végrehajtóhoz várólistára helyezett eredeti bemenetet. A belépési ellenőrzőpont visszaállítása visszajátssza a teljes futtatást, beleértve a kezdő végrehajtót is.
Válasz ellenőrzőpont A kéréseseményre adott válasz nem lett rögzítve az ellenőrzőponton. A válaszbeviteli ellenőrzőpont a válasz kézbesítése és a felhasználó szuperstep futtatása előtt jön létre. A válasz-belépési ellenőrzőpont visszaállítása visszajátssza a választ használó folytatást.

Superstep-eseménykezelés frissítése

Egy friss munkafolyamat-futtatás most még egy pár szuperstep-eseményt hoz létre, mert a kezdő végrehajtó az 1. superstepben fut:

  • superstep_started és iteration == 1
  • superstep_completed és iteration == 1

A későbbi végrehajtói munka műszakjai egy szupersztep segítségével. Frissítse a teszteket, a telemetriát, a folyamatjelzőket vagy más kódot, amelyek pontos eseményszámot feltételeznek, vagy egy adott végrehajtót rögzített iterációra képeznek le.

Az eseménytípusokra a darabszámra vagy az iterációra való támaszkodás nélkül válaszoló kódnak nem kell változnia.

Tekintse át a maximális iterációs korlátot

A max_iterations korlát most már tartalmazza a kezdő végrehajtót futtató szuperstepet. Ha egy munkafolyamat korábban a teljes korlátját használta, növelje a konfigurált értéket eggyel:

from agent_framework import WorkflowBuilder

workflow = WorkflowBuilder(
    start_executor=start_executor,
    max_iterations=previous_max_iterations + 1,
).build()

Nincs szükség módosításra, ha a munkafolyamat már konvergál a konfigurált korlát elérése előtt.

Kezdeti üzenetforrás-ellenőrzések frissítése

Ha egy kezdő végrehajtó a kezdeti üzenet forrásazonosítóját használja, cserélje le a merevlemez-azonosítót "Workflow" a kezdő végrehajtó belső élének forrásazonosítójára.

1.13.0 előtt:

is_workflow_input = ctx.source_executor_ids != ["Workflow"]

Az 1.13.0-s és újabb verziókban:

from agent_framework import INTERNAL_SOURCE_ID

is_workflow_input = ctx.source_executor_ids != [INTERNAL_SOURCE_ID(self.id)]

INTERNAL_SOURCE_ID(executor_id) jelenleg ad "internal:<executor_id>"vissza . Használja a segédet a sztring létrehozása helyett, hogy a kód a keretrendszer forrásazonosító-formátumát kövesse.

Ellenőrzőpont kezelésének frissítése

Kezdeti beviteli ellenőrzőpontok

Ha az ellenőrzőpontozás engedélyezve van, minden új futtatás most létrehoz egy belépési ellenőrzőpontot a következő helyen iteration_count == 0: . Ez az ellenőrzőpont az eredeti bemenetet tartalmazza a kezdő végrehajtónak címzett, repülés közbeni üzenetként. A visszaállítás újrafuttatja a kezdő végrehajtót, és reprodukálja a teljes munkafolyamat-futtatást.

Minden befejezett szuperstep után a keretrendszer továbbra is létrehoz egy ellenőrzőpontot. A $N$ szupersteps-ekkel való futtatáshoz $N + 1$ ellenőrzőpontokra számíthat: a belépési ellenőrzőpontot, majd minden befejezett szupersztephez egy ellenőrzőpontot.

Tekintse át az iterációs-0 ellenőrzőpontot feltételező kódot, amely a kezdő végrehajtó által létrehozott állapotot tartalmazza. Ez az állapot most megjelenik az 1. szuperstep után létrehozott ellenőrzőponton.

Kérelem-válasz ellenőrzőpontok

Amikor folytatja a munkafolyamatot workflow.run(responses=...), a keretrendszer most létrehoz egy válasz-belépési ellenőrzőpontot a válaszok sorban állása és az őket használó szuperstep futtatása előtt. Az ellenőrzőpont visszaállítása újra visszaadja a rögzített válaszokat, és visszajátssza a munkafolyamat többi részét.

A válaszbejegyzés ellenőrzőpontja megegyezik iteration_count a függőben lévő kérést tartalmazó előző ellenőrzőponttal. Ez egy külön ellenőrzőpont, amelynek previous_checkpoint_id a függőben lévő kérések ellenőrzőpontjára mutat.

Important

A iteration_count cikluson belüli ellenőrzőpontok előzményei nem garantáltan egyediek. Kövesse a previous_checkpoint_id láncot az ellenőrzőpont-sorrend meghatározásához. Ha a legújabb ellenőrzőpontra van szüksége, használja a Checkpoint Storage API-t a legnagyobb iteration_counthelyett.

Migrálási ellenőrzőlista

  • A pontos szupersztep-számtól vagy iterációs számoktól függő frissítési állítások és eseményfelhasználók.
  • Csak az előző korlátot elérő munkafolyamatok esetében növelje max_iterations egyenként.
  • Cserélje le a kezdeti forrásazonosító-ellenőrzéseket a következőre "Workflow"INTERNAL_SOURCE_ID(start_executor.id): .
  • A végrehajtás előtti bemeneti ellenőrzőpontként kezelje az iteráció-0 ellenőrzőpontot.
  • Rendelje meg az emberi ciklikus ellenőrzőpontokat ahelyett, hogy egyedinek tekintenél iteration_count .
  • Ellenőrizze, hogy a belépési ellenőrzőpont és a válasz-belépési ellenőrzőpont ismételt elhelyezése a várt kimenetet és mellékhatásokat eredményezi-e.

A megvalósítás részleteiért lásd: A munkafolyamat-ellenőrzőpont teljes újrajátszhatóságának engedélyezése.