mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
18d7a46a54
* .NET: Hosted Agents - RAG Sample with Azure AI Search (#5693) Adds a Hosted-AzureSearchRag sample plus a live Foundry.Hosting integration test scenario backed by a real Azure AI Search index. Sample (Hosted-AzureSearchRag): keyword-only Azure AI Search via SearchClient adapter into TextSearchProvider, scope-aware DevTemporaryTokenCredential consuming AZURE_BEARER_TOKEN_FOUNDRY + AZURE_BEARER_TOKEN_SEARCH for local Docker, Dockerfile + contributor Dockerfile mirroring Hosted-TextRag. Integration test: AzureSearchRagHostedAgentFixture extends the PR #5598 HostedAgentFixture with the new azure-search-rag scenario branch in the shared test container; AzureSearchRagHostedAgentTests asserts the model returns canary tokens (TR-CANARY-7821, SHIP-CANARY-4493) that exist only in the seeded documents - real proof the agent grounded its answer in retrieved content rather than training data. * Address PR 5701 Copilot review feedback - Sample README: drop stale 'bootstraps the index on first run' line; index is pre-provisioned out of band - Sample + TestContainer search adapters: propagate CancellationToken to await foreach via .WithCancellation()
42 lines
2.1 KiB
C#
42 lines
2.1 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System.Collections.Generic;
|
|
using AgentConformance.IntegrationTests.Support;
|
|
using Shared.IntegrationTests;
|
|
|
|
namespace Foundry.Hosting.IntegrationTests.Fixtures;
|
|
|
|
/// <summary>
|
|
/// Provisions a hosted agent that runs the test container in <c>IT_SCENARIO=azure-search-rag</c> mode.
|
|
/// Wires the container up with an Azure AI Search backed <see cref="Microsoft.Agents.AI.TextSearchProvider"/>
|
|
/// adapter that retrieves Contoso Outdoors documents from a pre-provisioned search index before each
|
|
/// model invocation.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Prerequisites managed out of band:
|
|
/// <list type="bullet">
|
|
/// <item><description>The <c>it-azure-search-rag</c> agent's managed identity must hold
|
|
/// <c>Search Index Data Reader</c> on the search service scope. Granted manually after
|
|
/// the first <c>scripts/it-bootstrap-agents.ps1</c> run; see the IT README.</description></item>
|
|
/// <item><description>The search index referenced by <c>AZURE_SEARCH_INDEX_NAME</c> must
|
|
/// already exist with the documented schema and Contoso Outdoors content. The search
|
|
/// service is shared with <c>python-sample-validation.yml</c>; no .NET-side provisioning
|
|
/// script ships with this repository.</description></item>
|
|
/// </list>
|
|
/// </remarks>
|
|
public sealed class AzureSearchRagHostedAgentFixture : HostedAgentFixture
|
|
{
|
|
protected override string ScenarioName => "azure-search-rag";
|
|
|
|
/// <summary>
|
|
/// Inject the AZURE_SEARCH_* env vars onto the hosted agent definition so the test container
|
|
/// scenario branch can construct its <c>SearchClient</c>. These names are NOT in the platform
|
|
/// reserved <c>FOUNDRY_*</c> / <c>AGENT_*</c> namespace so they are safe to set.
|
|
/// </summary>
|
|
protected override void ConfigureEnvironment(IDictionary<string, string> environment)
|
|
{
|
|
environment[TestSettings.AzureSearchEndpoint] = TestConfiguration.GetRequiredValue(TestSettings.AzureSearchEndpoint);
|
|
environment[TestSettings.AzureSearchIndexName] = TestConfiguration.GetRequiredValue(TestSettings.AzureSearchIndexName);
|
|
}
|
|
}
|