Grounding von Agenten mit den Bing-Suchtools

Foundry-Modelle haben einen Wissensstichtag. Sie können nicht über einen festen Zeitpunkt hinaus auf neue Informationen zugreifen. Mithilfe von Grounding mit Bing Search und Grounding mit Bing Custom Search (Vorschau) können Ihre Agents öffentliche Webdaten in Echtzeit integrieren, wenn Sie Antworten generieren. Mithilfe dieser Tools können Sie Fragen wie "Was ist die top KI News heute" stellen.

Der Erdungsprozess umfasst mehrere wichtige Schritte:

  1. Abfrageformulierung: Der Agent identifiziert Informationslücken und erstellt Suchabfragen.
  2. Suchausführung: Das Grounding-Tool sendet Abfragen an Suchmaschinen und ruft die Ergebnisse ab.
  3. Informationssynthese: Der Agent verarbeitet Suchergebnisse und integriert Ergebnisse in Antworten.
  4. Quellzuordnung: Der Agent bietet Transparenz durch Zitate von Suchquellen.

Von Bedeutung

  • Grounding mit Bing-Suche und Grounding mit benutzerdefinierte Bing-Suche sind Erstanbieter-Verbrauchsdienste mit Nutzungsbedingungen für Online-Dienste. Sie unterliegen der Grounding mit Bing-Nutzungsbedingungen und den Microsoft Datenschutzbestimmungen.
  • Das Microsoft Datenschutz-Addendum gilt nicht für Daten, die an Grounding mit Bing Search oder Grounding mit Bing Custom Search gesendet werden. Wenn Sie diese Dienste verwenden, fließen Ihre Daten außerhalb der Azure Compliance- und Geo-Grenze. Das bedeutet auch, dass die Nutzung dieser Dienste auf alle erhöhten Sicherheits- und Compliance-Verpflichtungen der Government Community Cloud verzichtet, einschließlich der Datensouveränität und dem Support für Screening/Bürgerschaft, sofern zutreffend.
  • Die Nutzung von Grounding with Bing Search und Grounding with Bing Custom Search ist mit Kosten verbunden. Details finden Sie unter "Preise".
  • Im Abschnitt Manage finden Sie Informationen dazu, wie Azure Administratoren den Zugriff auf die Verwendung von Grounding mit Bing Search und Grounding mit bing Custom Search verwalten können.

Hinweis

Beginnen Sie mit dem Websuchtool. Erfahren Sie mehr über die Unterschiede zwischen der Websuche und dem Grounding mit Bing Search (oder "Grounding mit Bing Custom Search") in der Übersicht über das Webgrounding.

Verwendungsunterstützung

Die folgende Tabelle zeigt die SDK- und Setupunterstützung.

Microsoft Foundry-Unterstützung Python SDK C# SDK JavaScript SDK Java SDK REST API Basic-Agent-Setup Standard-Agent-Setup
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Hinweis

Nicht alle Modelle unterstützen Grounding mit Bing Search oder Grounding mit Bing Custom Search. Eine vollständige Liste der Modelle, die diese Tools unterstützen, finden Sie unter Toolunterstützung nach Region und Modell.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben:

  • Ein Azure-Abonnement mit den richtigen Berechtigungen.
  • Azure RBAC-Rollen:
    • Mitwirkender für die Zielressourcengruppe, während Sie die Bing-Ressource erstellen und ihre Schlüssel abrufen. Diese Rollen sind Bereitstellungsvorgänge. Verwenden Sie Microsoft Entra Privileged Identity Management (PIM), um die Rolle rechtzeitig zu aktivieren und nach Abschluss der Bereitstellung zu deaktivieren. Agent-Entwickler und -Benutzer im Alltag benötigen diese Rolle nicht.

    • Foundry Project Manager im Foundry-Projekt, um Projektverbindungen herzustellen.

    • Findry User im Foundry-Projekt zum Erstellen und Ausführen von Agents. Weitere Informationen finden Sie unter Role-based access control for Microsoft Foundry.

      Von Bedeutung

      Die Foundry-RBAC-Rollen wurden kürzlich umbenannt. Foundry User, Foundry Owner, Foundry Account Owner und Foundry Project Manager wurden zuvor Azure KI-Benutzer, Azure KI-Besitzer, Azure KI-Kontobesitzer und Azure AI Project Manager benannt. Möglicherweise werden die vorherigen Namen an einigen Stellen weiterhin angezeigt, während der Umbenennungsrollout ausgeführt wird. Die Rollen-IDs und Kernberechtigungen bleiben durch die Umbenennung unverändert.

  • Ein Foundry-Projekt, das mit einem konfigurierten Endpunkt erstellt wurde.
  • Ein KI-Modell, das in Ihrem Projekt bereitgestellt wird.
  • SDK für Ihre bevorzugte Sprache installiert:
    • Python: azure-ai-projects
    • C#: Azure.AI.Extensions.OpenAI
    • TypeScript/JavaScript: @azure/ai-projects
    • Java: com.azure:azure-ai-agents:2.0.0
  • Azure-Anmeldeinformationen, die für die Authentifizierung konfiguriert wurden (z. B. DefaultAzureCredential).
    • Für REST-Beispiele richten Sie Umgebungsvariablen ein:
      • FOUNDRY_PROJECT_ENDPOINT: Die URL des Foundry-Projekt-Endpunkts.
      • FOUNDRY_MODEL_DEPLOYMENT_NAME: Name des bereitgestellten Modells.
      • AGENT_TOKEN.
  • Das Grounding mit Bing Search-Tool funktioniert in einem netzwerkgeschützten Foundry-Projekt, verhält sich jedoch wie ein öffentlicher Endpunkt. Berücksichtigen Sie dieses Verhalten, wenn Sie das Tool in einer netzwerkgeschützten Umgebung verwenden.

Wählen Sie ein Web-Grounding-Szenario aus.

Scenario Wählen Sie diese Option, wenn Beginne hier
Allgemeine Websuche Ihr Agent benötigt aktuelle Informationen aus dem öffentlichen Web ohne eine separate Bing-Ressource oder Projektverbindung. Integrieren Sie eine Websuche direkt in einen Prompt-Agenten.
Benutzerdefinierte Bing-Suche mit Domänenbeschränkung Sie möchten die Websuch-API-Oberfläche, aber die Ergebnisse müssen aus Domänen stammen, die in Ihrer benutzerdefinierten Bing-Suchinstanz konfiguriert sind. Konfigurieren der domänenbeschränkten Websuche.
Tiefe Forschung Ihr o3-deep-research-Agent benötigt eine mehrstufige Recherche und Synthese. Verwenden Sie die direkte Websuche für umfassende Recherchen.
Grounding-Tools von Bing Sie benötigen den expliziten bing_grounding oder bing_custom_search_preview Tooltyp mit einer Bing-Projektverbindung. Bereiten Sie einen Bing-Grounding-Workflow vor.

Einrichten einer Projektverbindung

In diesem Abschnitt fügen Sie eine Projektverbindung für die Bing-Ressource hinzu und erfassen die in den Beispielen verwendeten Werte. SDK-Beispiele verwenden den Projektverbindungsnamen und lösen die Verbindungs-ID zur Laufzeit auf. REST-Beispiele verwenden die Projektverbindungs-ID. Sie können diese Bicep-Vorlage verwenden, um einen einfachen Agenten mit aktiviertem Grounding with Bing Search Tool zu erstellen.

Wenn Sie bereits über eine Projektverbindungs-ID für die Bing-Ressource verfügen, die Sie verwenden möchten, überspringen Sie diesen Abschnitt.

  1. Fügen Sie dem Projekt die entsprechende Verbindung hinzu.

    Sehen Sie sich für schrittweise Anleitungen die Informationen unter Hinzufügen einer neuen Verbindung zu Ihrem Projekt an.

    Von Bedeutung

  • Um eine Bing-Ressource zu erstellen und ihre Schlüssel abzurufen, aktivieren Sie die Rolle Mitwirkender für die Zielressourcengruppe per Just-in-Time über Microsoft Entra PIM. Deaktivieren Sie die Rolle nach der Bereitstellung. Agent-Entwickler und -Benutzer im Alltag benötigen diese Rolle nicht.
  • Um die Ressourcenschlüssel zu finden, gehen Sie zu Ihrem Grounding with Bing-Ressourceneintrag im Azure-Portal>Resource Management>Keys.
  1. Rufen Sie den Projektverbindungsnamen und die ID aus den Verbindungsdetails ab, und legen Sie dann die Werte als Umgebungsvariablen fest.
  • Für SDK-Beispiele:
    • Für Grounding mit Bing-Suche: legen Sie BING_PROJECT_CONNECTION_NAME fest.
    • Für Grounding mit benutzerdefinierter Bing-Suche: legen Sie BING_CUSTOM_SEARCH_PROJECT_CONNECTION_NAME fest.
  • Für REST-Beispiele:
    • Für Grounding mit Bing-Suche: legen Sie BING_PROJECT_CONNECTION_ID fest.
    • Für Grounding mit benutzerdefinierter Bing-Suche: legen Sie BING_CUSTOM_SEARCH_PROJECT_CONNECTION_ID fest.

