ステップ 6: エージェントハーネス

ハーネスは、エージェントが長いマルチステップ タスク (計画/実行モード、計画対象の todo リスト、コンテキスト圧縮、ファイル メモリ、ファイル アクセス、および再要求しないツールの承認) を実行するために必要なスキャフォールディングを使用してチャット クライアントをラップします。 これらのパーツを自分で組み立てる代わりに、ハーネス エージェントを作成すれば、すぐに使える状態で利用できます。

IChatClient拡張メソッドを使用して、任意のAsHarnessAgentからハーネス エージェントを作成します。 ハーネスは多くのステップにわたって対話的にタスクを処理するため、通常は会話ループでこれを動かします。つまり、ハーネスの状態(プラン、ToDo、履歴)がターンをまたいで維持されるように AgentSession を保持し、ユーザーの次の指示を読み取り、生成されるエージェントの出力をストリーミングします。

using System;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

// chatClient is any IChatClient implementation (Foundry, Azure OpenAI, OpenAI, Anthropic, ...).
AIAgent agent = chatClient.AsHarnessAgent();

// A session carries the harness state (plan, todos, history) across turns.
AgentSession session = await agent.CreateSessionAsync();

Console.WriteLine("Harness agent ready. Type 'exit' to quit.");
while (true)
{
    Console.Write("> ");
    string? input = Console.ReadLine();
    if (string.IsNullOrWhiteSpace(input) || input.Equals("exit", StringComparison.OrdinalIgnoreCase))
    {
        break;
    }

    // Stream this turn's output as the harness plans and works through the request.
    await foreach (var update in agent.RunStreamingAsync(input, session))
    {
        Console.Write(update);
    }

    Console.WriteLine();
}

ハーネスは、会話全体にわたって計画、Todo 追跡、履歴の永続化を処理します。 ツール承認プロンプト、todo/mode レンダリング、スラッシュ コマンドを備えたフル機能のコンソールについては、 サンプルターミナル UX を参照してください。

Tip

完全に実行可能なアプリケーションについては、.NETハーネスのサンプルを参照してください。

完全なサンプルでは、Microsoft Foundry チャット クライアントを作成し、create_harness_agentでラップし、2 ターンにわたって 1 つのセッションを再利用します。 このハーネスにより、計画、to-do 追跡、圧縮が追加され、サンプルではファイル メモリと Web 検索が無効になり、フォーカスが維持されます。

import asyncio

from agent_framework import create_harness_agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential


async def main() -> None:
    agent = create_harness_agent(
        client=FoundryChatClient(
            project_endpoint="https://your-account.services.ai.azure.com/api/projects/your-project",
            model="gpt-6-luna",
            credential=AzureCliCredential(),
        ),
        agent_instructions="Help users plan and complete multi-step tasks.",
        disable_file_memory=True,
        disable_web_search=True,
    )
    session = agent.create_session()

    print(await agent.run("Plan a weekend trip to Seattle.", session=session))
    print(await agent.run("Turn that plan into a checklist.", session=session))


if __name__ == "__main__":
    asyncio.run(main())

共有セッションでは、両方の呼び出しでハーネスの状態が保持されます。 ツール承認プロンプト、to-do およびモード レンダリング、スラッシュ コマンドを含むフル機能のコンソールについては、 サンプルターミナル UX を参照してください。

Tip

詳細については、完全な入門サンプルを参照してください。 その他のパターンについては、Pythonハーネスのサンプルを参照してください。

Note

エージェント ハーネスの Go サポートは近日公開予定です。 最新の状態については、 Agent Framework Go リポジトリ を参照してください。

次のステップ

より深く進む: