步骤 6:智能体工具包

工具包为聊天客户端提供了一套框架,其中包含智能体执行冗长多步骤任务所需的各项功能,包括规划/执行模式、用于制定计划的待办事项列表、上下文压缩、文件内存、文件访问,以及不再询问工具审批。 与其自己组装这些部件,不如创建一个工具包智能体,即拿即用。

使用 AsHarnessAgent 扩展方法从任意 IChatClient 创建工具包智能体。 由于工具包是通过交互式方式分多步完成任务的,因此通常需要通过对话循环来驱动它:保留一个 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();
}

工具包会在整个对话过程中为您制定计划、跟踪待办事项以及保存历史记录。 有关功能齐全的控制台(包含工具审批提示、待办事项/模式呈现和斜杠命令),请参阅 示例终端 UX。

Tip

有关可完整运行的应用程序,请参阅 .NET harness 示例。

完整示例创建一个 Microsoft Foundry 聊天客户端,用create_harness_agent对其进行包装,并在两个轮次之间重复使用一个会话。 该框架增加了规划、待办事项跟踪和压缩功能,而示例则禁用了文件记忆和 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 harness 示例。

Tip

编码agent-framework-builder-python智能体技能可以指导工具的构建和软件包选择。 它独立于运行时代理技能,后者仍然是需选择启用的 Python harness 功能。

Prerequisites

  • Go 1.26 或更高版本。
  • 代理框架 Go 代码库的本地签出。
  • Foundry 项目终结点和模型部署,通过 FOUNDRY_PROJECT_ENDPOINT 和 FOUNDRY_MODEL配置。
  • 由DefaultAzureCredential支持的 Azure 凭据,例如使用 az login 进行 Azure CLI 登录。

配置 Go 测试框架

该 agent/harness 包用于配置普通的、由提供程序支持的代理。 将 harness.AgentConfig 的结果传递给提供程序构造函数:

import (
    "context"
    "fmt"
    "os"
    "path/filepath"

    "github.com/microsoft/agent-framework-go/agent"
    "github.com/microsoft/agent-framework-go/agent/harness"
    "github.com/microsoft/agent-framework-go/examples/internal/demo"
    "github.com/microsoft/agent-framework-go/message"
    "github.com/microsoft/agent-framework-go/provider/foundryprovider"
)
    workingDirectory, err := os.Getwd()
    if err != nil {
        return fmt.Errorf("get working directory: %w", err)
    }
    cfg, err := harness.AgentConfig(harness.Config{WorkingDirectory: workingDirectory}, agent.Config{
        Name:        "HarnessAssistant",
        Middlewares: []agent.Middleware{logger},
    })
    if err != nil {
        return err
    }
    a := foundryprovider.NewAgent(
        demo.FoundryProjectEndpoint,
        demo.FoundryTokenCredential(),
        foundryprovider.ModelDeployment(demo.FoundryModel),
        foundryprovider.AgentConfig{
            Config:             cfg,
            DisableStoreOutput: true,
            Instructions:       "Help with software engineering tasks. Use memory and todos to track the current session's work.",
        },
    )

默认值包括待办事项、计划和执行模式、会话隔离的文件记忆、技能、托管 Web 搜索、工具审批中间件和 OpenTelemetry 插桩。 该帮助程序还启用每次服务调用的历史记录持久化和消息注入。

此 Foundry 示例设置DisableStoreOutput: true,以便由本地历史记录管理对话。 如果所选的提供程序或部署不支持托管的 Web 搜索,请在 中设置 。

从 Go 存储库根目录运行完整示例:

go run .\examples\02-agents\harness\step04_composite_harness

该示例跨两个轮次重复使用会话,处理工具审批请求,并打开单独的会话来演示内存隔离。 文件记忆持久保存在工作目录中的agent-file-memory下。

压缩和循环需要主动启用,并非 Go 运行框架默认启用的功能。 有关配置和组件边界,请参阅 Agent Harness。

后续步骤

更深入: