Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание
Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.
Важно
Функции, возможности или свойства, помеченные (предварительная версия), не охватываются соглашением об уровне обслуживания, не рекомендуются для рабочих нагрузок и могут изменяться или ограничиваться до того, как они становятся общедоступными. Условия предварительной версии Поиск с использованием ИИ Azure применяются ко всем функциям предварительной версии, независимо от того, является ли он автономным или частью общедоступной функции.
Узнайте, как создать интеллектуальное решение с поддержкой MCP, которое интегрирует Поиск с использованием ИИ Azure со службой Foundry Agent для агентского извлечения. Эту архитектуру можно использовать для приложений для общения, которые требуют сложного рассуждения в рамках обширных областей знаний, таких как поддержка клиентов или техническая поддержка.
В этом руководстве используются предварительные версии поверхностей REST API в двух местах. База знаний использует output_mode и retrieval_reasoning_effort (предварительная версия) для явного указания извлекаемого вывода и минимального рассуждения, хотя обычно доступно эквивалентное поведение. Подключение проекта использует RemoteTool (предварительная версия) и управляемую идентичность проекта для аутентификации в Поиск с использованием ИИ Azure.
В этом руководстве вы:
- Настройка доступа на основе ролей для Поиск с использованием ИИ Azure и Microsoft Foundry
- Создание индекса поиска, источника знаний и базы знаний в Поиск с использованием ИИ Azure
- Создание подключения проекта для связи MCP между Поиск с использованием ИИ Azure и Microsoft Foundry
- Создание агента в Microsoft Foundry, использующего средство MCP для извлечения
- Тестирование решения путем чата с агентом
- Советы по оптимизации решения
Совет
Хотите начать сразу? Клонируйте записную книжку agentic-retrieval-pipeline-example Python в GitHub. Записная книжка содержит код из этого руководства в формате, готовом к выполнению.
Сведения о сценарии частного развертывания, ориентированном на проверку входящей и исходящей частной связности, см. в руководстве: Развертывание частного агентного поиска для Foundry IQ.
Необходимые условия
Служба Поиск с использованием ИИ Azure в любом регионе, который предоставляет агентский доступ.
Проект Microsoft Foundry и ресурс. При создании проекта ресурс создается автоматически.
Модель встраивания текста, развернута в вашем проекте для векторизации на этапе запроса. Это решение использует
text-embedding-3-large.LLM, размещенная в вашем проекте для агента. Это решение использует
gpt-5-mini.Модели семейства GPT-4 устарели. Сведения о датах прекращения поддержки и текущем статусе в Microsoft Foundry см. в разделе График прекращения поддержки моделей — Microsoft Foundry.
Разрешение на доступ к Поиск с использованием ИИ Azure и Microsoft ресурсам Foundry и управление ими. Дополнительные сведения см. в разделе "Настройка доступа".
Python 3.8 или более поздней версии.
Visual Studio Code с расширениями Python и Jupyter.
Azure CLI для аутентификации без использования ключа с Microsoft Entra ID.
Важно
Если вы отключите доступ к общедоступной сети для службы поиска и используете её как инструмент агента с ресурсом Microsoft Foundry с изолированной сетью, для создания агентов необходимо использовать портал Microsoft Foundry (новый), пакет SDK или CLI. Портал Microsoft Foundry (классический) не поддерживает этот сценарий. Дополнительные сведения см. в разделе "Средства агента" с сетевой изоляцией.
Понимание решения
Это решение объединяет Поиск с использованием ИИ Azure и Microsoft Foundry для создания сквозного конвейера извлечения:
Поиск с использованием ИИ Azure размещает базу знаний, которая обрабатывает планирование запросов, выполнение запросов и синтез результатов. Вы создаете индекс поиска для хранения содержимого, источника знаний, ссылающегося на индекс, и базу знаний, которая выполняет гибридное извлечение из источника знаний.
Microsoft Foundry размещает ваши развертывания моделей Azure OpenAI, подключение проекта и агент. Вы создаете подключение проекта, указывающее на конечную точку MCP базы знаний, а затем создаете агент, использующий средство MCP для доступа к базе знаний.
Пользователь инициирует обработку запросов, взаимодействуя с клиентским приложением, например чат-ботом, который вызывает агент. Агент использует средство MCP для оркестрации запросов к базе знаний и синтеза ответов. Когда чат-бот вызывает агент, средство MCP вызывает базу знаний в Поиск с использованием ИИ Azure и отправляет ответ агенту и чат-боту.
Настройка доступа
Перед началом работы убедитесь, что у вас есть разрешения на доступ к содержимому и операциям. Мы рекомендуем Microsoft Entra ID для проверки подлинности и доступа на основе ролей для авторизации. Для назначения ролей необходимо быть владельцем или администратором доступа пользователей . Если роли нецелесообразны, используйте проверку подлинности на основе ключей.
Чтобы настроить доступ для этого решения, выполните следующие действия.
Войдите на портал Azure.
Включите управляемое удостоверение, назначаемое системой , как для службы поиска, так и для проекта. Вы можете сделать это на странице Идентификация каждого ресурса.
В службе поиска включите доступ на основе ролей и назначьте следующие роли.
Роль Назначенное лицо Цель Участник службы поиска Учетная запись пользователя Создание объектов Вкладчик данных поискового индекса Учетная запись пользователя Загрузка данных Средство чтения данных индексов поиска Учетная запись пользователя и управляемая идентификация проекта Чтение индексированного содержимого На родительском ресурсе проекта назначьте следующие роли.
Роль Назначенное лицо Цель Пользователь Foundry Учетная запись пользователя Доступ к развертываниям моделей и созданию агентов Руководитель литейного проекта Учетная запись пользователя Создание подключения к проекту и использование средства MCP в агентах Пользователь Когнитивных сервисов Управляемая идентификация службы поиска Доступ к базе знаний
Важно
Недавно были переименованы роли RBAC в Foundry. Foundry User, Foundry Owner, Foundry Account Owner и Foundry Project Manager ранее назывались пользователь Azure AI, владелец Azure AI, владелец учетной записи Azure AI и руководитель проекта Azure AI. Пока новое название внедряется, в некоторых местах вы всё ещё можете видеть прежние названия. Идентификаторы ролей и основные разрешения не меняются из-за переименования.
Настройка среды
Создайте папку с именем
tutorial-agentic-retrievalв локальной системе.Откройте папку в Visual Studio Code.
Выберите View>Command Palette и выберите Python: Create Environment. Следуйте инструкциям по созданию виртуальной среды.
Выберите терминал>"Новый терминал".
Установите необходимые пакеты.
pip install azure-ai-projects==2.0.0b1 azure-mgmt-cognitiveservices azure-identity ipykernel python-dotenv azure-search-documents==11.7.0b2 requests openaiСоздайте файл с именем
.envв папкеtutorial-agentic-retrieval.Добавьте в файл следующие переменные
.env, заменив значения заполнителей собственными.AZURE_SEARCH_ENDPOINT = https://{your-service-name}.search.windows.net PROJECT_ENDPOINT = https://{your-resource-name}.services.ai.azure.com/api/projects/{your-project-name} PROJECT_RESOURCE_ID = /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.CognitiveServices/accounts/{account-name}/projects/{project-name} AZURE_OPENAI_ENDPOINT = https://{your-resource-name}.openai.azure.com AZURE_OPENAI_EMBEDDING_DEPLOYMENT = text-embedding-3-large AGENT_MODEL = gpt-5-miniКонечные точки и идентификатор ресурса можно найти на портале Azure:
AZURE_SEARCH_ENDPOINTнаходится на странице обзора службы поиска.PROJECT_ENDPOINTнаходится на странице конечных точек проекта.PROJECT_RESOURCE_IDнаходится на странице свойств проекта.AZURE_OPENAI_ENDPOINTнаходится на странице конечных точек родительского ресурса проекта.
Для проверки подлинности без ключа с помощью Microsoft Entra ID войдите в учетную запись Azure. Если у вас несколько подписок, выберите тот, который содержит ресурсы Поиск с использованием ИИ Azure и Microsoft Foundry.
az loginСоздайте файл с именем
tutorial.ipynbв папкеtutorial-agentic-retrieval. В следующем разделе вы добавите ячейки кода в этот файл.
Создание решения
В этом разделе вы создаете компоненты агентского решения для извлечения данных. Добавьте каждый фрагмент кода в отдельную ячейку кода в записной книжке tutorial.ipynb и последовательно запустите ячейки.
Ниже приведены действия, описанные в этом разделе:
- Загрузка подключений
- Создание индекса поиска
- Отправка документов в индекс
- Создание источника знаний
- Создание базы знаний
- Настройка клиента проекта
- Создание подключения к проекту
- Создание агента с помощью средства MCP
- Чат с агентом
- Очистка ресурсов
Загрузка подключений
Следующий код загружает переменные среды из файла .env и устанавливает подключения к Поиск с использованием ИИ Azure и Microsoft Foundry.
import os
from azure.identity import DefaultAzureCredential
from azure.mgmt.core.tools import parse_resource_id
from dotenv import load_dotenv
load_dotenv(override=True) # Take environment variables from .env
project_endpoint = os.environ["PROJECT_ENDPOINT"]
project_resource_id = os.environ["PROJECT_RESOURCE_ID"]
project_connection_name = os.getenv("PROJECT_CONNECTION_NAME", "earthknowledgeconnection")
agent_model = os.getenv("AGENT_MODEL", "gpt-5-mini")
agent_name = os.getenv("AGENT_NAME", "earth-knowledge-agent")
endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
credential = DefaultAzureCredential()
knowledge_source_name = os.getenv("AZURE_SEARCH_KNOWLEDGE_SOURCE_NAME", "earth-knowledge-source")
index_name = os.getenv("AZURE_SEARCH_INDEX", "earth-at-night")
azure_openai_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"]
azure_openai_embedding_deployment = os.getenv("AZURE_OPENAI_EMBEDDING_DEPLOYMENT", "text-embedding-3-large")
azure_openai_embedding_model = os.getenv("AZURE_OPENAI_EMBEDDING_MODEL", "text-embedding-3-large")
base_name = os.getenv("AZURE_SEARCH_AGENT_NAME", "earth-knowledge-base")
# Parse the resource ID to extract subscription and other components
parsed_resource_id = parse_resource_id(project_resource_id)
subscription_id = parsed_resource_id['subscription']
resource_group = parsed_resource_id['resource_group']
account_name = parsed_resource_id['name']
project_name = parsed_resource_id['child_name_1']
Создание индекса поиска
В Поиск с использованием ИИ Azure индекс представляет собой структурированную коллекцию данных. Следующий код создает индекс для хранения содержимого, доступного для поиска, для базы знаний.
Схема индекса содержит поля для идентификации документа и содержимого страницы, векторных представлений и чисел. Схема также включает конфигурации для семантического ранжирования и векторного поиска, которые используют развертывание text-embedding-3-large для векторизации текста и сопоставления документов на основе семантического сходства.
Дополнительные сведения об этом шаге см. в разделе Создать индекс для агентного извлечения в Поиск с использованием ИИ Azure.
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
AzureOpenAIVectorizer, AzureOpenAIVectorizerParameters,
HnswAlgorithmConfiguration, SearchField, SearchIndex,
SemanticConfiguration, SemanticField, SemanticPrioritizedFields,
SemanticSearch, VectorSearch, VectorSearchProfile
)
index = SearchIndex(
name=index_name,
fields=[
SearchField(name="id", type="Edm.String", key=True, filterable=True, sortable=True, facetable=True),
SearchField(name="page_chunk", type="Edm.String", filterable=False, sortable=False, facetable=False),
SearchField(name="page_embedding_text_3_large", type="Collection(Edm.Single)", stored=False, vector_search_dimensions=3072, vector_search_profile_name="hnsw_text_3_large"),
SearchField(name="page_number", type="Edm.Int32", filterable=True, sortable=True, facetable=True)
],
vector_search=VectorSearch(
profiles=[VectorSearchProfile(name="hnsw_text_3_large", algorithm_configuration_name="alg", vectorizer_name="azure_openai_text_3_large")],
algorithms=[HnswAlgorithmConfiguration(name="alg")],
vectorizers=[
AzureOpenAIVectorizer(
vectorizer_name="azure_openai_text_3_large",
parameters=AzureOpenAIVectorizerParameters(
resource_url=azure_openai_endpoint,
deployment_name=azure_openai_embedding_deployment,
model_name=azure_openai_embedding_model
)
)
]
),
semantic_search=SemanticSearch(
default_configuration_name="semantic_config",
configurations=[
SemanticConfiguration(
name="semantic_config",
prioritized_fields=SemanticPrioritizedFields(
content_fields=[
SemanticField(field_name="page_chunk")
]
)
)
]
)
)
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)
index_client.create_or_update_index(index)
print(f"Index '{index_name}' created or updated successfully")
Отправка документов в индекс
В настоящее время индекс пуст. Следующий код заполняет индекс документами JSON из электронной книги NASA "Земля ночью". В соответствии с Поиск с использованием ИИ Azure каждый документ соответствует полям и типам данных, определенным в схеме индекса.
Дополнительные сведения об этом шаге см. в разделе "Отправка данных в индекс".
import requests
from azure.search.documents import SearchIndexingBufferedSender
url = "https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/refs/heads/main/nasa-e-book/earth-at-night-json/documents.json"
documents = requests.get(url).json()
with SearchIndexingBufferedSender(endpoint=endpoint, index_name=index_name, credential=credential) as client:
client.upload_documents(documents=documents)
print(f"Documents uploaded to index '{index_name}'")
Создание источника знаний
Источник знаний — это повторно используемые ссылки на исходные данные. Следующий код создает источник знаний, предназначенный для созданного ранее индекса.
source_data_fields указывает, какие поля индекса включены в ссылки на цитаты. В этом примере содержатся только человеко-читаемые поля, чтобы избежать объемных и неинтерпретируемых встраиваний в ответы.
Дополнительные сведения об этом шаге см. в статье "Создание источника знаний индекса поиска".
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
SearchIndexFieldReference, SearchIndexKnowledgeSource,
SearchIndexKnowledgeSourceParameters
)
ks = SearchIndexKnowledgeSource(
name=knowledge_source_name,
description="Knowledge source for Earth at night data",
search_index_parameters=SearchIndexKnowledgeSourceParameters(
search_index_name=index_name,
semantic_configuration_name="semantic_config",
source_data_fields=[
SearchIndexFieldReference(name="id"),
SearchIndexFieldReference(name="page_chunk"),
SearchIndexFieldReference(name="page_number")
]
),
)
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)
index_client.create_or_update_knowledge_source(knowledge_source=ks)
print(f"Knowledge source '{knowledge_source_name}' created or updated successfully.")
Создание базы знаний
В следующем коде создается база знаний, которая оркестрирует агентивное извлечение из вашего источника знаний. Код также сохраняет конечную точку MCP базы знаний, которую агент будет использовать для доступа к базе знаний.
Для интеграции со службой агента Foundry база знаний настроена со следующими параметрами:
output_mode(предварительная версия) настроен на извлекаемые данные, которые предоставляют агенту дословное, необработанное содержимое для обоснования и рассуждений. Альтернативный режим, синтез ответов, возвращает предварительно созданные ответы, которые ограничивают способность агента анализировать исходное содержимое.retrieval_reasoning_effort(предварительная версия) настроен на режим минимальных усилий, что позволяет обойти планирование запросов на основе LLM, чтобы снизить затраты и задержки. Для других задач рассуждения база знаний использует крупную языковую модель (LLM) для переформулировки запросов пользователей перед извлечением.
Дополнительные сведения об этом шаге см. в разделе Создание базы знаний в Поиск с использованием ИИ Azure.
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import KnowledgeBase, KnowledgeSourceReference
from azure.search.documents.knowledgebases.models import KnowledgeRetrievalMinimalReasoningEffort
knowledge_base = KnowledgeBase(
name=base_name,
knowledge_sources=[
KnowledgeSourceReference(
name=knowledge_source_name
)
],
output_mode="extractiveData",
retrieval_reasoning_effort=KnowledgeRetrievalMinimalReasoningEffort()
)
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)
index_client.create_or_update_knowledge_base(knowledge_base=knowledge_base)
print(f"Knowledge base '{base_name}' created or updated successfully")
mcp_endpoint = f"{endpoint.rstrip('/')}/knowledgebases/{base_name}/mcp?api-version=2026-08-01-preview"
Настройка клиента проекта
Используйте AIProjectClient для создания клиентского подключения к проекту Microsoft Foundry. В проекте может пока не быть агентов, но если вы уже прошли это руководство, агент будет отображаться здесь.
from azure.ai.projects import AIProjectClient
project_client = AIProjectClient(endpoint=project_endpoint, credential=credential)
list(project_client.agents.list())
Создание подключения к проекту
Следующий код создает в Microsoft Foundry подключение к проекту RemoteTool (предварительная версия), указывающее на конечную точку MCP для вашей базы знаний. Это подключение использует управляемое удостоверение проекта для проверки подлинности в Поиск с использованием ИИ Azure.
import requests
from azure.identity import get_bearer_token_provider
bearer_token_provider = get_bearer_token_provider(credential, "https://management.azure.com/.default")
headers = {
"Authorization": f"Bearer {bearer_token_provider()}",
}
response = requests.put(
f"https://management.azure.com{project_resource_id}/connections/{project_connection_name}?api-version=2025-10-01-preview",
headers=headers,
json={
"name": project_connection_name,
"type": "Microsoft.MachineLearningServices/workspaces/connections",
"properties": {
"authType": "ProjectManagedIdentity",
"category": "RemoteTool",
"target": mcp_endpoint,
"isSharedToAll": True,
"audience": "https://search.azure.com/",
"metadata": { "ApiType": "Azure" }
}
}
)
response.raise_for_status()
print(f"Connection '{project_connection_name}' created or updated successfully.")
Создание агента с помощью средства MCP
Предупреждение
Реализации MCP подвержены рискам, таким как атаки, каскадные неудачи и потеря человеческого надзора. Эти риски можно снизить, проверяя серверы MCP на предмет безопасности и надёжности, следуя рекомендованным Microsoft практикам и лучшим отраслевым практикам, а также внедряя механизмы утверждения действий и отслеживая каскадное поведение.
Следующий код создает агент, настроенный с помощью средства MCP. Когда агент получает запрос пользователя, он может вызвать базу знаний через средство MCP, чтобы получить соответствующее содержимое для реагирования.
Определение агента содержит инструкции, указывающие его поведение и созданное ранее соединение проекта. На основе наших экспериментов эти инструкции эффективны в максимизации точности вызовов базы знаний и обеспечения правильного форматирования ссылок.
Дополнительные сведения об этом шаге см. в Кратком руководстве: Создание нового агента.
from azure.ai.projects.models import PromptAgentDefinition, MCPTool
instructions = """
You are a helpful assistant that must use the knowledge base to answer all the questions from user. You must never answer from your own knowledge under any circumstances.
Every answer must always provide annotations for using the MCP knowledge base tool and render them as: `【message_idx:search_idx†source_name】`
If you cannot find the answer in the provided knowledge base you must respond with "I don't know".
"""
mcp_kb_tool = MCPTool(
server_label="knowledge-base",
server_url=mcp_endpoint,
require_approval="never",
allowed_tools=["knowledge_base_retrieve"],
project_connection_id=project_connection_name
)
agent = project_client.agents.create_version(
agent_name=agent_name,
definition=PromptAgentDefinition(
model=agent_model,
instructions=instructions,
tools=[mcp_kb_tool]
)
)
print(f"AI agent '{agent_name}' created or updated successfully")
(Необязательно) Применять проверку прав доступа с помощью заголовков для каждого запроса
Если любой из источников знаний содержит содержимое, защищенное разрешениями, подсистема извлечения может фильтровать результаты, чтобы каждый пользователь видел только документы, к которым они авторизованы для доступа. Чтобы включить эту фильтрацию, передайте токен идентификации авторизованного пользователя в заголовке x-ms-query-source-authorization подключения инструмента MCP. Без маркера источники с поддержкой разрешений возвращают результаты, нефильтрованные. Дополнительные сведения см. в разделе "Принудительное применение разрешений во время запроса (предварительная версия)".
Чтобы изменять заголовки MCP для каждого запроса, например, чтобы передавать токен другого пользователя при каждом вызове, объявите структурированные входные данные в определении агента и сошлитесь на них как на {{placeholder}} в headers инструмента. Вызывающая сторона передаёт значение при каждом вызове. Этот подход подходит для инструментов MCP, привязанных к подключению к проекту.
Для индивидуальной авторизации пользователей при обращении к серверу MCP можно также использовать сквозную передачу удостоверения OAuth.
Следующий код обновляет агент на предыдущем шаге, чтобы средство MCP считывало заголовок авторизации из структурированных входных данных.
from azure.ai.projects.models import StructuredInputDefinition
# Reference the token as a placeholder in the header
mcp_kb_tool = MCPTool(
server_label="knowledge-base",
server_url=mcp_endpoint,
require_approval="never",
allowed_tools=["knowledge_base_retrieve"],
project_connection_id=project_connection_name,
headers={
"x-ms-query-source-authorization": "{{search_auth_token}}"
}
)
# Declare the structured input so the caller can supply the token per request
agent = project_client.agents.create_version(
agent_name=agent_name,
definition=PromptAgentDefinition(
model=agent_model,
instructions=instructions,
tools=[mcp_kb_tool],
structured_inputs={
"search_auth_token": StructuredInputDefinition(
description="Per-user Azure AI Search bearer token",
required=True,
schema={"type": "string"},
)
}
)
)
print(f"AI agent '{agent_name}' created or updated successfully")
При вызове агента укажите токен Поиск с использованием ИИ Azure в structured_inputs. В этом примере токен извлекается из текущего credential. Для многопользовательского приложения вместо этого передайте токен каждого пользователя, выполнившего вход. Например, используйте токен, полученный через поток On-Behalf-Of, чтобы механизм извлечения мог фильтровать результаты для этого пользователя.
# Resolve an Azure AI Search token from the current credential (use a per-user token in production)
from azure.identity import get_bearer_token_provider
search_token = get_bearer_token_provider(credential, "https://search.azure.com/.default")()
openai_client = project_client.get_openai_client()
conversation = openai_client.conversations.create()
response = openai_client.responses.create(
conversation=conversation.id,
tool_choice="required",
input="{user_query}",
extra_body={
"agent_reference": {"name": agent.name, "type": "agent_reference"},
"structured_inputs": {"search_auth_token": search_token},
},
)
print(f"Response: {response.output_text}")
Чат с агентом
Клиентское приложение использует API-интерфейсы Conversations и Responses из Azure OpenAI для взаимодействия с агентом.
Следующий код создает беседу и передает пользовательские сообщения агенту, напоминая типичный интерфейс чата. Агент определяет, когда вызывать базу знаний с помощью средства MCP и возвращает ответ естественного языка со ссылками. Параметр tool_choice="required" гарантирует, что агент всегда использует средство базы знаний при обработке запросов.
# Get the OpenAI client for responses and conversations
openai_client = project_client.get_openai_client()
conversation = openai_client.conversations.create()
# Send initial request that will trigger the MCP tool
response = openai_client.responses.create(
conversation=conversation.id,
tool_choice="required",
input="""
Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown?
Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?
""",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(f"Response: {response.output_text}")
Ответ должен быть похож на следующий пример.
Response: Here are evidence-based explanations to your questions:
---
**1. Why do suburban belts display larger December brightening than urban cores, even though absolute light levels are higher downtown?**
- Suburban belts show a *larger percentage increase* in night brightness during December compared to urban cores, largely because suburban residential areas feature more single-family homes and larger yards, which are typically decorated with holiday lights. These areas start from a lower baseline (less bright overall at night compared to dense urban centers), so the relative change (brightening) is much more noticeable.
- In contrast, the downtown core is already very bright at night due to dense commercial lighting and streetlights. While it also sees a December increase (often 20–30% brighter), the *absolute* change is less striking because it begins at a much higher base of illumination.
- This pattern is observed across U.S. cities, with the phenomenon driven by widespread cultural practices and the suburban landscape’s suitability for holiday lighting displays. The effect is visible in satellite data and was quantified at 20–50% brighter in December, especially in suburbs and city outskirts.
---
**2. Why is the Phoenix nighttime street grid so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?**
- Phoenix’s sharply visible nighttime street grid from space is a result of its urban layout: the city (like many western U.S. cities) was developed using a regular grid system, with extensive and uniform street lighting and strong urban sprawl. The grid pattern, and the dense network of intersecting surface streets, is brightly illuminated, particularly at intersections, commercial areas, and major thoroughfares.
- The interstate highways between midwestern cities, though significant in length and crucial to national infrastructure, traverse sparsely populated rural areas. These stretches typically have very little artificial lighting (due to low traffic volumes at night and cost considerations), making them much less visible in nighttime satellite imagery. Only nodes (cities and towns) along the route show as bright "pearls" in the darkness, while the "strings" (highways) connecting them remain faint or invisible.
- In summary:
- Urban areas like Phoenix stand out with strong, connected patterns of light due to dense development and extensive lighting.
- Rural interstates are sparsely lit, and only their endpoints—cities and large towns—generate notable light visible from space.
---
**References**:
- [Holiday Lights increase most dramatically in suburbs, not downtowns: earth_at_night_508_page_176_verbalized, page 160](4:5)
- [Lighting paths and urban grids are visible from space, while rural highways remain dim: earth_at_night_508_page_124_verbalized, page 108](4:3)
- [Phoenix’s grid and surrounding urban structure: earth_at_night_508_page_104_verbalized, page 88](4:1)
Проверка ответа
Базовый ответ агента содержит метаданные о запросах, отправленных в базу знаний, и найденных ссылок. Эти метаданные можно проверить, чтобы понять, как агент обработал входные данные пользователя.
response.to_dict()
Очистка ресурсов
При работе с собственной подпиской рекомендуется завершить проект, удалив ресурсы, которые больше не нужны. Ресурсы, оставшиеся на работе, могут стоить вам деньги.
На портале Azure выберите All resources или Resource groups на панели слева, чтобы найти ресурсы и управлять ими. Вы можете удалить ресурсы по отдельности или удалить группу ресурсов, чтобы удалить все ресурсы одновременно.
Для удаления отдельных объектов можно также запустить следующий код:
# Delete the agent
project_client.agents.delete_version(agent.name, agent.version)
print(f"AI agent '{agent.name}' version '{agent.version}' deleted successfully")
# Delete the knowledge base
index_client.delete_knowledge_base(base_name)
print(f"Knowledge base '{base_name}' deleted successfully")
# Delete the knowledge source
index_client.delete_knowledge_source(knowledge_source=knowledge_source_name)
print(f"Knowledge source '{knowledge_source_name}' deleted successfully.")
# Delete the search index
index_client.delete_index(index_name)
print(f"Index '{index_name}' deleted successfully")
Улучшение качества данных
По умолчанию результаты поиска из баз знаний объединяются в большую единую строку, которую можно передать агентам для приземления. Поиск с использованием ИИ Azure предоставляет следующие функции индексирования и настройки релевантности, помогающие создавать высококачественные результаты. Эти особенности можно реализовать в индексе поиска, а улучшение релевантности поиска очевидно в качестве полученных ответов.
Профили оценки предоставляют встроенные критерии повышения. Индекс должен указать профиль оценки по умолчанию, который обработчик извлечения использует, когда запросы включают поля, связанные с этим профилем.
Требуется семантическая конфигурация, но вы определяете, какие поля являются приоритетными и используются для ранжирования.
Для обычного текстового содержимого можно использовать анализаторы для управления маркеризацией во время индексирования.
Для мультимодального или визуального контента можно использовать вербализацию изображений для описаний изображений, созданных с помощью LLM, или классического OCR и анализа изображений с помощью наборов умений во время индексирования.
Управление количеством вложенных запросов
Вы можете контролировать количество подзапросов, настроив уровень усилий рассуждения при извлечении (предварительная версия) для базы знаний. Усилия на анализ определяют уровень обработки LLM для планирования запросов, начиная от минимального (без обработки LLM) до среднего (более глубокие поисковые процессы и последующие итерации).
При неминимальных усилиях по рассуждению LLM определяет количество подзапросов на основе следующих факторов:
- Запрос пользователя
- Журнал чата
- Ограничения входных данных семантического рангателя
Контролировать контекст, отправляемый агенту
API ответов управляет тем, что отправляется агенту и базе знаний. Чтобы оптимизировать производительность и релевантность, настройте инструкции агента, чтобы суммировать или отфильтровать журнал чата перед отправкой в средство MCP.
Управление затратами и ограничением операций
Чтобы получить представление о плане запроса, изучите выходные токены в массиве активности ответов базы знаний.
Повышение производительности
Чтобы оптимизировать производительность и уменьшить задержку, рассмотрите следующие стратегии.
Суммирование потоков сообщений.
Используйте
gpt-5-miniили меньшую модель, которая работает быстрее.Установите
maxOutputSizeв действии извлечения, чтобы управлять размером ответа, илиmaxRuntimeInSecondsдля обработки, ограниченной по времени.Разбивайте большие документы на меньшие части перед индексированием. Документы, превышающие выходной бюджет, могут быть автоматически опущены из обоснованных результатов.