mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
96d242fa7f
* Move token params from HarnessAgent constructor to options Remove the required maxContextWindowTokens and maxOutputTokens constructor parameters from HarnessAgent and AsHarnessAgent, replacing them with optional MaxContextWindowTokens and MaxOutputTokens properties on HarnessAgentOptions. When both values are provided, compaction is enabled as before (in-loop CompactionProvider and chat reducer on the default InMemoryChatHistory Provider). When either is null, compaction is disabled entirely, making it opt-in. New constructor: HarnessAgent(IChatClient, HarnessAgentOptions?, ILoggerFactory?, IServiceProvider?) Closes #6333 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Improving comments. * feat: Add custom CompactionStrategy and DisableCompaction to HarnessAgentOptions Allow users to provide their own CompactionStrategy via options, with a clear priority system: 1. DisableCompaction=true: no compaction regardless of other settings 2. Custom CompactionStrategy provided: use it (token params ignored) 3. Both MaxContextWindowTokens and MaxOutputTokens set: default strategy 4. Otherwise: no compaction Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: Address PR review comments on compaction opt-in - Update chatClient param XML doc to reflect compaction is opt-in - Strengthen compaction tests to assert ChatReducer is null/not-null rather than just asserting construction succeeds Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
96d242fa7f
·
2026-06-09 13:06:00 +00:00
History
What this sample demonstrates
This sample demonstrates how to use a HarnessAgent with the Harness AIContextProviders (TodoProvider and AgentModeProvider) for interactive research tasks with web search capabilities powered by Azure AI Foundry. The HarnessAgent pre-configures function invocation, per-service-call chat history persistence, and context-window compaction.
Key features showcased:
- HarnessAgent — a pre-configured agent that wraps a
ChatClientAgentwith function invocation, per-service-call persistence, and context-window compaction - ToolApproval — the agent is wrapped with
UseToolApproval()to allow auto-approving tools once confirmed - Web Search — the agent can search the web for current information via
ResponseTool.CreateWebSearchTool() - TodoProvider — the agent creates and manages a todo list to track research questions
- AgentModeProvider — the agent switches between "plan" mode (breaking down the topic) and "execute" mode (answering each research question)
- Interactive conversation — you can review the agent's plan, provide feedback, and approve before execution begins
- Streaming output — responses are streamed token-by-token for a natural experience
/todoscommand — view the current todo list at any time without invoking the agent- Mode-based coloring — console output is colored based on the agent's current mode (cyan for plan, green for execute)
Prerequisites
Before running this sample, ensure you have:
- An Azure AI Foundry project with a deployed model (e.g.,
gpt-5.4) - Azure CLI installed and authenticated (
az login)
Environment Variables
Set the following environment variables:
# Required: Your Azure AI Foundry OpenAI endpoint
export AZURE_FOUNDRY_OPENAI_ENDPOINT="https://your-project.services.ai.azure.com/openai/v1/"
# Optional: Model deployment name (defaults to gpt-5.4)
export AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4"
Running the Sample
cd dotnet
dotnet run --project samples/02-agents/Harness/Harness_Step01_Research
What to Expect
The sample starts an interactive conversation loop. You can:
- Enter a research topic — the agent will analyze it and create a plan with todos
- Review and adjust — provide feedback on the plan, ask for changes, or approve it
- Type
/todos— to see the current todo list at any time - Watch execution — once approved, tell the agent to proceed and it will work through each todo
- Type
exit— to end the session
The prompt and agent output are colored by the current mode: cyan during planning, green during execution.