Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Websuchtool im Foundry Agent Service ermöglicht es dem Agenten-Foundry-Modell, Antworten mit Echtzeitinformationen aus dem öffentlichen Web abzurufen und zu verankern, bevor die Ausgabe generiert wird. Wenn diese Option aktiviert ist, kann das Modell aktuelle Antworten mit Zitate in Text zurückgeben und Ihnen dabei helfen, Agenten zu erstellen, die aktuelle, faktenbezogene Informationen für Benutzer bereitstellen.
Wichtig
- Die Websuche verwendet Grounding mit Bing-Suche und Grounding mit der benutzerdefinierten Bing-Suche, die First Party Consumption Services sind und durch diese Grounding mit Bing-Nutzungsbedingungen und die Microsoft-Datenschutzbestimmungen geregelt werden.
- Der Microsoft Datenschutz-Zusatz gilt nicht für Daten, die an Grounding mit Bing Search und Grounding mit Bing Custom Search gesendet werden. Wenn Sie Grounding mit Bing Search und Grounding mit der benutzerdefinierten Bing-Suche verwenden, erfolgen Datenübertragungen außerhalb von Vorschriften und geografischen Grenzen.
- Die Verwendung von Grounding mit Bing Search und Grounding mit Bing Custom Search kann Kosten verursachen. Details finden Sie unter "Preise ".
- Im Abschnitt Management finden Sie Informationen dazu, wie Azure Administratoren den Zugriff auf die Verwendung der Websuche verwalten können.
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 | Grundlegendes Agent-Setup | Standard-Agenten-Einrichtung |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Voraussetzungen
- Eine grundlegende oder Standard-Agent-Umgebung
- Das neueste SDK-Paket. Das .NET SDK ist derzeit als Vorschauversion verfügbar. Details finden Sie in der Schnellstartanleitung .
- für die Authentifizierung konfigurierte Azure-Anmeldeinformationen (z. B.
DefaultAzureCredential). - Die URL des Foundry-Projektendpunkts und ein Modellbereitstellungsname.
Codebeispiele
Hinweis
Informationen zur Optimierung der Toolverwendung finden Sie unter bewährten Methoden .
Allgemeine Websuche
Das folgende Beispiel zeigt, wie Sie den KI-Project-Client mithilfe der Azure Identitätsbibliothek für die Authentifizierung einrichten.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
PromptAgentDefinition,
WebSearchTool,
WebSearchApproximateLocation,
)
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Create an agent with the web search tool
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model="gpt-5-mini",
instructions="You are a helpful assistant that can search the web",
tools=[
WebSearchTool(
user_location=WebSearchApproximateLocation(
country="GB", city="London", region="London"
)
)
],
),
description="Agent for web search.",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")
# Send a query and stream the response
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"}},
)
# Process streaming events
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.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}")
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")
Erwartete Ausgabe
Agent created: <agent-name> (version 1)
Response: The latest trends in renewable energy include ...
URL Citation: https://example.com/source
Follow-up completed!
Full response: Based on current data ...
Agent deleted
Domainbeschränkte Suche mit benutzerdefinierter Bing-Suche
Das folgende Beispiel zeigt, wie Sie die Websuche mithilfe einer benutzerdefinierten Bing-Suchinstanz auf bestimmte Domänen beschränken. Mit diesem Ansatz können Sie steuern, welche Websites Ihr Agent durchsuchen kann.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
PromptAgentDefinition,
WebSearchTool,
WebSearchConfiguration,
)
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
BING_CUSTOM_SEARCH_CONNECTION_ID = "your_bing_custom_search_connection_id"
BING_CUSTOM_SEARCH_INSTANCE_NAME = "your_bing_custom_search_instance_name"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Create an agent with the web search tool and custom search configuration
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model="gpt-5-mini",
instructions="You are a helpful assistant that can search the web",
tools=[
WebSearchTool(
custom_search_configuration=WebSearchConfiguration(
project_connection_id=BING_CUSTOM_SEARCH_CONNECTION_ID,
instance_name=BING_CUSTOM_SEARCH_INSTANCE_NAME,
)
)
],
),
description="Agent for domain-restricted web search.",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")
# Send a query and stream the response
stream_response = openai.responses.create(
stream=True,
tool_choice="required",
input="What are the latest updates from Microsoft Learn?",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
# Process streaming events
for event in stream_response:
if event.type == "response.created":
print(f"Response created with ID: {event.response.id}")
elif event.type == "response.output_text.delta":
print(f"Delta: {event.delta}")
elif event.type == "response.text.done":
print(f"\nResponse 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"\nResponse completed!")
print(f"Full response: {event.response.output_text}")
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")
Erwartete Ausgabe
Agent created (id: abc123, name: MyAgent, version: 1)
Response created with ID: resp_456
Delta: Based on your custom search ...
Response done!
URL Citation: https://your-allowed-domain.com/article
Response completed!
Full response: Based on your custom search ...
Agent deleted
Tipps für domänenbeschränkte Suche
Die Einrichtung einer Grundlage mit der benutzerdefinierten Bing-Suche ist ein leistungsstarkes Tool, mit dem Sie einen Unterbereich des Webs auswählen können, um das Grundlagenwissen 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 Bing jedoch noch nicht indiziert hat, finden Sie in den Bing Webmaster-Richtlinien ausführliche Informationen dazu, 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.
- Sie benötigen mindestens die Rolle "Mitwirkender" für die Bing Custom Search-Ressource, um eine Konfiguration zu erstellen.
- Sie können bestimmte Domänen blockieren und eine Suche für den Rest des Webs ausführen (z. B. die Website eines Wettbewerbers).
- Die Grundlage für die benutzerdefinierte Bing-Suche gibt nur Ergebnisse für Domänen und Webseiten zurück, die von Bing öffentlich und indiziert sind.
- Sie können verschiedene Granularitätsebenen angeben:
- 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. )
- Domäne (z. B
Deep Research mit Websuche
Das folgende Beispiel zeigt, wie Sie das o3-deep-research Modell mit dem Websuchtool verwenden. Dieser Ansatz ersetzt das veraltete Deep Research-Tool und ermöglicht eine mehrstufige Recherche mithilfe von öffentlichen Webdaten direkt über das Websuchtool.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, WebSearchPreviewTool
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Create agent with web search tool using o3-deep-research model
agent = project.agents.create_version(
agent_name="MyDeepResearchAgent",
definition=PromptAgentDefinition(
model="o3-deep-research",
instructions="You are a helpful assistant that can search the web",
tools=[WebSearchPreviewTool()],
),
description="Agent for deep research with web search.",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")
# Create a conversation for the agent interaction
conversation = openai.conversations.create()
print(f"Created conversation (id: {conversation.id})")
# Send a query to search the web
stream_response = openai.responses.create(
stream=True,
conversation=conversation.id,
input="What are the latest advancements in quantum computing?",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
# Process streaming events as they arrive
for event in stream_response:
if event.type == "response.created":
print(f"Response created with ID: {event.response.id}")
elif event.type == "response.output_text.delta":
print(f"Delta: {event.delta}")
elif event.type == "response.text.done":
print(f"\nResponse done!")
elif event.type == "response.completed":
print(f"\nResponse completed!")
print(f"Full response: {event.response.output_text}")
# Clean up resources
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")
Allgemeine Websuche
In diesem Beispiel verwenden Sie den Agent, um die Websuche an dem angegebenen Speicherort auszuführen. Im Beispiel in diesem Abschnitt werden synchrone Aufrufe verwendet. Für ein asynchrones Beispiel siehe den Beispielcode im Azure SDK für .NET-Repository auf GitHub.
using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
// Create project client to call Foundry API
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Create an agent with the web search tool
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
Instructions = "You are a helpful assistant that can search the web",
Tools = {
ResponseTool.CreateWebSearchTool(userLocation: WebSearchToolLocation.CreateApproximateLocation(
country: "GB",
city: "London",
region: "London"
)
),
}
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
// Ask a question related to London.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
ResponseResult response = responseClient.CreateResponse("Show me the latest London Underground service updates");
// Create the response and verify it completed.
Console.WriteLine($"Response status: {response.Status}");
Console.WriteLine(response.GetOutputText());
// Delete the created agent version.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
Erwartete Ausgabe
Im Folgenden sehen Sie ein Beispiel für die erwartete Ausgabe beim Ausführen des C#-Codes:
Response status: Completed
The London Underground currently has service disruptions on ...
Agent deleted
Domänenbeschränkte Websuche
Um Ihrem Agenten die Verwendung der Websuche mit Grounding über eine benutzerdefinierte Bing-Suchinstanz zu ermöglichen.
- Erstellen Sie zuerst den Projektclient, und definieren Sie die werte, die in den nächsten Schritten verwendet werden.
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var modelDeploymentName = "gpt-4.1-mini";
var connectionName = "your_custom_bing_connection_name";
var customInstanceName = "your_bing_custom_search_instance_name";
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: new DefaultAzureCredential());
- Erstellen Sie einen Agent, der die Websuche mit der Benutzerdefinierten Bing-Suchinstanz verwenden kann.
Synchrones Beispiel:
AIProjectConnection bingConnection = projectClient.Connections.GetConnection(connectionName: connectionName);
WebSearchTool webSearchTool = ResponseTool.CreateWebSearchTool();
webSearchTool.CustomSearchConfiguration = new(bingConnection.Id, customInstanceName);
DeclarativeAgentDefinition agentDefinition = new(model: modelDeploymentName)
{
Instructions = "You are a helpful agent.",
Tools = { webSearchTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
Asynchrones Beispiel:
AIProjectConnection bingConnection = projectClient.Connections.GetConnection(connectionName: connectionName);
WebSearchTool webSearchTool = ResponseTool.CreateWebSearchTool();
webSearchTool.CustomSearchConfiguration = new(bingConnection.Id, customInstanceName);
DeclarativeAgentDefinition agentDefinition = new(model: modelDeploymentName)
{
Instructions = "You are a helpful agent.",
Tools = { webSearchTool }
};
AgentVersion agentVersion = await projectClient.AgentAdministrationClient.CreateAgentVersionAsync(
agentName: "myAgent",
options: new(agentDefinition));
- Zum Abrufen der formatierten Anmerkung haben wir die
GetFormattedAnnotationMethode erstellt.
private static string GetFormattedAnnotation(ResponseItem item)
{
if (item is MessageResponseItem messageItem)
{
foreach (ResponseContentPart content in messageItem.Content)
{
foreach (ResponseMessageAnnotation annotation in content.OutputTextAnnotations)
{
if (annotation is UriCitationMessageAnnotation uriAnnotation)
{
return $" [{uriAnnotation.Title}]({uriAnnotation.Uri})";
}
}
}
}
return "";
}
- Stellen Sie die Frage, und streamen Sie die Antwort.
Synchrones Beispiel:
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
string annotation = "";
string text = "";
CreateResponseOptions options = new()
{
ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
InputItems = { ResponseItem.CreateUserMessageItem("How many medals did the USA win in the 2024 summer olympics?") },
};
foreach (StreamingResponseUpdate streamResponse in responseClient.CreateResponseStreaming(options))
{
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)
{
annotation = GetFormattedAnnotation(itemDoneUpdate.Item);
}
}
else if (streamResponse is StreamingResponseErrorUpdate errorUpdate)
{
throw new InvalidOperationException($"The stream has failed: {errorUpdate.Message}");
}
}
Console.WriteLine($"{text}{annotation}");
Asynchrones Beispiel:
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
string annotation = "";
string text = "";
CreateResponseOptions options = new()
{
ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
InputItems = { ResponseItem.CreateUserMessageItem("How many medals did the USA win in the 2024 summer olympics?") },
};
await foreach (StreamingResponseUpdate streamResponse in responseClient.CreateResponseStreamingAsync(options))
{
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)
{
annotation = GetFormattedAnnotation(itemDoneUpdate.Item);
}
}
else if (streamResponse is StreamingResponseErrorUpdate errorUpdate)
{
throw new InvalidOperationException($"The stream has failed: {errorUpdate.Message}");
}
}
Console.WriteLine($"{text}{annotation}");
- Löschen Sie schließlich alle Ressourcen, die wir in diesem Beispiel erstellt haben.
Synchrones Beispiel:
projectClient.AgentAdministrationClient.DeleteAgentVersionAsync(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
Asynchrones Beispiel:
await projectClient.AgentAdministrationClient.DeleteAgentVersionAsync(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
Erwartete Ausgabe
Im Folgenden sehen Sie ein Beispiel für die erwartete Ausgabe beim Ausführen des C#-Codes:
Response status: Completed
The London Underground currently has service disruptions on ...
Agent deleted
Allgemeine Websuche
Zugriffstoken abrufen:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Das folgende Beispiel zeigt, wie Sie eine Antwort mithilfe eines Agents erstellen, der das Websuchtool aktiviert hat.
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Tell me about the latest news about AI",
"tool_choice": "required",
"tools": [
{
"type": "web_search"
}
]
}'
Erwartete Ausgabe
Das folgende Beispiel zeigt die erwartete Ausgabe bei Verwendung des Websuchtools über die REST-API:
{
"id": "resp_abc123xyz",
"object": "response",
"created_at": 1702345678,
"status": "completed",
"output_text": "Here is a grounded response with citations.",
"output_items": [
{
"type": "message",
"content": [
{
"type": "output_text",
"text": "Here is a grounded response with citations.",
"annotations": [
{
"type": "url_citation",
"url": "https://contoso.com/example-source",
"start_index": 0,
"end_index": 43
}
]
}
]
}
]
}
Domänenbeschränkte Websuche
Zugriffstoken abrufen:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Das folgende Beispiel zeigt, wie Sie eine Antwort mithilfe eines Agents erstellen, der das Websuchtool aktiviert hat.
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Tell me about the latest news about AI",
"tool_choice": "required",
"tools": [
{
"type": "web_search",
"custom_search_configuration": [
{
"project_connection_id": "'$BING_CUSTOM_SEARCH_PROJECT_CONNECTION_ID'",
"instance_name": "'$BING_CUSTOM_SEARCH_INSTANCE_NAME'",
}
]
}
]
}'
Verwenden des Websuchtools mit TypeScript
Im folgenden TypeScript-Beispiel wird veranschaulicht, wie ein Agent mit dem Websuchtool erstellt wird. Ein Beispiel, das JavaScript verwendet, finden Sie im Beispielcode sample code im Azure SDK für JavaScript-Repositories auf GitHub.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* This sample demonstrates how to run Prompt Agent operations using the Web Search Tool.
*
* @summary This sample demonstrates how to create an agent with web search capabilities,
* send a query to search the web, and clean up resources.
*
* @warning Web Search tool uses Grounding with Bing, which has additional costs and terms: [terms of use](https://www.microsoft.com/bing/apis/grounding-legal-enterprise) and [privacy statement](https://go.microsoft.com/fwlink/?LinkId=521839&clcid=0x409). Customer data will flow outside the Azure compliance boundary. Learn more [here](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/web-search?pivots=rest-api)
*
* @azsdk-weight 100
*/
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";
export async function main(): Promise<void> {
// Create AI Project client
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();
console.log("Creating agent with web search tool...");
// Create Agent with web search tool
const agent = await project.agents.createVersion("agent-web-search", {
kind: "prompt",
model: "gpt-5-mini",
instructions: "You are a helpful assistant that can search the web",
tools: [
{
type: "web_search",
user_location: {
type: "approximate",
country: "GB",
city: "London",
region: "London",
},
},
],
});
console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);
// Create a conversation for the agent interaction
const conversation = await openai.conversations.create();
console.log(`Created conversation (id: ${conversation.id})`);
// Send a query to search the web
console.log("\nSending web search query...");
const response = await openai.responses.create(
{
conversation: conversation.id,
input: "Show me the latest London Underground service updates",
},
{
body: { agent: { name: agent.name, type: "agent_reference" } },
},
);
console.log(`Response: ${response.output_text}`);
// Clean up resources
console.log("\nCleaning up resources...");
await openai.conversations.delete(conversation.id);
console.log("Conversation deleted");
await project.agents.deleteVersion(agent.name, agent.version);
console.log("Agent deleted");
console.log("\nWeb search sample completed!");
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Erwartete Ausgabe
Das folgende Beispiel zeigt die erwartete Ausgabe beim Ausführen des TypeScript-Codes:
Agent created (id: 12345, name: agent-web-search, version: 1)
Response: The agent returns a grounded response that includes citations.
Agent deleted
Verwenden der Websuche 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.0.0</version>
</dependency>
Erstellen eines Agents mit Websuche
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AgentVersionDetails;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.ai.agents.models.WebSearchTool;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import java.util.Collections;
public class WebSearchExample {
public static void main(String[] args) {
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
AgentsClient agentsClient = builder.buildAgentsClient();
ResponsesClient responsesClient = builder.buildResponsesClient();
// Create web search tool with user location
WebSearchPreviewTool webSearchTool = new WebSearchTool();
// Create agent with web search tool
PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-5-mini")
.setInstructions("You are a helpful assistant that can search the web for current information.")
.setTools(Collections.singletonList(webSearchTool));
AgentVersionDetails agent = agentsClient.createAgentVersion("web-search-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 trends in renewable energy?"));
System.out.println("Response: " + response.output());
// Clean up
agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
}
}
Erwartete Ausgabe
Agent created: web-search-agent (version 1)
Response: [ResponseOutputItem with web search results about renewable energy trends ...]
Konfigurieren des Websuchtools
Sie können websuchverhalten konfigurieren, wenn Sie Ihren Agent erstellen.
Optionale Parameter für die allgemeine Websuche
-
user_location: Unterstützt die Websuche beim Zurückgeben von Ergebnissen, die für die Geografie eines Benutzers relevant sind. Verwenden Sie einen ungefähren Standort, wenn Sie Ergebnisse in ein Land/eine Region/Stadt lokalisieren möchten. -
search_context_size: Steuert, wie viel Kontextfenster für die Suche verwendet werden soll. Unterstützte Werte sindlow,mediumundhigh. Der Standardwert istmedium.
Überlegungen zu Sicherheit und Datenschutz
- Behandeln von Websuchergebnissen als nicht vertrauenswürdige Eingabe. Überprüfen und berigen Sie Daten, bevor Sie sie in nachgeschalteten Systemen verwenden.
- Vermeiden Sie das Senden geheimer oder vertraulicher personenbezogener Daten in Aufforderungen, die möglicherweise an externe Dienste weitergeleitet werden.
- Überprüfen Sie die Begriffe, Datenschutz und Datenbegrenzungsnotizen im Vorschauabschnitt dieses Artikels, bevor Sie die Websuche in der Produktion aktivieren.
Bekannte Einschränkungen
Informationen zu Websuchverhalten und -einschränkungen in der Antwort-API finden Sie unter Websuche mit der Antwort-API.
Problembehandlung
| Angelegenheit | Ursache | Auflösung |
|---|---|---|
| Die Websuche wird nicht verwendet, und es werden keine Zitate angezeigt. | Das Modell hat nicht festgestellt, dass die Websuche erforderlich war. | Aktualisieren Sie Ihre Anweisungen, um die Websuche für aktuelle Fragen explizit zuzulassen, und formulieren Sie eine Suchanfrage, die aktuelle Informationen erfordert. |
| Anforderungen schlagen nach dem Aktivieren der Websuche fehl | Die Websuche ist auf Abonnementebene deaktiviert. | Bitten Sie einen Administrator, die Websuche zu aktivieren. Siehe Administratorsteuerelement für das Websuchtool. |
| REST-Anforderungen geben Authentifizierungsfehler zurück | Bearer-Token fehlt, ist abgelaufen oder weist unzureichende Berechtigungen auf. | Aktualisieren Sie Ihr Token, und bestätigen Sie den Zugriff auf das Projekt und den Agent. |
| Suche gibt veraltete Informationen zurück. | Webinhalte, die nicht kürzlich indiziert wurden | Verfeinern Sie Ihre Abfrage, um die neuesten Informationen explizit anzufordern. Die Ergebnisse hängen vom Indizierungszeitplan von Bing ab. |
| Keine Ergebnisse für bestimmte Themen | Abfrage zu schmal oder Inhalt nicht indiziert | Erweitern Sie Ihre Suchabfrage. Einige Nischenthemen haben möglicherweise eine begrenzte Webabdeckung. |
| Fehler beim Einschränken der Rate (429) | Zu viele Anforderungen in einem kurzen Zeitraum | Implementieren Sie exponentielle Backoff- und Wiederholungslogik. Erwägen Sie, die Anforderungen zeitlich zu staffeln. |
| Inkonsistente Zitatformatierung | Das Antwortformat variiert je nach Abfragetyp. | Standardisieren sie die Zitatbehandlung in Ihrem Anwendungscode. Analysieren Sie sowohl Inline- als auch Referenzstil-Zitate. |
| Tool nicht für die Bereitstellung verfügbar | Regionale oder Modellbeschränkungen | Vergewissern Sie sich, dass die Websuche in Ihrer Region und mit Ihrer Modellbereitstellung verfügbar ist. Überprüfen Sie die bewährten Methoden des Tools. |
Administratorsteuerelement für das Websuchtool
Sie können das Websuchtool im Foundry Agent Service auf Abonnementebene aktivieren oder deaktivieren, indem Sie Azure CLI verwenden. Diese Einstellung gilt für alle Konten innerhalb des angegebenen Abonnements.
Voraussetzungen
Bevor Sie die folgenden Befehle ausführen, stellen Sie sicher, dass Sie:
- Azure CLI installiert haben.
- Sind mit
az loginbei Azure angemeldet. - Besitzen Sie Besitzer- oder Mitwirkenderzugriff auf das Abonnement.
Websuche deaktivieren
Führen Sie den folgenden Befehl aus, um das Websuchtool für alle Konten in einem Abonnement zu deaktivieren:
az feature register \
--name OpenAI.BlockedTools.web_search \
--namespace Microsoft.CognitiveServices \
--subscription "<subscription-id>"
Mit diesem Befehl wird die Websuche für alle Konten im angegebenen Abonnement deaktiviert.
Websuche aktivieren
Führen Sie den folgenden Befehl aus, um das Websuchtool zu aktivieren:
az feature unregister \
--name OpenAI.BlockedTools.web_search \
--namespace Microsoft.CognitiveServices \
--subscription "<subscription-id>"
Mit diesem Befehl können Websuchfunktionen für alle Konten im Abonnement aktiviert werden.