계획 및 할 일

두 컨텍스트 공급자는 장기 실행 작업을 지원합니다.

  • 할 일 공급자는 추적 가능한 작업 항목을 저장하고 에이전트 도구에 추가, 완료, 제거 및 검사할 수 있는 도구를 제공합니다.
  • 에이전트 모드 공급자는 현재 운영 모드를 저장하고 에이전트 도구를 사용하여 읽거나 변경할 수 있습니다.

계획만 필요한 경우 이러한 공급자를 직접 작성하거나 Harness 에이전트를 사용하여 더 광범위한 기본 파이프라인의 일부로 사용하도록 설정합니다.

할 일 도구

.NET 및 Python 공급자는 동일한 모델 관련 도구를 노출합니다.

Tool Purpose
todos_add 제목 및 선택적 설명이 있는 하나 이상의 항목을 추가합니다.
todos_complete 하나 이상의 항목이 완료된 것으로 표시하고 완료 이유를 포함합니다.
todos_remove 더 이상 관련이 없는 항목을 제거합니다.
todos_get_remaining 불완전한 항목을 반환합니다.
todos_get_all 완료되고 불완전한 항목을 반환합니다.

공급자는 각 실행 전에 현재 할 일 목록을 삽입하므로 에이전트가 미해결 작업을 다시 시작할 수 있습니다.

계획 및 실행 모드

AgentModeProvider 기본적으로 공급 및 planexecute 모드:

  1. 계획은 대화형입니다. 에이전트는 요구 사항을 분석하고, 할 일들을 만들고, 명확한 질문을 하고, 계획을 제시하고, 모드를 변경하기 전에 묻습니다.
  2. 실행 은 자율적입니다. 에이전트는 계획을 통해 작업하고, 세부 정보가 모호할 때 합리적인 선택을 하고, 할 일의 완료를 표시합니다.

공급자가 노출하고 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 도구는 모델이 이미 자체 도구 호출을 관찰했기 때문에 추가 알림을 큐에 대기하지 않습니다.

실행 계획 확인은 도구 승인 요청이 아닌 명령 수준 동작입니다. 할 일 및 모드 도구 자체는 함수 승인이 필요하지 않습니다. 호스트가 이미 필요한 권한을 얻은 경우 애플리케이션 코드는 모드를 직접 변경할 수 있습니다.

다음 단계

자세히 알아보기