두 컨텍스트 공급자는 장기 실행 작업을 지원합니다.
- 할 일 공급자는 추적 가능한 작업 항목을 저장하고 에이전트 도구에 추가, 완료, 제거 및 검사할 수 있는 도구를 제공합니다.
- 에이전트 모드 공급자는 현재 운영 모드를 저장하고 에이전트 도구를 사용하여 읽거나 변경할 수 있습니다.
계획만 필요한 경우 이러한 공급자를 직접 작성하거나 Harness 에이전트를 사용하여 더 광범위한 기본 파이프라인의 일부로 사용하도록 설정합니다.
할 일 도구
.NET 및 Python 공급자는 동일한 모델 관련 도구를 노출합니다.
| Tool | Purpose |
|---|---|
todos_add |
제목 및 선택적 설명이 있는 하나 이상의 항목을 추가합니다. |
todos_complete |
하나 이상의 항목이 완료된 것으로 표시하고 완료 이유를 포함합니다. |
todos_remove |
더 이상 관련이 없는 항목을 제거합니다. |
todos_get_remaining |
불완전한 항목을 반환합니다. |
todos_get_all |
완료되고 불완전한 항목을 반환합니다. |
공급자는 각 실행 전에 현재 할 일 목록을 삽입하므로 에이전트가 미해결 작업을 다시 시작할 수 있습니다.
계획 및 실행 모드
AgentModeProvider 기본적으로 공급 및 planexecute 모드:
- 계획은 대화형입니다. 에이전트는 요구 사항을 분석하고, 할 일들을 만들고, 명확한 질문을 하고, 계획을 제시하고, 모드를 변경하기 전에 묻습니다.
- 실행 은 자율적입니다. 에이전트는 계획을 통해 작업하고, 세부 정보가 모호할 때 합리적인 선택을 하고, 할 일의 완료를 표시합니다.
공급자가 노출하고 mode_set.mode_get 해당 지침은 사용자가 전환을 명시적으로 허용하는 경우에만 모델을 사용하도록 mode_set 지시합니다. 또한 애플리케이션은 모드를 직접 변경할 수 있으므로 공급자는 다음 실행 시 모드 변경 알림을 삽입합니다.
수동으로 계획 및 할 일 설정
공급자를 가져오고 생성한 다음 다음을 통해 ChatClientAgentOptions.AIContextProviders추가합니다.
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
var todoProvider = new TodoProvider();
var modeProvider = new AgentModeProvider(
new AgentModeProviderOptions
{
DefaultMode = "plan",
});
AIAgent agent = chatClient.AsAIAgent(new ChatClientAgentOptions
{
AIContextProviders = [todoProvider, modeProvider],
});
AgentSession session = await agent.CreateSessionAsync();
를 사용하여 모드 이름 및 지침을 사용자 지정합니다 AgentModeProviderOptions.Modes. .NET 할 일 공급자는 상태를 저장합니다AgentSession.StateBag.
TodoProviderOptions 명령을 바꾸거나, 삽입된 todo-list 메시지를 표시하지 않거나, 사용자 지정 메시지 작성기를 제공할 수 있습니다.
기본 plan 지침에는 메모리를 파일로 계획 작성이 포함됩니다. 수동으로 구성된 에이전트가 파일 메모리 도구를 제공하지 않는 경우 모드 지침을 사용자 지정하거나 적절한 메모리 공급자를 추가합니다.
애플리케이션에서 모드 변경
await modeProvider.SetModeAsync(session, "execute");
현재 모드를 읽는 데 사용합니다 GetModeAsync .
공급자를 가져오고 생성한 다음, 일반 Agent에 추가합니다.
from agent_framework import (
Agent,
AgentModeProvider,
TodoFileStore,
TodoProvider,
)
todo_provider = TodoProvider(
store=TodoFileStore("./todo-state"),
)
mode_provider = AgentModeProvider(
default_mode="plan",
)
agent = Agent(
client=client,
context_providers=[todo_provider, mode_provider],
)
session = agent.create_session()
TodoProvider 는 기본적으로 사용됩니다 TodoSessionStore . 세션 페이로드 외부에 todo 상태를 저장해야 하는 경우 또는 사용자 지정 TodoStore 을 사용합니다TodoFileStore. 를 사용하여 AgentModeProvider(mode_instructions={...})모드 사용자 지정
기본 plan 지침에는 메모리를 파일로 계획 작성이 포함됩니다. 수동으로 구성된 에이전트가 파일 메모리 도구를 제공하지 않는 경우 적절한 메모리 공급자를 사용자 지정 mode_instructions 하거나 추가합니다.
애플리케이션에서 모드 변경
from agent_framework import get_agent_mode, set_agent_mode
set_agent_mode(
session,
"execute",
source_id=mode_provider.source_id,
available_modes=mode_provider.available_modes,
)
current_mode = get_agent_mode(
session,
source_id=mode_provider.source_id,
default_mode=mode_provider.default_mode,
available_modes=mode_provider.available_modes,
)
비고
이 페이지에 설명된 패키지된 할 일 및 에이전트 모드 공급자는 현재 Go에서 사용할 수 없습니다.
수동으로 완료할 계획 실행
Todo 추적은 진행률을 기록하지만 그 자체로 에이전트를 다시 호출하지는 않습니다. 모든 todo가 완료될 때까지 실행 모드가 계속되어야 하는 경우 바인딩된 에이전트 루프 와 결합합니다.
수동으로 구성된 에이전트를 .로 LoopAgent래핑합니다.
TodoCompletionLoopEvaluator 에서는 루프를 선택한 모드로 제한할 수 있습니다.
AIAgent loopingAgent = new LoopAgent(
agent,
new TodoCompletionLoopEvaluator(
new TodoCompletionLoopEvaluatorOptions
{
Modes = ["execute"],
}),
new LoopAgentOptions { MaxIterations = 10 });
일반 에이전트에 추가하고 AgentLoopMiddleware 모드 필터와 함께 사용합니다 todos_remaining() .
from agent_framework import (
Agent,
AgentLoopMiddleware,
todos_remaining,
todos_remaining_message,
)
agent = Agent(
client=client,
context_providers=[todo_provider, mode_provider],
middleware=[
AgentLoopMiddleware(
todos_remaining(looping_modes=["execute"]),
next_message=todos_remaining_message,
max_iterations=10,
)
],
)
Todo 기반 루프 통합은 현재 Go에서 사용할 수 없습니다.
Harness 에이전트에서 계획 및 할 일 사용
Harness 에이전트의 미리 구성된 기록, 메모리, 승인 및 관찰성 파이프라인도 원할 때 이 설정을 사용합니다.
HarnessAgent 은 기본적으로 활성화됩니다 TodoProviderAgentModeProvider . 다음을 통해 HarnessAgentOptions모드 공급자 및 선택적 할 일 기반 루프를 구성합니다.
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
var options = new HarnessAgentOptions
{
AgentModeProviderOptions = new AgentModeProviderOptions
{
DefaultMode = "plan",
},
LoopEvaluators =
[
new TodoCompletionLoopEvaluator(
new TodoCompletionLoopEvaluatorOptions
{
Modes = ["execute"],
}),
],
LoopAgentOptions = new LoopAgentOptions { MaxIterations = 10 },
};
HarnessAgent agent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await agent.CreateSessionAsync();
기본 공급자를 설정 DisableTodoProvider 하거나 DisableAgentModeProvider 제거합니다. 구성된 TodoProvider항목을 사용하려면 기본값을 사용하지 않도록 설정하고 인스턴스를 추가 AIContextProviders합니다. 를 통해 agent.GetService<TProvider>()활성화된 공급자를 확인할 수 있습니다.
create_harness_agent 는 기본적으로 두 공급자를 모두 사용하도록 설정합니다. 구성된 인스턴스를 제공하여 대체하고 선택적 할 일 기반 루프를 추가합니다.
from agent_framework import (
AgentModeProvider,
TodoFileStore,
TodoProvider,
create_harness_agent,
todos_remaining,
todos_remaining_message,
)
todo_provider = TodoProvider(store=TodoFileStore("./todo-state"))
mode_provider = AgentModeProvider(default_mode="plan")
agent = create_harness_agent(
client=client,
todo_provider=todo_provider,
mode_provider=mode_provider,
loop_should_continue=todos_remaining(looping_modes=["execute"]),
loop_next_message=todos_remaining_message,
loop_max_iterations=10,
)
session = agent.create_session()
기본 공급자를 설정 disable_todo 하거나 disable_mode 제거합니다. Python 하네스는 기본적으로 도구 자동 승인 미들웨어를 사용하도록 설정하므로 모든 실행에 전달 session 합니다.
비고
Harness 에이전트 계획 및 할 일 공급자는 현재 Go에서 사용할 수 없습니다.
세션 동작
턴 간에 동일한 세션을 사용합니다. 모드 상태는 두 SDK 모두에서 세션 지원됩니다. .NET 할 일 상태는 ;에 저장됩니다.AgentSession.StateBag Python 기본적으로 사용 TodoSessionStore 하지만 TodoFileStore 사용자 지정 TodoStore 은 todo 지속성을 외부화할 수 있습니다.
애플리케이션 코드에서 모드를 변경하면 다음 실행에 대한 일회성 모드 변경 알림이 큐에 대기합니다. 모델 연결 mode_set 도구는 모델이 이미 자체 도구 호출을 관찰했기 때문에 추가 알림을 큐에 대기하지 않습니다.
실행 계획 확인은 도구 승인 요청이 아닌 명령 수준 동작입니다. 할 일 및 모드 도구 자체는 함수 승인이 필요하지 않습니다. 호스트가 이미 필요한 권한을 얻은 경우 애플리케이션 코드는 모드를 직접 변경할 수 있습니다.