Die Projektverbindungs-ID verwendet das Format:

/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}

Bing-Grounding-Workflow vorbereiten

Wählen Sie einen Workflow aus, bevor Sie eine Sprachregisterkarte öffnen. Beide Workflows erfordern eine kostenpflichtige Bing-Ressource und eine Projektverbindung.

Zusätzliche Voraussetzungen: Erstellen Sie eine Grounding mit Bing Search-Ressource, verbinden Sie sie mit Ihrem Foundry-Projekt und notieren Sie den Verbindungsnamen für SDK-Beispiele oder die Verbindungs-ID für REST-Beispiele. Legen Sie für REST auch fest BING_PROJECT_CONNECTION_ID.

Ergebnis: Ihr Agent kann das breite öffentliche Web durchsuchen und eine geerdete Antwort mit Quellenzitationen zurückgeben.

Zusätzliche Voraussetzungen: Erstellen Sie eine Ressource und Instanz für Grounding mit Bing Custom Search, konfigurieren Sie die Instanz mit öffentlichen Domänen, verbinden Sie die Ressource mit Ihrem Foundry-Projekt und notieren Sie den Verbindungsnamen oder die ID. Legen Sie für REST auch BING_CUSTOM_SEARCH_PROJECT_CONNECTION_ID und BING_CUSTOM_SEARCH_INSTANCE_NAME fest.

Ergebnis: Ihr Agent durchsucht nur die öffentlichen, indizierten Domänen, die in Ihrer benutzerdefinierten Suchinstanz konfiguriert sind, und gibt Zitate aus diesen Domänen zurück.

Hinweis

Informationen zur Optimierung der Toolverwendung finden Sie unter bewährten Methoden .

Ein Bing-Grounding-Beispiel ausführen

Hinweis

  • Sie benötigen das neueste SDK-Paket. Details finden Sie in der Schnellstartanleitung .
  • Verwenden Sie für SDK-Beispiele den Projektverbindungsnamen. Verwenden Sie für REST-Beispiele die Projektverbindungs-ID im Format/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}.

Die folgenden Beispiele zeigen, wie Sie einen Agent mit Grounding mit Bing Search-Tools erstellen und wie der Agent zum Beantworten von Benutzerabfragen verwendet wird. Wählen Sie Prompt Agents aus, um das AZURE AI Projects SDK zum Erstellen eines serverseitigen Eingabeaufforderungs-Agents oder Hosted Agents zu verwenden, um das Agent Framework FoundryChatClient zum Erstellen eines ephemeralen, in-Process-Agents zu verwenden.

Prompt-Agenten

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    PromptAgentDefinition,
    BingGroundingTool,
    BingGroundingSearchToolParameters,
    BingGroundingSearchConfiguration,
)

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
BING_CONNECTION_NAME = "my-bing-connection"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Get connection ID from connection name
bing_connection = project.connections.get(BING_CONNECTION_NAME)

