Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Microsoft Agent Framework tartó feladatkiterjesztésetartós végrehajtást hoz közvetlenül a Microsoft Agent Framework-be. Az ügynököket a bővítményrel regisztrálva automatikusan tartóssá teheti őket állandó munkamenetekkel, beépített API-végpontokkal és elosztott skálázással – az ügynöklogika módosítása nélkül.
Mikor érdemes tartós ügynököket használni?
Szükség esetén válassza a Durable Task bővítményt:
- Állandó beszélgetési állapot – Az ügynök munkamenetei a környezet elvesztése nélkül túlélik a folyamat összeomlását, újraindítását és skálázását.
- Többügynöki koordináció – Specializált ügynökök koordinálása determinisztikus munkafolyamatokban, automatikus ellenőrzőpont-készítéssel és hibajavítással.
- Hosszú ideig futó munkafolyamatok – Támogatja a cikluson belüli emberi jóváhagyásokat vagy az időzített várakozásokat, amelyek számítási erőforrások felhasználása nélkül tarthatnak órákig, napokig vagy hetekig.
- Scalable, kiszolgáló nélküli üzemeltetés – Skálázás több ezer egyidejű ügynöki munkamenetre (vagy nullára) a Azure Functions Flex Consumption csomagban.
Ha nincs szüksége tartós állapotra vagy többügynök-koordinációra, elegendő lehet egy szabványos Microsoft Ügynök-keretrendszer ügynök a bővítmény nélkül.
Jótanács
A helyi beállításokkal, előfeltételekkel és üzembe helyezéssel kapcsolatos részletes útmutatóért tekintse meg a Microsoft Learn
Architecture
A bővítmény belsőleg entitásalapú ügynökhurkokat implementál, ahol minden ügynök-munkamenet egy tartós entitás, amely automatikusan kezeli a beszélgetés állapotát és az ellenőrzőpontozást.
A bővítmény két üzemeltetési módszert támogat:
- Azure Functions a Azure Functions integrációs csomag használatával.
- Hozza el a saját számítási erőforrásait az alapcsomag használatával.
Ügynök üzemeltetése
Definiálja az ügynököt a standard Microsoft Agent Framework-mintával, majd javítsa ki a Durable Task kiterjesztéssel. A bővítmény automatikusan kezeli a munkamenetek megőrzését, a végpontok létrehozását és az állapotkezelést.
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT")
?? "gpt-4o-mini";
// Create an AI agent using the Microsoft Agent Framework pattern
AIAgent agent = new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a professional content writer who creates engaging, "
+ "well-structured documents for any given topic.",
name: "DocumentPublisher");
// One line to make the agent durable with serverless hosting
using IHost app = FunctionsApplication
.CreateBuilder(args)
.ConfigureFunctionsWebApplication()
.ConfigureDurableAgents(options => options.AddAIAgent(agent))
.Build();
app.Run();
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT")
?? "gpt-4o-mini";
// Create an AI agent using the Microsoft Agent Framework pattern
AIAgent agent = new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a professional content writer who creates engaging, "
+ "well-structured documents for any given topic.",
name: "DocumentPublisher");
// Host the agent with Durable Task Scheduler
string connectionString = "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None";
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.ConfigureDurableAgents(
options => options.AddAIAgent(agent),
workerBuilder: builder => builder.UseDurableTaskScheduler(connectionString),
clientBuilder: builder => builder.UseDurableTaskScheduler(connectionString));
})
.Build();
await host.StartAsync();
Megjegyzés:
A C#-példák AIProjectClient a Azure.AI.Projects csomagból származnak, ami az új projektek ajánlott mintája. A Python példák a FoundryChatClient-t használják agent_framework.azure-ből. Mindkét ügyfél támogatja a .AsAIAgent() / .as_agent() Durable Task kiterjesztéssel integrálható bővítményt. A legújabb csomaghivatkozásokért tekintse meg a mintákat a GitHubon.
Többügynök-vezénylés tartós ellenőrzőpontokkal
A tartós vezénylés lépéseiként több specializált ügynököt is koordinálhat. Minden ügynökhívást ellenőrzőpontokkal látunk el, és az automatizált folyamat automatikusan helyreáll, ha egy lépés kudarcot vall. A befejezett ügynökhívások nem lesznek újra végrehajtva a helyreállítás során.
A context.GetAgent() (C#) vagy app.get_agent() (Python) használatával kérheti le az orchestrationön belüli regisztrált ügynököket. A visszaadott DurableAIAgent burkoló biztosítja a hívások nyomon követését és ellenőrzését a keretrendszerben.
Az alábbi példa egy egymást követő többügynökös munkafolyamatot mutat be, ahol egy kutató ügynök információkat gyűjt, és egy író ügynök létrehoz egy dokumentumot.
[Function(nameof(DocumentPublishingOrchestration))]
public async Task<string> DocumentPublishingOrchestration(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
var docRequest = context.GetInput<DocumentRequest>();
DurableAIAgent researchAgent = context.GetAgent("ResearchAgent");
DurableAIAgent writerAgent = context.GetAgent("DocumentPublisherAgent");
// Step 1: Research the topic
AgentResponse<ResearchResult> researchResult = await researchAgent
.RunAsync<ResearchResult>(
$"Research the following topic: {docRequest.Topic}");
// Step 2: Write the document using the research findings
AgentResponse<DocumentResponse> document = await writerAgent
.RunAsync<DocumentResponse>(
$"""Create a document about {docRequest.Topic}.
Research findings: {researchResult.Result.Findings}""");
// Step 3: Publish
return await context.CallActivityAsync<string>(
nameof(PublishDocument),
new { docRequest.Topic, document.Result.Text });
}
static async Task<string> DocumentPublishingOrchestration(
TaskOrchestrationContext context, DocumentRequest docRequest)
{
DurableAIAgent researchAgent = context.GetAgent("ResearchAgent");
DurableAIAgent writerAgent = context.GetAgent("DocumentPublisherAgent");
// Step 1: Research the topic
AgentResponse<ResearchResult> researchResult = await researchAgent
.RunAsync<ResearchResult>(
$"Research the following topic: {docRequest.Topic}");
// Step 2: Write the document using the research findings
AgentResponse<DocumentResponse> document = await writerAgent
.RunAsync<DocumentResponse>(
$"""Create a document about {docRequest.Topic}.
Research findings: {researchResult.Result.Findings}""");
// Step 3: Publish
return await context.CallActivityAsync<string>(
nameof(PublishDocument),
new { docRequest.Topic, document.Result.Text });
}
Gráfalapú munkafolyamatok Microsoft Ügynök-keretrendszerrel
A Durable Task bővítmény támogatja a Microsoft Agent Framework munkafolyamatait is, amelyek deklaratív, gráfalapú programozási modellt (WorkflowBuilder) használnak a végrehajtók és ügynökök többlépéses folyamatainak definiálásához. A bővítmény automatikusan ellenőrzi a gráf minden lépését, és a munkafolyamat-definíció módosítása nélkül helyreállítja a hibákat.
A munkafolyamatok kiegészítik a vezényléseket: vezényléseket használnak az imperatív ügynökök feltételes logikával való összehangolásához, valamint rögzített gráftopológiákhoz tartozó munkafolyamatokat a típus által ellenőrzött üzenet-útválasztással.
Szekvenciális munkafolyamat
Az alábbi példa három végrehajtót láncolt egy megrendelés-lemondási munkafolyamatba: keresse meg a rendelést, mondja le, majd küldjön egy visszaigazoló e-mailt.
OrderLookup orderLookup = new();
OrderCancel orderCancel = new();
SendEmail sendEmail = new();
Workflow cancelOrder = new WorkflowBuilder(orderLookup)
.WithName("CancelOrder")
.WithDescription("Cancel an order and notify the customer")
.AddEdge(orderLookup, orderCancel)
.AddEdge(orderCancel, sendEmail)
.Build();
using IHost app = FunctionsApplication
.CreateBuilder(args)
.ConfigureFunctionsWebApplication()
.ConfigureDurableWorkflows(workflows => workflows.AddWorkflows(cancelOrder))
.Build();
app.Run();
A OrderLookup, OrderCancel és SendEmail végrehajtók standard Microsoft Agent Framework-végrehajtók tartós kód nélkül. A teljes implementációkért tekintse meg a samples GitHub.
string dtsConnectionString = Environment.GetEnvironmentVariable("DURABLE_TASK_SCHEDULER_CONNECTION_STRING")
?? "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None";
OrderLookup orderLookup = new();
OrderCancel orderCancel = new();
SendEmail sendEmail = new();
Workflow cancelOrder = new WorkflowBuilder(orderLookup)
.WithName("CancelOrder")
.WithDescription("Cancel an order and notify the customer")
.AddEdge(orderLookup, orderCancel)
.AddEdge(orderCancel, sendEmail)
.Build();
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.ConfigureDurableWorkflows(
workflowOptions => workflowOptions.AddWorkflow(cancelOrder),
workerBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString),
clientBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString));
})
.Build();
await host.StartAsync();
IWorkflowClient workflowClient = host.Services.GetRequiredService<IWorkflowClient>();
IAwaitableWorkflowRun run = (IAwaitableWorkflowRun)await workflowClient.RunAsync(cancelOrder, "ORD-12345");
string? result = await run.WaitForCompletionAsync<string>();
A OrderLookup, OrderCancel és SendEmail végrehajtók standard Microsoft Agent Framework-végrehajtók tartós kód nélkül. A teljes implementációkért tekintse meg a samples GitHub.
Ki- és beillő (egyidejű) munkafolyamat
Több végrehajtóra vagy ügynökre szétoszthatja a feladatokat, amelyek párhuzamosan futnak, majd összegyűjtheti az eredményeket. Az alábbi példa egy tudományos kérdést küld egy fizikusnak és vegyészügynöknek párhuzamosan, majd összesíti a válaszaikat.
ChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint), new DefaultAzureCredential()).GetChatClient(deploymentName);
AIAgent physicist = chatClient.AsAIAgent(
"You are a physics expert. Be concise (2-3 sentences).", "Physicist");
AIAgent chemist = chatClient.AsAIAgent(
"You are a chemistry expert. Be concise (2-3 sentences).", "Chemist");
ParseQuestionExecutor parseQuestion = new();
AggregatorExecutor aggregator = new();
Workflow workflow = new WorkflowBuilder(parseQuestion)
.WithName("ExpertReview")
.AddFanOutEdge(parseQuestion, [physicist, chemist])
.AddFanInBarrierEdge([physicist, chemist], aggregator)
.Build();
using IHost app = FunctionsApplication
.CreateBuilder(args)
.ConfigureFunctionsWebApplication()
.ConfigureDurableWorkflows(workflows => workflows.AddWorkflows(workflow))
.Build();
app.Run();
A ParseQuestionExecutor és AggregatorExecutor standard Microsoft Agent Framework-végrehajtók, amelyek nem tartalmaznak Durable-specifikus kódot. A teljes implementációkért tekintse meg a samples GitHub.
string dtsConnectionString = Environment.GetEnvironmentVariable("DURABLE_TASK_SCHEDULER_CONNECTION_STRING")
?? "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None";
ChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint), new DefaultAzureCredential()).GetChatClient(deploymentName);
ParseQuestionExecutor parseQuestion = new();
AIAgent physicist = chatClient.AsAIAgent(
"You are a physics expert. Be concise (2-3 sentences).", "Physicist");
AIAgent chemist = chatClient.AsAIAgent(
"You are a chemistry expert. Be concise (2-3 sentences).", "Chemist");
AggregatorExecutor aggregator = new();
Workflow workflow = new WorkflowBuilder(parseQuestion)
.WithName("ExpertReview")
.AddFanOutEdge(parseQuestion, [physicist, chemist])
.AddFanInBarrierEdge([physicist, chemist], aggregator)
.Build();
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.ConfigureDurableOptions(
options => options.Workflows.AddWorkflow(workflow),
workerBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString),
clientBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString));
})
.Build();
await host.StartAsync();
IWorkflowClient workflowClient = host.Services.GetRequiredService<IWorkflowClient>();
IWorkflowRun run = await workflowClient.RunAsync(workflow, "Why is the sky blue?");
if (run is IAwaitableWorkflowRun awaitableRun)
{
string? result = await awaitableRun.WaitForCompletionAsync<string>();
Console.WriteLine(result);
}
A ParseQuestionExecutor és AggregatorExecutor standard Microsoft Agent Framework-végrehajtók, amelyek nem tartalmaznak Durable-specifikus kódot. A teljes implementációkért tekintse meg a samples GitHub.
Feltételes útválasztási munkafolyamat
Futtatási eredmények alapján különböző ágakhoz irányíthatja a végrehajtást. Az alábbi példa egy levélszemétészlelő ügynököt használ a bejövő e-mailek besorolásához, majd egy levélszemétkezelőhöz vagy egy e-mail-segédügynökhöz irányít.
AIAgent spamDetector = chatClient.AsAIAgent(
"You are a spam detection assistant. Return JSON with is_spam (bool) and reason (string).",
"SpamDetectionAgent");
AIAgent emailAssistant = chatClient.AsAIAgent(
"You are an email assistant. Draft a professional response.",
"EmailAssistantAgent");
SpamHandlerExecutor spamHandler = new();
EmailSenderExecutor emailSender = new();
Workflow workflow = new WorkflowBuilder(spamDetector)
.WithName("EmailClassification")
.AddSwitchCaseEdgeGroup(spamDetector, [
new Case(condition: IsSpamDetected, target: spamHandler),
new Default(target: emailAssistant),
])
.AddEdge(emailAssistant, emailSender)
.Build();
using IHost app = FunctionsApplication
.CreateBuilder(args)
.ConfigureFunctionsWebApplication()
.ConfigureDurableWorkflows(workflows => workflows.AddWorkflows(workflow))
.Build();
app.Run();
A SpamHandlerExecutor és EmailSenderExecutor standard Microsoft Agent Framework-végrehajtók, amelyek nem tartalmaznak Durable-specifikus kódot. A teljes implementációkért tekintse meg a samples GitHub.
string dtsConnectionString = Environment.GetEnvironmentVariable("DURABLE_TASK_SCHEDULER_CONNECTION_STRING")
?? "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None";
ChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint), new DefaultAzureCredential()).GetChatClient(deploymentName);
AIAgent spamDetector = chatClient.AsAIAgent(
"You are a spam detection assistant. Return JSON with is_spam (bool) and reason (string).",
"SpamDetectionAgent");
AIAgent emailAssistant = chatClient.AsAIAgent(
"You are an email assistant. Draft a professional response.",
"EmailAssistantAgent");
SpamHandlerExecutor spamHandler = new();
EmailSenderExecutor emailSender = new();
Workflow workflow = new WorkflowBuilder(spamDetector)
.WithName("EmailClassification")
.AddSwitchCaseEdgeGroup(spamDetector, [
new Case(condition: IsSpamDetected, target: spamHandler),
new Default(target: emailAssistant),
])
.AddEdge(emailAssistant, emailSender)
.Build();
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.ConfigureDurableWorkflows(
workflowOptions => workflowOptions.AddWorkflow(workflow),
workerBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString),
clientBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString));
})
.Build();
await host.StartAsync();
IWorkflowClient workflowClient = host.Services.GetRequiredService<IWorkflowClient>();
IAwaitableWorkflowRun run = (IAwaitableWorkflowRun)await workflowClient.RunAsync(workflow, "Check this email for spam");
string? result = await run.WaitForCompletionAsync<string>();
A SpamHandlerExecutor és EmailSenderExecutor standard Microsoft Agent Framework-végrehajtók, amelyek nem tartalmaznak Durable-specifikus kódot. A teljes implementációkért tekintse meg a samples GitHub.
Human-in-the-loop (HITL) munkafolyamat
A munkafolyamat-végrehajtást a kijelölt pontokon szüneteltetheti, hogy várjon a külső bemenetre a folytatás előtt. Az Microsoft Agent Framework munkafolyamat-modellje RequestPort csomópontokat (.NET) vagy ctx.request_info() (Python) használ a szüneteltetési pontok meghatározásához. Az alábbi példa egy költségtérítési munkafolyamatot implementál egy felettes jóváhagyásával, majd párhuzamos költségvetést és megfelelőségi jóváhagyásokat.
CreateApprovalRequest createRequest = new();
RequestPort<ApprovalRequest, ApprovalResponse> managerApproval =
RequestPort.Create<ApprovalRequest, ApprovalResponse>("ManagerApproval");
PrepareFinanceReview prepareFinanceReview = new();
RequestPort<ApprovalRequest, ApprovalResponse> budgetApproval =
RequestPort.Create<ApprovalRequest, ApprovalResponse>("BudgetApproval");
RequestPort<ApprovalRequest, ApprovalResponse> complianceApproval =
RequestPort.Create<ApprovalRequest, ApprovalResponse>("ComplianceApproval");
ExpenseReimburse reimburse = new();
Workflow expenseApproval = new WorkflowBuilder(createRequest)
.WithName("ExpenseReimbursement")
.WithDescription("Expense reimbursement with manager and parallel finance approvals")
.AddEdge(createRequest, managerApproval)
.AddEdge(managerApproval, prepareFinanceReview)
.AddFanOutEdge(prepareFinanceReview, [budgetApproval, complianceApproval])
.AddFanInBarrierEdge([budgetApproval, complianceApproval], reimburse)
.Build();
using IHost app = FunctionsApplication
.CreateBuilder(args)
.ConfigureFunctionsWebApplication()
.ConfigureDurableWorkflows(workflows =>
workflows.AddWorkflow(expenseApproval, exposeStatusEndpoint: true))
.Build();
app.Run();
A keretrendszer automatikusan létrehoz három HTTP-végpontot a HITL-interakcióhoz.
-
POST /api/workflows/{name}/run: A munkafolyamat indítása -
GET /api/workflows/{name}/status/{id}: Állapot és függőben lévő jóváhagyások ellenőrzése -
POST /api/workflows/{name}/respond/{id}: Jóváhagyási válasz küldése a folytatáshoz
A munkafolyamaton áthaladó adatokat a következő rekordtípusok határozzák meg:
public record ApprovalRequest(string ExpenseId, decimal Amount, string EmployeeName);
public record ApprovalResponse(bool Approved, string? Comments);
A CreateApprovalRequest, PrepareFinanceReview és ExpenseReimburse végrehajtók standard Microsoft Agent Framework-végrehajtók tartós kód nélkül. A teljes implementációkért tekintse meg a samples GitHub.
string dtsConnectionString = Environment.GetEnvironmentVariable("DURABLE_TASK_SCHEDULER_CONNECTION_STRING")
?? "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None";
CreateApprovalRequest createRequest = new();
RequestPort<ApprovalRequest, ApprovalResponse> managerApproval =
RequestPort.Create<ApprovalRequest, ApprovalResponse>("ManagerApproval");
PrepareFinanceReview prepareFinanceReview = new();
RequestPort<ApprovalRequest, ApprovalResponse> budgetApproval =
RequestPort.Create<ApprovalRequest, ApprovalResponse>("BudgetApproval");
RequestPort<ApprovalRequest, ApprovalResponse> complianceApproval =
RequestPort.Create<ApprovalRequest, ApprovalResponse>("ComplianceApproval");
ExpenseReimburse reimburse = new();
Workflow expenseApproval = new WorkflowBuilder(createRequest)
.WithName("ExpenseReimbursement")
.AddEdge(createRequest, managerApproval)
.AddEdge(managerApproval, prepareFinanceReview)
.AddFanOutEdge(prepareFinanceReview, [budgetApproval, complianceApproval])
.AddFanInBarrierEdge([budgetApproval, complianceApproval], reimburse)
.Build();
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.ConfigureDurableWorkflows(
options => options.AddWorkflow(expenseApproval),
workerBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString),
clientBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString));
})
.Build();
await host.StartAsync();
IWorkflowClient workflowClient = host.Services.GetRequiredService<IWorkflowClient>();
IStreamingWorkflowRun run = await workflowClient.StreamAsync(expenseApproval, "EXP-2025-001");
await foreach (WorkflowEvent evt in run.WatchStreamAsync())
{
switch (evt)
{
case DurableWorkflowWaitingForInputEvent requestEvent:
Console.WriteLine($"Workflow paused at: {requestEvent.RequestPort.Id}");
ApprovalResponse approval = new(Approved: true, Comments: "Approved.");
await run.SendResponseAsync(requestEvent, approval);
break;
case DurableWorkflowCompletedEvent completedEvent:
Console.WriteLine($"Workflow completed: {completedEvent.Result}");
break;
}
}
A munkafolyamaton áthaladó adatokat a következő rekordtípusok határozzák meg:
public record ApprovalRequest(string ExpenseId, decimal Amount, string EmployeeName);
public record ApprovalResponse(bool Approved, string? Comments);
A CreateApprovalRequest, PrepareFinanceReview és ExpenseReimburse végrehajtók standard Microsoft Agent Framework-végrehajtók tartós kód nélkül. A teljes implementációkért tekintse meg a samples GitHub.
Durable Task Scheduler irányítópult
A Durable Task Scheduler irányítópult használatával teljes körűen áttekintheti a tartós ügynököket, vezényléseket és gráfalapú munkafolyamatokat:
- Az egyes ügynök-munkamenetek beszélgetési előzményeinek megtekintése
- Eszközhívások és strukturált kimenetek vizsgálata
- Vezénylési és munkafolyamat-végrehajtási folyamatok nyomon követése
- Teljesítménymetrikák monitorozása
A helyi fejlesztés (az emulátoron keresztül) és az éles üzembe helyezés egyaránt ugyanazt az irányítópultot használja.
Az alábbi képernyőképen egy ügynök-munkamenet látható a beszélgetési előzményekkel és a munkamenet részleteivel:
Az alábbi képernyőképen egy determinisztikus vezénylés látható a tevékenységek végrehajtásának részleteivel:
Munkamenet élettartam (TTL) tartós ügynökökhöz
A tartós ügynök-munkamenetek automatikusan megőrzik a beszélgetések előzményeit és állapotát, ami határozatlan ideig halmozódhat fel. Az élettartam (TTL) funkció automatikusan törli az inaktív munkameneteket, így megakadályozza a tárerőforrás-felhasználást és a megnövekedett költségeket.
Ha egy ügynök munkamenete hosszabb ideig tétlen, mint a konfigurált TTL-időszak, a munkamenet állapota automatikusan törlődik. Minden új interakció alaphelyzetbe állítja a TTL időzítőt, meghosszabbítva a munkamenet élettartamát.
Alapértelmezett értékek
- Alapértelmezett TTL: 14 nap
- Minimális TTL-törlési késleltetés: 5 perc
Konfiguráció
A TTL globálisan vagy ügynökönként konfigurálható. Amikor egy ügynök munkamenete lejár, a teljes állapota törlődik, beleértve a beszélgetési előzményeket és az egyéni állapotadatokat is. Ha a törlés után egy üzenet érkezik ugyanahhoz a munkamenethez, a rendszer új munkamenetet hoz létre egy friss beszélgetési előzményekkel.
Megjegyzés:
A TTL-konfiguráció jelenleg csak .NET érhető el.
services.ConfigureDurableAgents(
options =>
{
// Set global default TTL to 7 days
options.DefaultTimeToLive = TimeSpan.FromDays(7);
// Agent with custom TTL of 1 day
options.AddAIAgent(shortLivedAgent, timeToLive: TimeSpan.FromDays(1));
// Agent with custom TTL of 90 days
options.AddAIAgent(longLivedAgent, timeToLive: TimeSpan.FromDays(90));
// Agent using global default (7 days)
options.AddAIAgent(defaultAgent);
// Agent with no TTL (never expires)
options.AddAIAgent(permanentAgent, timeToLive: null);
});
Ismert korlátozások
Beszélgetés maximális mérete.
Az ügynöki munkamenet állapotára, beleértve a teljes beszélgetési előzményt, a tartós háttérrendszer állapotméret korlátai vonatkoznak. A Durable Task Scheduler használatakor az entitásállapot maximális mérete 1 MB. Azok a beszélgetések, amelyek hosszú ideig futnak nagy eszközhívási válaszokkal, elérhetik ezt a korlátot. A beszélgetési előzmények tömörítését manuálisan kell elvégezni, például egy új ügynök-munkamenet elindításával és a korábbi környezet összegzésével.Késleltetés.
Az ügynök minden interakciója a Durable Task Scheduler-en keresztül van irányítva, ami nagyobb késleltetést okoz az ügynök közvetlen memória-alapú végrehajtásával összehasonlítva. Ez a kompromisszum tartósságot és elosztott skálázást biztosít.Streaming.
Mivel a tartós ügynökök a tartós entitásokon felül vannak implementálva, a mögöttes kommunikációs modell a kérés/válasz. A streamelést válaszvisszahívások támogatják (például tokenek leküldése egy Redis Streambe ügyfél-felhasználásra), míg az entitás a teljes választ adja vissza a stream befejezése után.TTL-lejárat.
A TTL időzítő az utolsó üzenet óta eltelt valós idő alapján kerül meghatározásra, nem pedig az összesített tevékenységi idő alapján. A munkamenet törlése után (TTL-lejárat vagy manuális törlés) a beszélgetési előzmények nem állíthatók helyre.
További képességek
GitHub mintatárai között érhetők el a következő fejlett minták, de a jelen cikkben nem foglalkozunk velük részletesen.
| Minta | Leírás |
|---|---|
| Hosszú ideig futó eszközök | Az ügynökök tartós vezényléseket indíthatnak el az eszközhívásokból, így a hosszabb ideig futó eszközök állapotkövetéssel is használhatók. |
| Agent MCP-eszközként | A tartós ügynököket modellkörnyezeti protokoll (MCP) eszközökként teheti elérhetővé, így más ügynökök vagy ügyfelek szabványos felületen hívhatják meg őket. |
| Megbízható streamelés | Redis Streams (vagy hasonló átvitelek) használatával folytatható token streamelés valósítható meg, amely túléli az ügyfél kapcsolatbontását és újracsatlakozását. |
Kapcsolódó hivatkozások
Teljes kódminták esetén:
Teljes kódminták esetén: