Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A valós alkalmazásokban az állapot megfelelő kezelése kritikus fontosságú több feladat vagy kérés kezelésekor. Megfelelő elkülönítés nélkül a különböző munkafolyamat-végrehajtások közötti megosztott állapot váratlan viselkedéshez, adatsérüléshez és versenyfeltételekhez vezethet. Ez a cikk bemutatja, hogyan biztosítható az állapotelkülönítés a Microsoft Agent Framework-munkafolyamatokon belül, és hogyan nyújt betekintést az ajánlott eljárásokba és a gyakori buktatókba.
Mutable Workflow Builders és nem módosítható munkafolyamatok
A munkafolyamatokat munkafolyamat-készítők hozzák létre. A munkafolyamat-szerkesztőket általában mutable-nak tekintik, ahol a szerkesztő létrehozása után vagy akár a munkafolyamat létrehozása után is hozzáadhat, módosíthat indítási végrehajtót vagy más konfigurációkat. A munkafolyamatok viszont nem módosíthatók, mivel a munkafolyamatok létrehozása után nem módosíthatók (a munkafolyamatok módosításához nincs nyilvános API).
Ez a megkülönböztetés azért fontos, mert hatással van az állapot különböző munkafolyamat-végrehajtások közötti felügyeletére. Nem ajánlott egyetlen munkafolyamat-példányt újra felhasználni több tevékenységhez vagy kéréshez, mivel ez nem kívánt állapotmegosztáshoz vezethet. Ehelyett javasoljuk, hogy minden feladathoz vagy kéréshez hozzon létre egy új munkafolyamat-példányt a szerkesztőből a megfelelő állapotelkülönítés és a szálbiztonság biztosítása érdekében.
Állapotelkülönítés biztosítása a Munkafolyamat-szerkesztőkben
Amikor egy végrehajtópéldányt közvetlenül egy munkafolyamat-szerkesztőnek ad át, a végrehajtó példány meg lesz osztva a szerkesztőtől létrehozott összes munkafolyamat-példány között. Ez problémákhoz vezethet, ha a végrehajtó példány olyan állapotot tartalmaz, amelyet nem szabad több munkafolyamat-végrehajtás között megosztani. A megfelelő állapotelkülönítés és a szálbiztonság biztosítása érdekében ajánlott olyan gyári függvényeket használni, amelyek minden munkafolyamat-példányhoz létrehoznak egy új végrehajtópéldányt.
Hamarosan...
Nem szálbiztos példa:
executor_a = CustomExecutorA()
executor_b = CustomExecutorB()
workflow_builder = WorkflowBuilder()
# executor_a and executor_b are passed directly to the workflow builder
workflow_builder.add_edge(executor_a, executor_b)
workflow_builder.set_start_executor(executor_b)
# All workflow instances created from the builder will share the same executor instances
workflow_a = workflow_builder.build()
workflow_b = workflow_builder.build()
Szálbiztos példa:
workflow_builder = WorkflowBuilder()
# Register executor factory functions with the workflow builder
workflow_builder.register_executor(factory_func=CustomExecutorA, name="executor_a")
workflow_builder.register_executor(factory_func=CustomExecutorB, name="executor_b")
# Add edges using registered factory function names
workflow_builder.add_edge("executor_a", "executor_b")
workflow_builder.set_start_executor("executor_b")
# Each workflow instance created from the builder will have its own executor instances
workflow_a = workflow_builder.build()
workflow_b = workflow_builder.build()
Jótanács
A megfelelő állapotelkülönítés és a szálbiztonság biztosítása érdekében győződjön meg arról is, hogy a gyári függvények által létrehozott végrehajtópéldányok nem osztoznak a mutable állapoton.
Ügynökállapot-kezelés
Az ügynökkörnyezet kezelése ügynökszálakon keresztül történik. Alapértelmezés szerint a munkafolyamat minden ügynöke saját szálat kap, kivéve, ha az ügynököt egyéni végrehajtó kezeli. További információt az Ügynökök használata című témakörben talál.
Az ügynöki szálak fennmaradnak a munkafolyamat-futtatások során. Ez azt jelenti, hogy ha egy ügynököt egy munkafolyamat első futtatásakor hív meg, az ügynök által létrehozott tartalom elérhető lesz ugyanannak a munkafolyamat-példánynak a későbbi futtatásaiban. Ez hasznos lehet egy tevékenység folytonosságának fenntartásához, de nem kívánt állapotmegosztáshoz is vezethet, ha ugyanazt a munkafolyamat-példányt újra felhasználják a különböző tevékenységekhez vagy kérésekhez. Annak érdekében, hogy minden tevékenység elkülönített ügynökállapotú legyen, a munkafolyamat-szerkesztőben az ügynök-előállító függvényekkel hozzon létre egy új munkafolyamat-példányt minden tevékenységhez vagy kéréshez.
Hamarosan...
Nem szálbiztos példa:
writer_agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent(
instructions=(
"You are an excellent content writer. You create new content and edit contents based on the feedback."
),
name="writer_agent",
)
reviewer_agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent(
instructions=(
"You are an excellent content reviewer."
"Provide actionable feedback to the writer about the provided content."
"Provide the feedback in the most concise manner possible."
),
name="reviewer_agent",
)
builder = WorkflowBuilder()
# writer_agent and reviewer_agent are passed directly to the workflow builder
builder.add_edge(writer_agent, reviewer_agent)
builder.set_start_executor(writer_agent)
# All workflow instances created from the builder will share the same agent
# instances and agent threads
workflow = builder.build()
Szálbiztos példa:
def create_writer_agent() -> ChatAgent:
"""Factory function to create a Writer agent."""
return AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent(
instructions=(
"You are an excellent content writer. You create new content and edit contents based on the feedback."
),
name="writer_agent",
)
def create_reviewer_agent() -> ChatAgent:
"""Factory function to create a Reviewer agent."""
return AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent(
instructions=(
"You are an excellent content reviewer."
"Provide actionable feedback to the writer about the provided content."
"Provide the feedback in the most concise manner possible."
),
name="reviewer_agent",
)
builder = WorkflowBuilder()
# Register agent factory functions with the workflow builder
builder.register_agent(factory_func=create_writer_agent, name="writer_agent")
builder.register_agent(factory_func=create_reviewer_agent, name="reviewer_agent")
# Add edges using registered factory function names
builder.add_edge("writer_agent", "reviewer_agent")
builder.set_start_executor("writer_agent")
# Each workflow instance created from the builder will have its own agent
# instances and agent threads
workflow = builder.build()
Conclusion
A Microsoft Agent Framework-munkafolyamatokban az állapotelkülönítés hatékonyan kezelhető gyári függvények és munkafolyamat-készítők használatával friss végrehajtó- és ügynökpéldányok létrehozásához. Ha minden tevékenységhez vagy kéréshez új munkafolyamat-példányokat hoz létre, fenntarthatja a megfelelő állapotelkülönítést, és elkerülheti a nem szándékos állapotmegosztást a különböző munkafolyamat-végrehajtások között.