agent = project.agents.create_version(
    agent_name="MyAgent",
    definition=PromptAgentDefinition(
        model="gpt-4.1-mini",
        instructions="You are a helpful assistant.",
        tools=[
            BingGroundingTool(
                bing_grounding=BingGroundingSearchToolParameters(
                    search_configurations=[
                        BingGroundingSearchConfiguration(
                            project_connection_id=bing_connection.id
                        )
                    ]
                )
            )
        ],
    ),
    description="You are a helpful agent.",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

stream_response = openai.responses.create(
    stream=True,
    tool_choice="required",
    input="What is today's date and weather in Seattle?",
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

for event in stream_response:
    if event.type == "response.created":
        print(f"Follow-up response created with ID: {event.response.id}")
    elif event.type == "response.output_text.delta":
        print(f"Delta: {event.delta}")
    elif event.type == "response.output_text.done":
        print(f"\nFollow-up response done!")
    elif event.type == "response.output_item.done":
        if event.item.type == "message":
            item = event.item
            if item.content[-1].type == "output_text":
                text_content = item.content[-1]
                for annotation in text_content.annotations:
                    if annotation.type == "url_citation":
                        print(f"URL Citation: {annotation.url}")
    elif event.type == "response.completed":
        print(f"\nFollow-up completed!")
        print(f"Full response: {event.response.output_text}")

Funktionsweise dieses Codes

In diesem Beispiel wird ein Agent mit Grounding erstellt, der mithilfe der Bing-Suche Echtzeitinformationen aus dem Internet abrufen kann. Wenn Sie den Code ausführen:

  1. Sie erstellt eine AIProjectClient und authentifiziert sich mithilfe Ihrer Azure Anmeldeinformationen.
  2. Erstellt einen Agenten mit dem Bing-Grounding-Tool, das über Ihre Bing-Verbindung konfiguriert wurde.
  3. Sendet eine Abfrage mit der Frage nach aktuellem Datum und Wetter in Seattle.
  4. Der Agent durchsucht mit dem Bing-Grounding-Tool das Internet und streamt die Antwort.
  5. Extrahiert und zeigt URL-Zitate aus den Suchergebnissen an.

Erforderliche Eingaben

  • Aktualisieren Sie die PROJECT_ENDPOINT Und BING_CONNECTION_NAME Konstanten im Code mit Ihren Werten.
  • Azure Anmeldeinformationen, die für DefaultAzureCredential konfiguriert sind.

Erwartete Ausgabe

Agent created (id: asst_abc123, name: MyAgent, version: 1)
Follow-up response created with ID: resp_xyz789
Delta: Today
Delta: 's date
Delta:  is December 12, 2025...
Follow-up response done!
URL Citation: https://www.weather.gov/seattle/
Follow-up completed!
Full response: Today's date is December 12, 2025, and the weather in Seattle is...

Gehostete Agents

Dieses Beispiel verwendet FoundryChatClient aus dem Microsoft Agent Framework und ruft get_bing_grounding_tool() auf, um Bing-Grounding über eine Projektverbindung hinzuzufügen. Installieren Sie das Paket mit pip install agent-framework-foundry aiohttp, legen Sie die FOUNDRY_PROJECT_ENDPOINT Variablen und FOUNDRY_MODEL Umgebung fest, und melden Sie sich mit az login.

import asyncio
import os

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.ai.projects import AIProjectClient
from azure.identity import AzureCliCredential

BING_CONNECTION_NAME = "my-bing-connection"


async def main() -> None:
    credential = AzureCliCredential()

    # Resolve the project connection ID from the connection name
    # (same pattern as the Prompt Agents tab).
    project = AIProjectClient(
        endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        credential=credential,
    )
    connection_id = project.connections.get(BING_CONNECTION_NAME).id

    agent = Agent(
        # Reads FOUNDRY_PROJECT_ENDPOINT and FOUNDRY_MODEL from the environment.
        client=FoundryChatClient(credential=credential),
        instructions="You are a helpful assistant that can search the web with Bing.",
        tools=[
            FoundryChatClient.get_bing_grounding_tool(
                connection_id=connection_id,
                market="en-US",
                count=10,
                freshness="Day",
            )
        ],
    )

    result = await agent.run("What is today's date and weather in Seattle?")
    print(f"Agent: {result.text}")

    # Print URL citation annotations from the response.
    for message in result.messages:
        for content in message.contents:
            for annotation in getattr(content, "annotations", None) or []:
                url = getattr(annotation, "url", None)
                if url:
                    print(f"URL Citation: {url}")


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

Erwartete Ausgabe

Der Agent verwendet Bing-Bodenung, um das Web nach aktuellem Datum und Seattle Wetter zu durchsuchen, und druckt dann den endgültigen Antworttext gefolgt von URL-Zitaten, die aus den Antwortanmerkungen analysiert werden.

Agent: Today's date is December 12, 2025, and the weather in Seattle is...
URL Citation: https://www.weather.gov/seattle/

Verwenden Sie für die benutzerdefinierte Bing-Suche FoundryChatClient.get_bing_custom_search_tool(connection_id=..., instance_name=..., market=..., count=...) mit demselben Agentmuster. Weitere Informationen finden Sie in den Beispielen des Foundry-Anbieters.


Grounding mit der benutzerdefinierten Bing-Suche beschränken (Vorschauversion)

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    PromptAgentDefinition,
    BingCustomSearchPreviewTool,
    BingCustomSearchToolParameters,
    BingCustomSearchConfiguration,
)

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
CUSTOM_SEARCH_CONNECTION_NAME = "my-custom-search-connection"
CUSTOM_SEARCH_INSTANCE_NAME = "my-custom-search-instance"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Get connection ID from connection name
bing_custom_connection = project.connections.get(CUSTOM_SEARCH_CONNECTION_NAME)

bing_custom_search_tool = BingCustomSearchPreviewTool(
    bing_custom_search_preview=BingCustomSearchToolParameters(
        search_configurations=[
            BingCustomSearchConfiguration(
                project_connection_id=bing_custom_connection.id,
                instance_name=CUSTOM_SEARCH_INSTANCE_NAME,
            )
        ]
    )
)

agent = project.agents.create_version(
    agent_name="MyAgent",
    definition=PromptAgentDefinition(
        model="gpt-4.1-mini",
        instructions="""You are a helpful agent that can use Bing Custom Search tools to assist users. 
        Use the available Bing Custom Search tools to answer questions and perform tasks.""",
        tools=[bing_custom_search_tool],
    ),
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

user_input = input(
    "Enter your question for the Bing Custom Search agent " "(e.g., 'Tell me more about foundry agent service'): \n"
)

# Send initial request that will trigger the Bing Custom Search tool
stream_response = openai.responses.create(
    stream=True,
    input=user_input,
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

for event in stream_response:
    if event.type == "response.created":
        print(f"Follow-up response created with ID: {event.response.id}")
    elif event.type == "response.output_text.delta":
        print(f"Delta: {event.delta}")
    elif event.type == "response.output_text.done":
        print(f"\nFollow-up response done!")
    elif event.type == "response.output_item.done":
        if event.item.type == "message":
            item = event.item
            if item.content[-1].type == "output_text":
                text_content = item.content[-1]
                for annotation in text_content.annotations:
                    if annotation.type == "url_citation":
                        print(
                            f"URL Citation: {annotation.url}, "
                            f"Start index: {annotation.start_index}, "
                            f"End index: {annotation.end_index}"
                        )
    elif event.type == "response.completed":
        print(f"\nFollow-up completed!")
        print(f"Full response: {event.response.output_text}")

Funktionsweise dieses Codes

Dieses Beispiel erstellt einen Agenten mit Grounding mit dem Bing Custom Search-Tool, das innerhalb einer konfigurierbaren Menge von öffentlichen Webdomains sucht. Wenn Sie den Code ausführen:

  1. Sie erstellt eine AIProjectClient und authentifiziert sich mithilfe Ihrer Azure Anmeldeinformationen.
  2. Erstellt einen Agenten mit der benutzerdefinierten Bing-Suche, die unter Verwendung Ihrer benutzerdefinierten Suchinstanz konfiguriert wurde.
  3. Fordert Benutzer auf, Eingaben zu spezifischen Themen innerhalb Ihrer konfigurierten Domänen zu machen.
  4. Der Agent verwendet das Bing Custom Search-Tool, um nur Ihre angegebenen Domänen zu durchsuchen und die Antwort zu streamen.
  5. Extrahiert und zeigt URL-Zitate mit Start- und Endpositionen aus den benutzerdefinierten Suchergebnissen an.

Erforderliche Eingaben

  • Aktualisieren Sie die PROJECT_ENDPOINT, CUSTOM_SEARCH_CONNECTION_NAMEund CUSTOM_SEARCH_INSTANCE_NAME Konstanten im Code mit Ihren Werten.
  • Azure Anmeldeinformationen, die für DefaultAzureCredential konfiguriert sind.
  • Benutzereingabe zur Laufzeit.

Erwartete Ausgabe

Agent created (id: asst_abc123, name: MyAgent, version: 1)
Enter your question for the Bing Custom Search agent (e.g., 'Tell me more about foundry agent service'):
Tell me more about foundry agent service
Follow-up response created with ID: resp_xyz789
Delta: Microsoft
Delta:  Foundry
Delta:  Agent Service...
Follow-up response done!
URL Citation: https://learn.microsoft.com/azure/ai-foundry/agents, Start index: 45, End index: 120
Follow-up completed!
Full response: Microsoft Foundry Agent Service enables you to build...

Die folgenden C#-Beispiele veranschaulichen, wie Sie einen Agenten mit dem Grounding-Tool von Bing Search erstellen und wie der Agent zur Beantwortung von Benutzeranfragen verwendet wird. In diesen Beispielen werden synchrone Aufrufe zur Vereinfachung verwendet. Asynchrone Beispiele finden Sie in den C#-Beispielen agenttools.

Um Ihrem Agent die Verwendung der Bing-Such-API zu ermöglichen, verwenden Sie BingGroundingTool. Wählen Sie Prompt Agents aus, um das AZURE AI Projects SDK zum Erstellen eines serverseitigen Eingabeaufforderungs-Agents oder Hosted Agents zu verwenden, um das Microsoft Agent Framework zum Erstellen eines ephemeren, in-Process-Agents zu verwenden.

Prompt-Agenten

Antworten mit Bing Search fundieren

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var bingConnectionName = "my-bing-connection";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Get connection ID from connection name
AIProjectConnection bingConnection = projectClient.Connections.GetConnection(connectionName: bingConnectionName);

// Create the agent version with Bing grounding tool
BingGroundingTool bingGroundingAgentTool = new(new BingGroundingSearchToolOptions(
  searchConfigurations: [new BingGroundingSearchConfiguration(projectConnectionId: bingConnection.Id)]
    )
);
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
    Instructions = "You are a helpful agent.",
    Tools = { bingGroundingAgentTool, }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// Output the agent version info
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);

ResponseResult response = responseClient.CreateResponse("How does wikipedia explain Euler's Identity?");

// Extract and format URL citation annotations
string citation = "";
foreach (ResponseItem item in response.OutputItems)
{
    if (item is MessageResponseItem messageItem)
    {
        foreach (ResponseContentPart content in messageItem.Content)
        {
            foreach (ResponseMessageAnnotation annotation in content.OutputTextAnnotations)
            {
                if (annotation is UriCitationMessageAnnotation uriAnnotation)
                {
                    citation = $" [{uriAnnotation.Title}]({uriAnnotation.Uri})";
                }
            }
        }
    }
}

// Validate and print the response
if (response.Status != ResponseStatus.Completed)
{
  throw new InvalidOperationException($"Response failed with status {response.Status}.");
}
Console.WriteLine($"{response.GetOutputText()}{citation}");

// Clean up resources by deleting the agent version
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Funktionsweise dieses Codes

In diesem Beispiel wird ein Agent erstellt, der das Grounding-Tool mit der Bing-Suche verwendet und synchrones Antworten demonstriert. Wenn Sie den Code ausführen:

  1. Er erstellt einen AIProjectClient mithilfe Ihres Projektendpunkts.
  2. Ruft die Bing-Verbindungskonfiguration aus Ihrem Projekt ab.
  3. Erstellt einen Agenten mit dem konfigurierten Bing-Grounding-Tool.
  4. Sendet eine Abfrage, die fragt, wie Wikipedia Eulers Identität erklärt.
  5. Der Agent verwendet das Bing-Grounding-Tool für die Suche und liefert formatierte Ergebnisse mit URL-Zitaten.
  6. Bereinigt durch Löschen der Agentversion.

Erforderliche Eingaben

  • Aktualisieren Sie die projectEndpoint Und bingConnectionName Konstanten im Code mit Ihren Werten.
  • Azure Anmeldeinformationen, die für DefaultAzureCredential konfiguriert sind.

Erwartete Ausgabe

Euler's identity is considered one of the most elegant equations in mathematics... [Euler's identity - Wikipedia](https://en.wikipedia.org/wiki/Euler%27s_identity)

Gehostete Agents

In diesem Beispiel wird das Microsoft Agent Framework verwendet, und AsAIAgent(...) wird bei AIProjectClient zusammen mit FoundryAITool.CreateBingGroundingTool(...) aus Microsoft.Agents.AI.Foundry aufgerufen. Installieren Sie die Pakete Microsoft.Agents.AI.Foundry und Azure.AI.Projects, legen Sie die Variablen AZURE_AI_PROJECT_ENDPOINT und AZURE_AI_MODEL_DEPLOYMENT_NAME Umgebung fest, und melden Sie sich mit az login an.

using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry;
using Microsoft.Extensions.AI;

string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
    ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5-mini";
string bingConnectionName = "my-bing-connection";

const string AgentInstructions = "You are a helpful agent that can use Bing search to answer questions.";

AIProjectClient aiProjectClient = new(new Uri(endpoint), new DefaultAzureCredential());

// Resolve the project connection ID from the connection name
// (same pattern as the Prompt Agents tab).
AIProjectConnection bingConnection = aiProjectClient.Connections.GetConnection(connectionName: bingConnectionName);

BingGroundingSearchToolOptions bingGroundingOptions = new(
    searchConfigurations: [new BingGroundingSearchConfiguration(projectConnectionId: bingConnection.Id)]);

AIAgent agent = aiProjectClient.AsAIAgent(deploymentName,
    instructions: AgentInstructions,
    name: "BingGroundingAgent",
    tools: [FoundryAITool.CreateBingGroundingTool(bingGroundingOptions)]);

AgentResponse response = await agent.RunAsync("How does wikipedia explain Euler's Identity?");

Console.WriteLine($"Response: {response.Text}");

// Print URL citation annotations from the response.
foreach (AIAnnotation annotation in response.Messages.SelectMany(m => m.Contents).SelectMany(c => c.Annotations ?? []))
{
    if (annotation.RawRepresentation is UriCitationMessageAnnotation uriAnnotation)
    {
        Console.WriteLine($"URL Citation: [{uriAnnotation.Title}]({uriAnnotation.Uri})");
    }
}

Erwartete Ausgabe

Der Agent verwendet Grounding mit Bing, um das Web zu durchsuchen und die Frage zu beantworten, und gibt dann den endgültigen Antworttext aus, gefolgt von URL-Verweisen, die aus den Antwortanmerkungen extrahiert wurden.

Response: Euler's identity is considered one of the most elegant equations in mathematics...
URL Citation: [Euler's identity - Wikipedia](https://en.wikipedia.org/wiki/Euler%27s_identity)

Verwenden Sie FoundryAITool.CreateBingCustomSearchTool(...) für die benutzerdefinierte Bing-Suche mit einer BingCustomSearchToolOptions Instanz. Das vollständige Beispiel finden Sie unter Agent_Step18_BingCustomSearch.


Streaming einer fundierten Bing-Antwort

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var bingConnectionName = "my-bing-connection";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Get connection ID from connection name
AIProjectConnection bingConnection = projectClient.Connections.GetConnection(connectionName: bingConnectionName);

// Create the agent version with Bing grounding tool
BingGroundingTool bingGroundingAgentTool = new(new BingGroundingSearchToolOptions(
  searchConfigurations: [new BingGroundingSearchConfiguration(projectConnectionId: bingConnection.Id)]
    )
);
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
    Instructions = "You are a helpful agent.",
    Tools = { bingGroundingAgentTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// Stream the response from the agent version
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);

string annotation = "";
string text = "";

// Parse the streaming response and output the results
foreach (StreamingResponseUpdate streamResponse in responseClient.CreateResponseStreaming("How does wikipedia explain Euler's Identity?"))
{
    if (streamResponse is StreamingResponseCreatedUpdate createUpdate)
    {
        Console.WriteLine($"Stream response created with ID: {createUpdate.Response.Id}");
    }
    else if (streamResponse is StreamingResponseOutputTextDeltaUpdate textDelta)
    {
        Console.WriteLine($"Delta: {textDelta.Delta}");
    }
    else if (streamResponse is StreamingResponseOutputTextDoneUpdate textDoneUpdate)
    {
        text = textDoneUpdate.Text;
    }
    else if (streamResponse is StreamingResponseOutputItemDoneUpdate itemDoneUpdate)
    {
        if (annotation.Length == 0)
        {
            // Extract and format URL citation annotations
            if (itemDoneUpdate.Item is MessageResponseItem messageItem)
            {
                foreach (ResponseContentPart content in messageItem.Content)
                {
                    foreach (ResponseMessageAnnotation messageAnnotation in content.OutputTextAnnotations)
                    {
                        if (messageAnnotation is UriCitationMessageAnnotation uriAnnotation)
                        {
                            annotation = $" [{uriAnnotation.Title}]({uriAnnotation.Uri})";
                        }
                    }
                }
            }
        }
    }
    else if (streamResponse is StreamingResponseErrorUpdate errorUpdate)
    {
        throw new InvalidOperationException($"The stream has failed: {errorUpdate.Message}");
    }
}
Console.WriteLine($"{text}{annotation}");

// Clean up resources by deleting the agent version
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Funktionsweise dieses Codes

Dieses Beispiel erstellt einen Agenten mit Grounding unter Verwendung des Bing-Suche-Tools und demonstriert gestreamtes Antworten. Wenn Sie den Code ausführen:

  1. Er erstellt einen AIProjectClient mithilfe Ihres Projektendpunkts.
  2. Ruft die Bing-Verbindungskonfiguration aus Ihrem Projekt ab.
  3. Erstellt einen Agenten mit dem konfigurierten Bing-Grounding-Tool.
  4. Sendet eine Abfrage, die fragt, wie Wikipedia Eulers Identität erklärt.
  5. Der Agent verwendet das Bing-Erdungstool und streamt die Antwort in Echtzeit.
  6. Verarbeitet Streamingereignisse, einschließlich Delta-Textaktualisierungen und Zitatextraktion.
  7. Bereinigt durch Löschen der Agentversion.

Erforderliche Eingaben

  • Aktualisieren Sie die projectEndpoint Und bingConnectionName Konstanten im Code mit Ihren Werten.
  • Azure Anmeldeinformationen, die für DefaultAzureCredential konfiguriert sind.

Erwartete Ausgabe

Stream response created with ID: resp_xyz789
Delta: Euler
Delta: 's
Delta:  Identity
Delta:  is one of the most...
Euler's Identity is one of the most elegant equations in mathematics... [Euler's identity - Wikipedia](https://en.wikipedia.org/wiki/Euler%27s_identity)

Die folgenden REST-API-Beispiele zeigen, wie Sie Grounding mit Bing-Suche und Grounding mit benutzerdefinierter Bing-Suche (Vorschau) verwenden, um auf Benutzeranfragen zu reagieren.

Antworten mit Bing Search fundieren

Authentifizierungseinstellungen

Konfigurieren Sie vor dem Ausführen von REST-API-Aufrufen die Authentifizierung:

  1. Festlegen von Umgebungsvariablen:

    • FOUNDRY_PROJECT_ENDPOINT: Die URL des Foundry-Projekt-Endpunkts.
    • FOUNDRY_MODEL_DEPLOYMENT_NAME: Name des bereitgestellten Modells.
    • BING_PROJECT_CONNECTION_ID: Ihr Grounding mit Bing-Suche-Projektverbindungs-ID.
  2. Abrufen eines Bearer-Tokens:

    export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
    
    curl --request POST \
      --url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
      -H "Authorization: Bearer $AGENT_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
      "model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
      "input": "How does Wikipedia explain Euler\u0027s identity?",
      "tool_choice": "required",
      "tools": [
        {
          "type": "bing_grounding",
          "bing_grounding": {
            "search_configurations": [
              {
                "project_connection_id": "'$BING_PROJECT_CONNECTION_ID'",
                "count": 7,
                "market": "en-US",
                "set_lang": "en",
                "freshness": "week"
              }
            ]
          }
        }
      ]
    }'
    

Funktionsweise dieses Codes

Diese REST-API-Anforderung erstellt eine Antwort mithilfe von Grounding mit Bing Search. Die Anforderung:

  1. Sendet eine POST-Anforderung an den Endpunkt für Foundry-Antworten.
  2. Nimmt die Modellbereitstellung und die Benutzereingabe in den Anforderungstext auf.
  3. Konfiguriert das Bing-Grounding-Tool mit Suchparametern (Anzahl, Markt, Sprache, Aktualität).
  4. Gibt eine Antwort mit Websuchergebnissen und Zitaten zurück.

Erforderliche Eingaben

  • Umgebungsvariablen: FOUNDRY_PROJECT_ENDPOINT, AGENT_TOKEN, FOUNDRY_MODEL_DEPLOYMENT_NAME, BING_PROJECT_CONNECTION_ID.
  • Gültiges Bearertoken mit entsprechenden Berechtigungen.

Erwartete Ausgabe

Die Antwort enthält ein output Array. URL-Zitate sind Anmerkungen zu einem output_text Inhaltselement:

{
  "id": "resp_<id>",
  "status": "completed",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {
          "type": "output_text",
          "text": "<grounded response>",
          "annotations": [
            { "type": "url_citation", "url": "https://example.com/source" }
          ]
        }
      ]
    }
  ]
}

Grounding mit der benutzerdefinierten Bing-Suche beschränken (Vorschauversion)

curl --request POST \
  --url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
  "input": "How does Wikipedia explain Euler\u0027s identity?",
  "tool_choice": "required",
  "tools": [
    {
      "type": "bing_custom_search_preview",
      "bing_custom_search_preview": {
        "search_configurations": [
          {
            "project_connection_id": "'$BING_CUSTOM_SEARCH_PROJECT_CONNECTION_ID'",
            "instance_name": "'$BING_CUSTOM_SEARCH_INSTANCE_NAME'",
            "count": 7,
            "market": "en-US",
            "set_lang": "en",
            "freshness": "week"
          }
        ]
      }
    }
  ]
}'

Funktionsweise dieses Codes

Diese REST-API-Anforderung erstellt eine Antwort unter Verwendung von Grounding mit der Bing Custom Search. Die Anforderung:

  1. Sendet eine POST-Anforderung an den Endpunkt für Foundry-Antworten.
  2. Nimmt die Modellbereitstellung und die Benutzereingabe in den Anforderungstext auf.
  3. Konfiguriert das Bing Custom Search-Tool mit Ihrem Instanznamen und Suchparametern.
  4. Gibt eine Antwort mit benutzerdefinierten Suchergebnissen zurück, die auf Ihre konfigurierten Domänen beschränkt sind.

Erforderliche Eingaben

  • Umgebungsvariablen: FOUNDRY_PROJECT_ENDPOINT, AGENT_TOKEN, FOUNDRY_MODEL_DEPLOYMENT_NAME, BING_CUSTOM_SEARCH_PROJECT_CONNECTION_IDBING_CUSTOM_SEARCH_INSTANCE_NAME
  • Gültiges Bearertoken mit entsprechenden Berechtigungen.
  • Bing Custom Search-Instanz, die bereits mit Zieldomänen konfiguriert ist

Erwartete Ausgabe

Die Antwort verwendet das gleiche output Array-Shape, das im vorherigen REST-Beispiel gezeigt wird. Zitatanmerkungen enthalten URLs aus Ihren konfigurierten Domänen.

Die folgenden TypeScript-Beispiele veranschaulichen, wie Sie einen Agenten mit Grounding mit Bing Search und Grounding mit Bing Custom Search (Vorschau)-Tools erstellen und wie der Agent zum Beantworten von Benutzerabfragen verwendet wird. JavaScript-Beispiele finden Sie in den JavaScript-Beispielen agent-Tools im Azure SDK für JavaScript-Repository auf GitHub.

Antworten mit Bing Search fundieren

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const BING_CONNECTION_NAME = "my-bing-connection";

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  // Get connection ID from connection name
  const bingConnection = await project.connections.get(BING_CONNECTION_NAME);

  const agent = await project.agents.createVersion("MyBingGroundingAgent", {
    kind: "prompt",
    model: "gpt-4.1-mini",
    instructions: "You are a helpful assistant.",
    tools: [
      {
        type: "bing_grounding",
        bing_grounding: {
          search_configurations: [
            {
              project_connection_id: bingConnection.id,
            },
          ],
        },
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Send request that requires current information from the web
  const streamResponse = await openai.responses.create(
    {
      input: "What is today's date and weather in Seattle?",
      stream: true,
    },
    {
      body: {
        agent_reference: { name: agent.name, type: "agent_reference" },
        tool_choice: "required",
      },
    },
  );

  // Process the streaming response
  for await (const event of streamResponse) {
    if (event.type === "response.created") {
      console.log(`Follow-up response created with ID: ${event.response.id}`);
    } else if (event.type === "response.output_text.delta") {
      process.stdout.write(event.delta);
    } else if (event.type === "response.output_text.done") {
      console.log("\n\nFollow-up response done!");
    } else if (event.type === "response.output_item.done") {
      if (event.item.type === "message") {
        const item = event.item;
        if (item.content && item.content.length > 0) {
          const lastContent = item.content[item.content.length - 1];
          if (lastContent.type === "output_text" && lastContent.annotations) {
            for (const annotation of lastContent.annotations) {
              if (annotation.type === "url_citation") {
                console.log(
                  `URL Citation: ${annotation.url}, Start index: ${annotation.start_index}, End index: ${annotation.end_index}`,
                );
              }
            }
          }
        }
      }
    } else if (event.type === "response.completed") {
      console.log("\nFollow-up completed!");
    }
  }

  // Clean up resources by deleting the agent version
  // This prevents accumulation of unused resources in your project
  console.log("\nCleaning up resources...");
  await project.agents.deleteVersion(agent.name, agent.version);
  console.log("Agent deleted");

  console.log("\nBing grounding agent sample completed!");
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Funktionsweise dieses Codes

In diesem Beispiel wird ein Agent mit Grounding erstellt, der mithilfe der Bing-Suche Echtzeitinformationen aus dem Internet abrufen kann. Wenn Sie den Code ausführen:

  1. Sie erstellt eine AIProjectClient und authentifiziert sich mithilfe Ihrer Azure Anmeldeinformationen.
  2. Erstellt einen Agenten mit dem Bing-Grounding-Tool, das über Ihre Bing-Verbindung konfiguriert wurde.
  3. Sendet eine Abfrage, die nach dem aktuellen Datum und wetter in Seattle fragt, wobei die Toolauswahl auf "erforderlich" festgelegt ist.
  4. Der Agent durchsucht mit dem Bing-Grounding-Tool das Internet und streamt die Antwort.
  5. Verarbeitet Streamingereignisse und extrahiert URL-Zitate mit ihren Positionen im Text.
  6. Bereinigt durch Löschen der Agentversion.

Erforderliche Eingaben

  • Aktualisieren Sie die PROJECT_ENDPOINT Und BING_CONNECTION_NAME Konstanten im Code mit Ihren Werten.
  • Azure Anmeldeinformationen, die für DefaultAzureCredential konfiguriert sind.

Erwartete Ausgabe

Agent created (id: asst_abc123, name: MyBingGroundingAgent, version: 1)
Follow-up response created with ID: resp_xyz789
Today's date is December 12, 2025, and the weather in Seattle...

Follow-up response done!
URL Citation: https://www.weather.gov/seattle/, Start index: 45, End index: 120

Follow-up completed!

Cleaning up resources...
Agent deleted

Bing grounding agent sample completed!

Grounding mit der benutzerdefinierten Bing-Suche beschränken (Vorschauversion)

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import * as readline from "readline";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const CUSTOM_SEARCH_CONNECTION_NAME = "my-custom-search-connection";
const CUSTOM_SEARCH_INSTANCE_NAME = "my-custom-search-instance";

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  // Get connection ID from connection name
  const bingCustomConnection = await project.connections.get(CUSTOM_SEARCH_CONNECTION_NAME);

  const agent = await project.agents.createVersion("MyAgent", {
    kind: "prompt",
    model: "gpt-4.1-mini",
    instructions:
      "You are a helpful agent that can use Bing Custom Search tools to assist users. Use the available Bing Custom Search tools to answer questions and perform tasks.",
    tools: [
      {
        type: "bing_custom_search_preview",
        bing_custom_search_preview: {
          search_configurations: [
            {
              project_connection_id: bingCustomConnection.id,
              instance_name: CUSTOM_SEARCH_INSTANCE_NAME,
            },
          ],
        },
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Prompt user for input
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });

  const userInput = await new Promise<string>((resolve) => {
    rl.question(
      "Enter your question for the Bing Custom Search agent (e.g., 'Tell me more about foundry agent service'): \n",
      (answer) => {
        rl.close();
        resolve(answer);
      },
    );
  });

  // Send initial request that will trigger the Bing Custom Search tool
  const streamResponse = await openai.responses.create(
    {
      input: userInput,
      stream: true,
    },
    {
      body: {
        agent_reference: { name: agent.name, type: "agent_reference" },
      },
    },
  );

  // Process the streaming response
  for await (const event of streamResponse) {
    if (event.type === "response.created") {
      console.log(`Follow-up response created with ID: ${event.response.id}`);
    } else if (event.type === "response.output_text.delta") {
      process.stdout.write(event.delta);
    } else if (event.type === "response.output_text.done") {
      console.log("\n\nFollow-up response done!");
    } else if (event.type === "response.output_item.done") {
      if (event.item.type === "message") {
        const item = event.item;
        if (item.content && item.content.length > 0) {
          const lastContent = item.content[item.content.length - 1];
          if (lastContent.type === "output_text" && lastContent.annotations) {
            for (const annotation of lastContent.annotations) {
              if (annotation.type === "url_citation") {
                console.log(
                  `URL Citation: ${annotation.url}, Start index: ${annotation.start_index}, End index: ${annotation.end_index}`,
                );
              }
            }
          }
        }
      }
    } else if (event.type === "response.completed") {
      console.log("\nFollow-up completed!");
    }
  }

  // Clean up resources by deleting the agent version
  // This prevents accumulation of unused resources in your project
  console.log("\nCleaning up resources...");
  await project.agents.deleteVersion(agent.name, agent.version);
  console.log("Agent deleted");

  console.log("\nBing Custom Search agent sample completed!");
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Funktionsweise dieses Codes

In diesem Beispiel wird ein Agent mit dem Tool „Grounding mit der benutzerdefinierten Bing-Suche“ erstellt, das innerhalb Ihrer konfigurierten Domänen sucht. Wenn Sie den Code ausführen:

  1. Sie erstellt eine AIProjectClient und authentifiziert sich mithilfe Ihrer Azure Anmeldeinformationen.
  2. Erstellt einen Agenten mit der benutzerdefinierten Bing-Suche, die unter Verwendung Ihrer benutzerdefinierten Suchinstanz konfiguriert wurde.
  3. Fordert bei Laufzeit Benutzereingaben über die Befehlszeile an.
  4. Der Agent verwendet das Bing Custom Search-Tool, um nur Ihre angegebenen Domänen zu durchsuchen und die Antwort zu streamen.
  5. Verarbeitet Streamingereignisse und extrahiert URL-Zitate mit ihren Positionen im Text.
  6. Bereinigt durch Löschen der Agentversion.

Erforderliche Eingaben

  • Aktualisieren Sie die PROJECT_ENDPOINT, CUSTOM_SEARCH_CONNECTION_NAMEund CUSTOM_SEARCH_INSTANCE_NAME Konstanten im Code mit Ihren Werten.
  • Azure Anmeldeinformationen, die für DefaultAzureCredential konfiguriert sind.
  • Benutzereingaben, die zur Laufzeit über die Konsole bereitgestellt werden.

Erwartete Ausgabe

Agent created (id: asst_abc123, name: MyAgent, version: 1)
Enter your question for the Bing Custom Search agent (e.g., 'Tell me more about foundry agent service'):
Tell me more about foundry agent service
Follow-up response created with ID: resp_xyz789
Microsoft Foundry Agent Service enables you to build...

Follow-up response done!
URL Citation: https://learn.microsoft.com/azure/ai-foundry/agents, Start index: 0, End index: 89

Follow-up completed!

Cleaning up resources...
Agent deleted

Bing Custom Search agent sample completed!

Verwenden von Bing-Grounding in einem Java-Agent

Fügen Sie die Abhängigkeit zu Ihrem pom.xml hinzu:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.2.0</version>
</dependency>

Erstellen eines Agents mit Bing-Grounding

import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

import java.util.Arrays;
import java.util.Collections;

public class BingGroundingExample {
    public static void main(String[] args) {
        // Format: "https://resource_name.ai.azure.com/api/projects/project_name"
        String projectEndpoint = "your_project_endpoint";
        String bingConnectionId = "my-bing-connection-id";

        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

        AgentsClient agentsClient = builder.buildAgentsClient();
        ResponsesClient responsesClient = builder.buildResponsesClient();

        // Create Bing grounding tool with connection configuration
        BingGroundingTool bingTool = new BingGroundingTool(
            new BingGroundingSearchToolParameters(Arrays.asList(
                new BingGroundingSearchConfiguration(bingConnectionId)
            ))
        );

        // Create agent with Bing grounding tool
        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
            .setInstructions("You are a helpful assistant. Use Bing to find up-to-date information.")
            .setTools(Collections.singletonList(bingTool));

        AgentVersionDetails agent = agentsClient.createAgentVersion("bing-grounding-agent", agentDefinition);
        System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());

        // Create a response
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(agentReference),
            ResponseCreateParams.builder()
                .input("What are the latest developments in AI?"));

        System.out.println("Response: " + response.output());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
    }
}

Funktionsweise

Die Benutzerabfrage ist die Nachricht, dass ein Endbenutzer an einen Agent sendet, z. B. *"sollte ich heute einen Regenschirm mit mir nehmen? Ich bin in Seattle." *Anweisungen sind die Systemnachricht, die ein Entwickler bereitstellen kann, um Kontext zu teilen und Anweisungen für das KI-Modell zur Verwendung verschiedener Tools oder Verhalten bereitzustellen.

Wenn ein Benutzer eine Abfrage sendet, verarbeitet die KI-Modellimplementierung des Kunden diese zuerst (mithilfe der bereitgestellten Anweisungen), um später eine Bing-Suchabfrage auszuführen (die für Entwickler sichtbar ist). Grounding mit Bing gibt relevante Suchergebnisse an die Modellimplementierung des Kunden zurück, die dann die endgültige Ausgabe generiert.

Hinweis

Wenn Sie Grounding mit Bing Search oder mit der benutzerdefinierten Bing-Suche verwenden, werden an Bing nur die Suchanfrage, die Toolparameter und Ihr Ressourcenschlüssel gesendet. Der Dienst sendet keine endbenutzerspezifischen Informationen. Ihr Ressourcenschlüssel wird ausschließlich für Abrechnungs- und Ratenbegrenzungszwecke an Bing gesendet.

Die Autorisierung erfolgt zwischen Grounding mit Bing-Suche oder Grounding mit benutzerdefinierter Bing-Suche und dem Foundry Agent Service. Jede Bing-Suchabfrage, die der Dienst generiert und zu Zwecken der Fundierung an Bing sendet, wird zusammen mit dem Ressourcenschlüssel außerhalb der Azure-Compliance-Grenzen an den Dienst zur Fundierung mit Bing-Suche übertragen. Grounding with Bing Search unterliegt den Bedingungen von Bing und verfügt nicht über die gleichen Compliance-Standards und Zertifikate wie der Agent Service, wie in den Nutzungsbedingungen beschrieben. Es liegt in Ihrer Verantwortung, zu beurteilen, ob die Verwendung von Grounding mit Bing-Suche oder Grounding mit benutzerdefinierter Bing-Suche in Ihrem Agenten Ihren Bedürfnissen und Anforderungen entspricht.

Transaktionen mit Ihrer Grounding mit Bing-Ressource werden durch die Anzahl der Toolaufrufe pro Ausführung bestimmt. Sie können sehen, wie viele Toolaufrufe aus dem Ausführungsschritt ausgeführt werden.

Entwickler und Endbenutzer haben keinen Zugriff auf die Rohinhalte, die von der Grounding-Funktion bei der Bing-Suche zurückgegeben werden. Die Modellantwort enthält jedoch Zitate mit Links zu den Websites, die verwendet werden, um die Antwort zu generieren, und einen Link zur Bing-Abfrage, die für die Suche verwendet wird. Sie können die Modellantwort abrufen, indem Sie auf die Daten in der Unterhaltung zugreifen, die erstellt wurde. Diese beiden Verweise müssen in der von Microsoft bereitgestellten Form beibehalten und angezeigt werden, wie in den Nutzungs- und Darstellungsanforderungen für das Grounding mit der Bing-Suche festgelegt. Ausführliche Informationen finden Sie im Abschnitt Grounding mit Bing-Suchergebnissen anzeigen.

So zeigen Sie Suchergebnisse an

Gemäß den Nutzungsbedingungen und den Anforderungen für die Nutzung und Anzeige von Grounding mit der Bing-Suche müssen Sie sowohl Website-URLs als auch URLs von Bing-Suchanfragen in Ihrer benutzerdefinierten Oberfläche anzeigen. Diese Informationen finden Sie in der API-Antwort im arguments Parameter. Um die Webseite zu rendern, ersetzen Sie den Endpunkt von Bing-Suchabfrage-URLs durch www.bing.com und Ihre Bing-Suchabfrage-URL würde wie https://www.bing.com/search?q={search query} aussehen.

Screenshot der Bing-Suchergebnisse mit Website- und Suchabfragezitationen.

Konfiguration des Grounding mit benutzerdefinierter Bing-Suche

Grounding mit benutzerdefinierter Bing-Suche ist ein leistungsstarkes Tool, mit dem Sie einen Teilbereich des Webs auswählen können, um das Grounding-Wissen Ihres Agenten einzuschränken. Hier sind einige Tipps, die Ihnen helfen, diese Funktion vollständig zu nutzen:

  • Wenn Sie eine öffentliche Website besitzen, die Sie in die Suche aufnehmen möchten, die jedoch von Bing noch nicht indiziert wurde, finden Sie in den Bing Webmaster-Richtlinien ausführliche Informationen darüber, wie Ihre Website indiziert werden kann. Die Webmasterdokumentation enthält auch Details zum Abrufen von Bing zum Durchforsten Ihrer Website, wenn der Index veraltet ist.
  • Um eine Konfiguration für die benutzerdefinierte Bing-Suche zu erstellen, aktivieren Sie die Rolle Mitwirkender für die Ressource der benutzerdefinierten Bing-Suche per Just-in-Time über Microsoft Entra PIM. Deaktivieren Sie die Rolle nach der Konfiguration. Entwickler und Benutzer von Agenten im täglichen Einsatz benötigen diese Rolle nicht.
  • Sie können nur bestimmte Domänen blockieren und eine Suche für den Rest des Webs durchführen (z. B. die Website eines Wettbewerbers).
  • Grounding with Bing Custom Search liefert nur Ergebnisse für Domänen und Webseiten, die öffentlich sind und von Bing indexiert werden.
    • Domäne (z. B. https://www.microsoft.com)
    • Domäne und Pfad (z. B https://www.microsoft.com/surface. )
    • Webseite (z. B https://www.microsoft.com/en-us/p/surface-earbuds/8r9cpq146064. )

Optionale Parameter

Wenn Sie Ihrem Agenten das Grounding mit Bing Search oder das Grounding mit Bing Custom Search Werkzeug hinzufügen, können Sie die folgenden Parameter übergeben. Diese Parameter wirken sich auf die Toolausgabe aus, und das KI-Modell verwendet möglicherweise nicht vollständig alle Ausgaben. In den Codebeispielen finden Sie Informationen zur Unterstützung der API-Version und um diese Parameter zu übergeben.

Name Wert Typ Erforderlich
count Die Anzahl der Suchergebnisse, die in der Antwort zurückgegeben werden sollen. Der Standardwert ist 5, und der Maximalwert ist 50. Die tatsächlich gelieferte Anzahl kann geringer sein als angefordert. Es ist möglich, dass sich die Ergebnisse mehrerer Seiten teilweise überlappen. Dieser Parameter wirkt sich nur auf Webseitenergebnisse aus. Es ist möglich, dass das KI-Modell möglicherweise nicht alle von Bing zurückgegebenen Suchergebnisse verwendet. UnsignedShort Nein
freshness Filtern Sie die Suchergebnisse nach den folgenden, von Groß- und Kleinschreibung unabhängigen Altersangaben:
Tag: Zurückgeben von Webseiten, die Bing innerhalb der letzten 24 Stunden entdeckt hat.
Woche: Zurückgeben von Webseiten, die Bing innerhalb der letzten 7 Tage entdeckt hat.
Monat: Zurückgeben von Webseiten, die Bing innerhalb der letzten 30 Tage entdeckt hat. Um Artikel abzurufen, die von Bing während eines bestimmten Zeitrahmens entdeckt werden, geben Sie einen Datumsbereich in der Form an: YYYY-MM-DD..YYYY-MM-DD. Beispiel: freshness=2019-02-01..2019-05-30. Um die Ergebnisse auf ein einzelnes Datum zu beschränken, legen Sie diesen Parameter auf ein bestimmtes Datum fest. Beispiel: freshness=2019-02-04.
String Nein
market Der Markt, aus dem die Ergebnisse stammen. In der Regel ist mkt das Land/die Region, aus dem bzw. der die Anforderung stammt. Es kann jedoch ein anderes Land/eine andere Region sein, wenn sich der Benutzer nicht in einem Land/einer Region befindet, in dem Bing Ergebnisse liefert. Der Markt muss die Form <language>-<country/region> haben. Beispiel: en-US. Bei der Zeichenfolge wird die Groß-/Kleinschreibung nicht beachtet. Eine Liste möglicher Marktwerte finden Sie unter "Marktcodes". Sie sollten immer den Markt angeben, sofern bekannt. Wenn Sie den Markt angeben, hilft Bing, die Anforderung weiter zu leiten und eine entsprechende und optimale Antwort zurückzugeben. Wenn Sie einen Markt angeben, der nicht in Marktcodes aufgeführt ist, verwendet Bing einen am besten geeigneten Marktcode basierend auf einer internen Zuordnung, die geändert werden kann. String Nein
set_lang Die Sprache, die für Benutzeroberflächenzeichenfolgen verwendet werden soll. Sie können die Sprache entweder mit einem 2-Buchstaben- oder einem 4-Buchstaben-Code angeben. Die Verwendung von 4-Buchstaben-Codes wird bevorzugt.
Eine Liste der unterstützten Sprachcodes finden Sie unter Bing unterstützte Sprachen.
Bing lädt die lokalisierten Zeichenfolgen, wenn setlang ein gültiger 2-Buchstaben-neutraler Kulturcode (fr) oder ein gültiger 4-Buchstaben-spezifischer Kulturcode (fr-ca) enthält. Beispielsweise lädt Bing für fr-ca die kulturneutrale Code-Zeichenfolge fr.
Wenn setlang nicht gültig ist (zum Beispiel zh) oder Bing die Sprache nicht unterstützt (zum Beispiel af, af-na), fällt Bing standardmäßig auf en (Englisch) zurück.
Um den 2-Buchstaben-Code anzugeben, legen Sie diesen Parameter auf einen ISO 639-1-Sprachcode fest.
Um den 4-Buchstaben-Code anzugeben, verwenden Sie das Formular <language>-<country/region> , in <language> dem es sich um einen ISO 639-1-Sprachcode (neutrale Kultur) handelt und <country/region> ein ISO 3166-Länder-/Regionscode (spezifische Kultur) ist. Verwenden Sie beispielsweise en-US für amerikanisches Englisch.
Obwohl optional, sollten Sie immer die Sprache angeben. Normalerweise setzen Sie setLang auf dieselbe Sprache, die durch mkt angegeben ist, es sei denn, der Benutzer möchte, dass die Zeichenfolgen der Benutzeroberfläche in einer anderen Sprache angezeigt werden.
String Nein

Unterstützte Funktionen und bekannte Probleme

  • Das Grounding-Tool mit der Bing-Suche dient zum Abrufen von Echtzeitinformationen aus dem Web und ist nicht auf bestimmte Webdomänen beschränkt. Verwenden Sie zum Abrufen von Informationen aus bestimmten Bereichen das Grounding-Werkzeug mit der Bing Custom Search.
  • Bitten Sie das Modell nicht, eine ganze Webseite zusammenzufassen .
  • Innerhalb einer Ausführung wertet das KI-Modell die Toolausgabe aus und kann sich entscheiden, das Tool erneut für weitere Informationen und Kontext aufzurufen. Das KI-Modell kann auch entscheiden, welche Teile der Tool-Ausgaben verwendet werden, um die Antwort zu generieren.
  • Der Foundry Agent Service gibt KI-Modell generierte Antworten als Ausgabe zurück, sodass die End-to-End-Latenz durch die Modellvorverarbeitung und nach der Verarbeitung beeinflusst wird.
  • Die Grounding with Bing Search- und Grounding with Bing Custom Search-Tools geben die Toolausgabe nicht an Entwickler und Endbenutzer zurück.
  • Grounding mit Bing Search funktioniert in einem netzwerkgeschützten Foundry-Projekt, der Bing-Datenverkehr verwendet jedoch öffentlichen ausgehenden Datenverkehr und wird nicht über VPN- oder Private-Endpoint-Routing geleitet und berücksichtigt dieses auch nicht.
  • Verwenden Sie das Standardzitiermuster (die Links, die in annotation gesendet wurden) für Links aus den Grounding-Tools von Bing. Bitten Sie das Modell nicht, Zitatlinks zu generieren.

Problembehandlung

Verwenden Sie diesen Abschnitt, um häufige Probleme bei verwendung von Grounding mit Bing Search-Tools zu beheben.

Fehler beim Verbindungs-ID-Format

Problem: Fehlermeldung, die ein ungültiges Verbindungs-ID-Format angibt.

Lösung: Überprüfen Sie, ob Die Verbindungs-ID dem erforderlichen Format entspricht:

/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}

Ersetzen Sie alle Platzhalterwerte (einschließlich {{ und }}) durch Ihre tatsächlichen Ressourcenbezeichner.

Authentifizierungsfehler

Problem: Fehler "Nicht autorisiert" oder "Verboten" beim Erstellen von Agenten oder Ausführen von Abfragen.

Lösung:

  1. Stellen Sie sicher, dass Sie über die erforderlichen RBAC-Rollen verfügen:
  • Aktivieren Sie für die Bereitstellung von Bing-Ressourcen die Rolle Mitwirkender für die Zielressourcengruppe per Just-In-Time über Microsoft Entra PIM. Deaktivieren Sie sie nach der Bereitstellung. Agent-Entwickler und -Benutzer im Alltag benötigen diese Rolle nicht.
  • Foundry Project Manager im Foundry-Projekt zum Erstellen von Projektverbindungen.
  • Findry User im Foundry-Projekt zum Erstellen und Ausführen von Agents.
  1. Überprüfen Sie, ob Ihre Azure Anmeldeinformationen ordnungsgemäß konfiguriert sind:
    • Für Python/TypeScript: DefaultAzureCredential kann authentifiziert werden.
    • Für REST: Bearer-Token ist gültig und nicht abgelaufen
  2. Führen Sie az login aus, um Ihre Anmeldeinformationen zu aktualisieren, wenn Sie Azure CLI verwenden.

Probleme mit der Netzwerkkonnektivität

Problem: Bei Anfragen über Grounding mit Bing-Suche kommt es zur Zeitüberschreitung oder es ist keine Verbindung möglich.

Lösung: Bing-Datenverkehr verwendet öffentlichen ausgehenden Datenverkehr auch dann, wenn das Foundry-Projekt im Netzwerk geschützt ist. Stellen Sie sicher, dass Ihre Netzwerk- und Firewallrichtlinien den erforderlichen öffentlichen ausgehenden Datenverkehr zulassen. Erwarten Sie nicht, dass VPN- oder privates Endpunktrouting die Bing-Anforderung trägt.

Benutzerdefinierte Suche gibt keine Ergebnisse zurück.

Problem: Die benutzerdefinierte Bing-Suche gibt leere Ergebnisse zurück oder findet keine erwarteten Inhalte.

Lösung:

  • Überprüfen Sie, ob Ihre benutzerdefinierte Suchinstanz ordnungsgemäß mit Zieldomänen konfiguriert ist.
  • Stellen Sie sicher, dass die Domänen, die Sie durchsuchen möchten, von Bing öffentlich und indiziert sind.
  • Überprüfen Sie, ob die konfigurierten Domänen Ihren Erwartungen an die Suchabfrage entsprechen.
  • Wenn Ihre Website nicht indiziert ist, lesen Sie die Bing Webmaster-Richtlinien für Anweisungen zur Indizierung.
  • Warten Sie, bis Bing kürzlich hinzugefügte oder aktualisierte Inhalte durchforstet (kann mehrere Tage dauern).

Fehlende oder ungültige Konfigurationswerte

Problem: Code schlägt mit Verbindungsfehlern oder "nicht gefundenen" Antworten fehl.

Lösung: Stellen Sie sicher, dass Sie alle erforderlichen Konstanten im Code mit ihren tatsächlichen Werten aktualisieren:

  • PROJECT_ENDPOINT (Python/TypeScript) oder projectEndpoint (C#/Java): Die URL des Foundry-Projektendpunkts.
  • Verbindungsname oder -ID für Ihre Bing-Ressource.
  • Für die benutzerdefinierte Suche: Der Name der benutzerdefinierten Suchinstanz.
  • Legen Sie für REST-API Umgebungsvariablen fest: FOUNDRY_PROJECT_ENDPOINT, , FOUNDRY_MODEL_DEPLOYMENT_NAMEoder BING_PROJECT_CONNECTION_IDBING_CUSTOM_SEARCH_PROJECT_CONNECTION_ID, und AGENT_TOKEN.

Agent verwendet nicht das Erdungstool

Problem: Der Agent antwortet, ohne das Bing-Erdungstool aufzurufen.

Lösung:

  • Stellen Sie sicher, dass ihre Abfrage aktuelle Informationen benötigt, die das Modell nicht kennt.
  • Legen Sie für die explizite Toolverwendung tool_choice="required" in Ihrer Anforderung fest (Python/TypeScript-Beispiele zeigen dies).
  • Überprüfen Sie, ob das Tool in der Agentdefinition ordnungsgemäß konfiguriert ist.
  • Prüfen Sie die Anweisungen des Agenten und unterstützen Sie die Verwendung verfügbarer Tools, um aktuelle Informationen zu erhalten.

Instanzname für das Tool Grounding mit benutzerdefinierter Bing-Suche nicht gefunden

Problem:

{"error": "Tool_User_Error", "message": "[bing_search] Failed to call Get Custom Search Instance with status 404: {\"error\":{\"code\":\"ResourceNotFound\",\"message\":\"Instance or Customer not found\",\"target\":\"instanceName or customerId\"}}."}

Lösung:

  • Stellen Sie sicher, dass sich Ihr Instanzname im Grounding mit der Ressource für die benutzerdefinierte Bing-Suche befindet, die Sie verwenden.
  • Überprüfen Sie doppelt, ob der Instanzname richtig geschrieben ist.

Administratoren können RBAC-Rollenzuweisungen verwenden, um die Verwendung von "Grounding with Bing" und "Grounding with Bing Custom Search" innerhalb des Abonnements oder der Ressourcengruppe zu aktivieren oder zu deaktivieren.

  1. Um Microsoft.Bing zu registrieren, aktiviert der Administrator Mitwirkender im Abonnementbereich per Just-In-Time über Microsoft Entra PIM. Der Abonnementumfang ist erforderlich, da die Registrierung des Ressourcenanbieters den Vorgang /register/action verwendet. Nach der Registrierung deaktiviert der Administrator die Rolle. Weitere Informationen finden Sie unter Azure Ressourcenanbieter und -typen.
  2. Um die Ressource „Grounding mit Bing-Suche“ oder „Grounding mit benutzerdefinierter Bing-Suche“ zu erstellen und ihren Schlüssel abzurufen, aktiviert der bereitstellende Benutzer die Rolle Mitwirkender für die Zielressourcengruppe per Just-In-Time über Microsoft Entra PIM. Nach der Bereitstellung deaktiviert der Benutzer die Rolle.
  3. Um die Microsoft Foundry-Verbindung zu erstellen, weisen Sie dem Bereitstellungsbenutzer die Rolle "Foundry Project Manager" für die Foundry-project zu.

Tägliche Agent-Entwickler und Benutzer benötigen Foundry User im Foundry-Projekt. Sie benötigen keinen Mitwirkenden für das Abonnement oder die Ressourcengruppe.

Zum Löschen von Bing-Ressourcen, zum Aufheben der Registrierung des Microsoft.Bing Ressourcenanbieters und zum Erstellen der Azure Policy benötigt ein Administrator im Bereich des Abonnements die Rolle Owner oder Contributor. Diese Rollen sind für Abonnementgovernancevorgänge erforderlich. Aktivieren Sie die Rolle bei Bedarf über Microsoft Entra PIM, und deaktivieren Sie sie nach Abschluss dieses Vorgangs. Agent-Entwickler und -Benutzer im Alltag benötigen keine der beiden Rollen.

  1. Der Administrator löscht alle Grounding with Bing Search und Grounding with Bing Custom Search Ressourcen im Abonnement.
  2. Der Administrator hebt die Registrierung des Microsoft.Bing Ressourcenanbieters im Abonnement auf (Sie können die Registrierung vor dem Löschen aller Ressourcen nicht aufheben). Weitere Informationen finden Sie unter Azure Ressourcenanbieter und -typen.
  3. Der Administrator erstellt eine Azure-Richtlinie, um die Erstellung von Ressourcen für Grounding mit Bing-Suche und Grounding mit benutzerdefinierter Bing-Suche in seinem Abonnement zu verbieten, und hält sich dabei an das Beispiel.

Nächste Schritte