Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте средство поиска файлов, чтобы агенты Microsoft Foundry могли осуществлять поиск по вашим документам и получать соответствующую информацию. Поиск по файлам расширяет возможности агентов, добавляя знания из источников, не входящих в модель Foundry, которая используется агентом, такие как информация о собственных продуктах или документы, предоставленные пользователем.
В этой статье описано, как:
- Отправка файлов и создание векторного хранилища
- Настройка агента с включенным поиском файлов
- Запрашивайте документы через агента
Примечание
С помощью стандартной настройки агента улучшенная программа поиска файлов гарантирует, что файлы остаются в собственном хранилище. Ваш ресурс Поиск с использованием ИИ Azure обрабатывает файлы, таким образом вы сохраняете полный контроль над данными.
Важно
Поиск по файлам взимает дополнительные сборы, кроме платы за использование модели на основе токенов.
Поддержка использования
В следующей таблице показана поддержка пакета SDK и настройки.
| поддержка Microsoft Foundry | пакет SDK Python | Пакет SDK для C# | Пакет SDK для JavaScript | пакет SDK Java | REST API | Базовая настройка агента | Настройка стандартного агента |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Необходимые условия
- Базовая или стандартная среда агента
- Пакет ПАКЕТА SDK для вашего языка:
-
Python:
azure-ai-projects(последняя версия) -
.NET:
Azure.AI.Extensions.OpenAI -
TypeScript:
@azure/ai-projects(последняя версия) -
Java:
azure-ai-agents
-
Python:
- Роль участника данных BLOB-объектов хранилища в учетной записи хранилища вашего проекта (необходима для загрузки файлов в хранилище вашего проекта)
- Роль Azure AI Owner для вашего ресурса Foundry (требуется для создания ресурсов агента)
- Azure учетные данные, настроенные для проверки подлинности (например,
DefaultAzureCredential). - URL-адрес конечной точки проекта Foundry и имя развертывания модели.
Примеры кода
В следующих примерах показано, как отправить файл, создать векторное хранилище, настроить агент с включенным поиском файлов и запросить агент.
Совет
Вы можете настроить поведение поиска файлов во время выполнения, например указание векторного хранилища, используемого для каждого запроса, с помощью структурированных входных данных.
Создание агента с помощью средства поиска файлов
В следующем примере кода показано, как создать агент с включенным средством поиска файлов. Перед выполнением этого кода необходимо передать файлы и создать векторное хранилище. Дополнительные сведения см. в разделах ниже.
from pathlib import Path
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import FileSearchTool, PromptAgentDefinition
from azure.identity import DefaultAzureCredential
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
# Load the file to be indexed for search.
asset_file_path = (Path(__file__).parent / "../assets/product_info.md").resolve()
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# The openai client uses {PROJECT_ENDPOINT}/openai/v1 for file and vector store operations
# Create vector store and upload file
vector_store = openai.vector_stores.create(name="ProductInfoStore")
with asset_file_path.open("rb") as file_handle:
vector_store_file = openai.vector_stores.files.upload_and_poll(
vector_store_id=vector_store.id,
file=file_handle,
)
# Create agent with file search tool
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model="gpt-5-mini",
instructions=(
"You are a helpful agent that can search through product information. "
"Use file search to answer questions from the uploaded files."
),
tools=[FileSearchTool(vector_store_ids=[vector_store.id])],
),
description="File search agent for product information queries.",
)
# Create conversation and generate response
conversation = openai.conversations.create()
response = openai.responses.create(
conversation=conversation.id,
input="Tell me about Contoso products",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(response.output_text)
# Clean up resources
project.agents.delete_version(
agent_name=agent.name,
agent_version=agent.version,
)
openai.vector_stores.delete(vector_store.id)
Ожидаемые выходные данные
Ниже приведены выходные данные из предыдущего примера кода:
[Response text grounded in your uploaded document content]
Ссылки
- Справочник: Azure SDK для примера Python: поиск файлов
- Справочник. REST API агентов (предварительная версия)
Пример поиска файлов с агентом
В этом примере вы создаете локальный файл, отправляете его в Azure и используете его в только что созданном VectorStore для поиска файлов. Код в этом примере синхронный и потоковый. Сведения об асинхронном использовании см. в коде образца в репозитории Azure SDK для .NET на 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 a toy example file and upload it using OpenAI mechanism.
string filePath = "sample_file_for_upload.txt";
File.WriteAllText(
path: filePath,
contents: "The word 'apple' uses the code 442345, while the word 'banana' uses the code 673457.");
OpenAIFileClient fileClient = projectClient.ProjectOpenAIClient.GetOpenAIFileClient();
OpenAIFile uploadedFile = fileClient.UploadFile(filePath: filePath, purpose: FileUploadPurpose.Assistants);
File.Delete(filePath);
// Create the VectorStore and provide it with uploaded file ID.
VectorStoreClient vctStoreClient = projectClient.ProjectOpenAIClient.GetVectorStoreClient();
VectorStoreCreationOptions options = new()
{
Name = "MySampleStore",
FileIds = { uploadedFile.Id }
};
VectorStore vectorStore = vctStoreClient.CreateVectorStore(options: options);
// Create an Agent capable of using File search.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
Instructions = "You are a helpful agent that can help fetch data from files you know about.",
Tools = { ResponseTool.CreateFileSearchTool(vectorStoreIds: new[] { vectorStore.Id }), }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
// Ask a question about the file's contents.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
ResponseResult response = responseClient.CreateResponse("Can you give me the documented codes for 'banana' and 'orange'?");
// Create the response and throw an exception if the response contains the error.
Assert.That(response.Status, Is.EqualTo(ResponseStatus.Completed));
Console.WriteLine(response.GetOutputText());
// Remove all the resources created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
vctStoreClient.DeleteVectorStore(vectorStoreId: vectorStore.Id);
fileClient.DeleteFile(uploadedFile.Id);
Ожидаемые выходные данные
Ниже приведены выходные данные из предыдущего примера кода:
The code for 'banana' is 673457. I couldn't find any documented code for 'orange' in the files I have access to.
Пример поиска файлов с агентом в сценариях потоковой передачи
В этом примере вы создаете локальный файл, отправляете его в Azure и используете его в только что созданном VectorStore для поиска файлов. Код в этом примере синхронный и потоковый. Сведения об асинхронном использовании см. в коде образца в репозитории Azure SDK для .NET на GitHub.
using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
using OpenAI.Files;
using OpenAI.VectorStores;
class FileSearchStreamingDemo
{
// Create a helper method ParseResponse to format streaming response output.
// If the stream ends up in error state, it will throw an error.
private static void ParseResponse(StreamingResponseUpdate streamResponse)
{
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)
{
Console.WriteLine($"Response done with full message: {textDoneUpdate.Text}");
}
else if (streamResponse is StreamingResponseOutputItemDoneUpdate itemDoneUpdate)
{
if (itemDoneUpdate.Item is MessageResponseItem messageItem)
{
foreach (ResponseContentPart part in messageItem.Content)
{
foreach (ResponseMessageAnnotation annotation in part.OutputTextAnnotations)
{
if (annotation is FileCitationMessageAnnotation fileAnnotation)
{
// Note fileAnnotation.Filename will be available in OpenAI package versions
// greater then 2.6.0.
Console.WriteLine($"File Citation - File ID: {fileAnnotation.FileId}");
}
}
}
}
}
else if (streamResponse is StreamingResponseErrorUpdate errorUpdate)
{
throw new InvalidOperationException($"The stream has failed with the error: {errorUpdate.Message}");
}
}
public static void Main()
{
// 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 a toy example file and upload it using OpenAI mechanism.
string filePath = "sample_file_for_upload.txt";
File.WriteAllText(
path: filePath,
contents: "The word 'apple' uses the code 442345, while the word 'banana' uses the code 673457.");
OpenAIFile uploadedFile = projectClient.ProjectOpenAIClient.GetProjectFilesClient().UploadFile(filePath: filePath, purpose: FileUploadPurpose.Assistants);
File.Delete(filePath);
// Create the `VectorStore` and provide it with uploaded file ID.
VectorStoreCreationOptions options = new()
{
Name = "MySampleStore",
FileIds = { uploadedFile.Id }
};
VectorStore vectorStore = projectClient.ProjectOpenAIClient.GetProjectVectorStoresClient().CreateVectorStore(options);
// Create an agent capable of using File search.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
Instructions = "You are a helpful agent that can help fetch data from files you know about.",
Tools = { ResponseTool.CreateFileSearchTool(vectorStoreIds: new[] { vectorStore.Id }), }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition)
);
// Create the conversation to store responses.
ProjectConversation conversation = projectClient.ProjectOpenAIClient.GetProjectConversationsClient().CreateProjectConversation();
CreateResponseOptions responseOptions = new()
{
Agent = agentVersion,
AgentConversationId = conversation.Id,
StreamingEnabled = true,
};
// Wait for the stream to complete.
responseOptions.InputItems.Clear();
responseOptions.InputItems.Add(ResponseItem.CreateUserMessageItem("Can you give me the documented codes for 'banana' and 'orange'?"));
foreach (StreamingResponseUpdate streamResponse in projectClient.ProjectOpenAIClient.Responses.CreateResponseStreaming(responseOptions))
{
ParseResponse(streamResponse);
}
// Ask follow up question and start a new stream.
Console.WriteLine("Demonstrating follow-up query with streaming...");
responseOptions.InputItems.Clear();
responseOptions.InputItems.Add(ResponseItem.CreateUserMessageItem("What was my previous question about?"));
foreach (StreamingResponseUpdate streamResponse in projectClient.ProjectOpenAIClient.Responses.CreateResponseStreaming(responseOptions))
{
ParseResponse(streamResponse);
}
// Remove all the resources created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
projectClient.ProjectOpenAIClient.GetProjectVectorStoresClient().DeleteVectorStore(vectorStoreId: vectorStore.Id);
projectClient.ProjectOpenAIClient.GetProjectFilesClient().DeleteFile(uploadedFile.Id);
}
}
Ожидаемые выходные данные
Ниже приведены выходные данные из предыдущего примера кода:
Stream response created with ID: <response-id>
Delta: The code for 'banana' is 673457. I couldn't find any documented code for 'orange' in the files I have access to.
Response done with full message: The code for 'banana' is 673457. I couldn't find any documented code for 'orange' in the files I have access to.
File Citation - File ID: <file-id>
Demonstrating follow-up query with streaming...
Stream response created with ID: <response-id>
Delta: Your previous question was about the documented codes for 'banana' and 'orange'.
Response done with full message: Your previous question was about the documented codes for 'banana' and
'orange'.
Пример поиска файлов с агентом
В следующем примере TypeScript показано, как создать агент с включенным средством поиска файлов. Перед выполнением этого кода необходимо передать файлы и создать векторное хранилище. Дополнительные сведения см. в разделе " Поведение поиска по файлам по типу установки агента ". Пример JavaScript см. в коде sample в репозитории JavaScript Azure SDK на GitHub.
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
import { fileURLToPath } from "url";
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
export async function main(): Promise<void> {
// Load the file to be indexed for search
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const assetFilePath = path.join(__dirname, "../assets/product_info.md");
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
// The openai client uses {PROJECT_ENDPOINT}/openai/v1 for file and vector store operations
const openai = project.getOpenAIClient();
// Create vector store and upload file
const vectorStore = await openai.vectorStores.create({
name: "ProductInfoStore",
});
const fileStream = fs.createReadStream(assetFilePath);
const file = await openai.vectorStores.files.uploadAndPoll(vectorStore.id, fileStream);
// Create agent with file search tool
const agent = await project.agents.createVersion("agent-file-search", {
kind: "prompt",
model: "gpt-5-mini",
instructions: "You are a helpful assistant that can search through product information.",
tools: [
{
type: "file_search",
vector_store_ids: [vectorStore.id],
},
],
});
// Create conversation and generate response
const conversation = await openai.conversations.create();
const response = await openai.responses.create(
{
conversation: conversation.id,
input: "Tell me about Contoso products",
},
{
body: { agent: { name: agent.name, type: "agent_reference" } },
},
);
console.log(response.output_text);
// Clean up resources
await project.agents.deleteVersion(agent.name, agent.version);
await openai.vectorStores.delete(vectorStore.id);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Ожидаемые выходные данные
[Response text grounded in your uploaded document content]
Ссылки
- Справочник: Azure SDK для примера JavaScript: поиск файлов
- Справочник. REST API агентов (предварительная версия)
Использование поиска файлов в агенте Java
Добавьте зависимость в вашу pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.0.0</version>
</dependency>
Создание агента с поиском файлов
Перед выполнением этого примера создайте файл и векторное хранилище с помощью {projectEndpoint}/openai/v1/files{projectEndpoint}/openai/v1/vector_stores конечных точек REST. Смотрите вкладку REST API для команд curl или примеров Java SDK для полного примера, включающего отправку файлов.
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.FileSearchTool;
import com.azure.ai.agents.models.PromptAgentDefinition;
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 FileSearchExample {
public static void main(String[] args) {
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
// Create a vector store first using the {projectEndpoint}/openai/v1/vector_stores API
String vectorStoreId = "your_vector_store_id";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
AgentsClient agentsClient = builder.buildAgentsClient();
ResponsesClient responsesClient = builder.buildResponsesClient();
// Create file search tool with vector store IDs
FileSearchTool fileSearchTool = new FileSearchTool(
Arrays.asList(vectorStoreId)
);
// Create agent with file search tool
PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-5-mini")
.setInstructions("You are a helpful assistant that can search through files to answer questions.")
.setTools(Collections.singletonList(fileSearchTool));
AgentVersionDetails agent = agentsClient.createAgentVersion("file-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 information is in the uploaded files?"));
System.out.println("Response: " + response.output());
// Clean up
agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
}
}
Ожидаемые выходные данные
Agent created: file-search-agent (version 1)
Response: [ResponseOutputItem containing file search results ...]
Чтобы увидеть дополнительные примеры, включая загрузку файлов и создание хранилища векторов, см. в образах пакета SDK Azure AI Agents для Java.
Отправка файлов и их добавление в векторное хранилище
Для доступа к файлам средство поиска файлов использует объект векторного хранилища. Отправьте файлы и создайте векторное хранилище. Опрашивайте состояние хранилища, пока все файлы не выйдут из состояния in_progress, чтобы убедиться, что всё содержимое было полностью обработано. Пакет SDK предоставляет вспомогательные средства для отправки и опроса.
Задайте следующую переменную среды перед выполнением примеров:
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/files \
-H "Authorization: Bearer $AGENT_TOKEN" \
-F purpose="assistants" \
-F file="@c:\\path_to_file\\sample_file_for_upload.txt"
Создание хранилища векторов
curl --request POST \
--url $FOUNDRY_PROJECT_ENDPOINT/openai/v1/vector_stores \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my_vector_store",
"file_ids": ["'$FILE_ID'"]
}'
Создание агента с помощью средства поиска файлов
curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/agents?api-version=v1" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AGENT_TOKEN" \
-d '{
"name": "<AGENT_NAME>-file-search",
"description": "Agent with file search",
"definition": {
"kind": "prompt",
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"tools": [
{
"type": "file_search",
"vector_store_ids": ["'$VECTOR_STORE_ID'"],
"max_num_results": 20
}
],
"instructions": "You are a customer support chatbot. Use file search results from the vector store to answer questions based on the uploaded files."
}
}'
Создание ответа с помощью поиска файлов
curl --request POST \
--url $FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"agent": {
"type": "agent_reference",
"name": "<AGENT_NAME>-file-search"
},
"metadata": {
"test_response": "file_search_enabled",
"vector_store_id": "'$VECTOR_STORE_ID'"
},
"input": [{
"type": "message",
"role": "user",
"content": [
{
"type": "input_text",
"text": "Can you search the uploaded file and tell me about Azure TV instructions?"
}
]
}],
"stream": true
}'
Ответ возвращает выходные данные потоковой передачи, содержащие ответ агента на основе информации, полученной из хранилища векторов. Агент выполняет поиск по вашему загруженному файлу, чтобы ответить на запрос об инструкциях для Azure TV.
Очистка
Удалите агент.
curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/<AGENT_NAME>-file-search?api-version=v1" \
-H "Authorization: Bearer $AGENT_TOKEN"
Удалите хранилище векторов.
curl --request DELETE \
--url $FOUNDRY_PROJECT_ENDPOINT/openai/v1/vector_stores/$VECTOR_STORE_ID \
-H "Authorization: Bearer $AGENT_TOKEN"
Удалите файл.
curl --request DELETE \
--url $FOUNDRY_PROJECT_ENDPOINT/openai/v1/files/$FILE_ID \
-H "Authorization: Bearer $AGENT_TOKEN"
Ссылки
- Справочник. REST API агентов (предварительная версия)
Проверка результатов поиска файлов
После выполнения примера кода в этой статье убедитесь, что поиск файлов работает:
- Убедитесь, что хранилище векторов и файл созданы.
- В примерах Python и TypeScript вспомогательные средства отправки и опроса завершают только после завершения приема.
- Задайте вопрос, который можно ответить только из отправленного содержимого.
- Убедитесь, что ответ основан на ваших документах.
Источники файлов
- Отправка локальных файлов (настройка агента "Базовый" и "Стандартный")
- Хранилище BLOB-объектов Azure (только для стандартной настройки)
Поведение поиска файлов по типу установки агента
Базовая настройка агента
Средство поиска файлов имеет те же функции, что и API Azure OpenAI Responses. Это средство использует управляемые Microsoft ресурсы поиска и хранилища.
- Вы храните загруженные файлы в управляемом хранилище Microsoft.
- Вы создаете векторное хранилище с помощью Microsoft управляемого ресурса поиска.
Настройка стандартного агента
Инструмент поиска файлов использует ресурсы Поиск с использованием ИИ Azure и Хранилище BLOB-объектов Azure, к которым вы подключаетесь в процессе настройки агента.
- Вы храните загруженные файлы в подключенной учетной записи Хранилище BLOB-объектов Azure.
- Вы создаете векторные хранилища с помощью подключенного ресурса Поиск с использованием ИИ Azure.
Для обоих настроек агента служба обрабатывает весь процесс приема, который включает в себя:
- Автоматический синтаксический анализ и разбиение на блоки документов.
- Создание и хранение эмбеддингов.
- Использование поиска векторов и ключевых слов для получения соответствующего содержимого для запросов пользователей.
Код идентичен обоим настройкам. Единственное различие заключается в том, где хранятся ваши файлы и векторные хранилища.
Когда следует использовать поиск файлов
Выберите поиск по файлам при необходимости:
- Поиск по документам, которые вы отправляете напрямую (PDF-файлы, Word документы, файлы кода)
- Разрешить агентам отвечать на вопросы из закрытого или конфиденциального содержимого
- Обработка файлов до 512 МБ без управления внешней инфраструктурой поиска
Рассмотрим альтернативные варианты для следующих сценариев:
| Сценарий | Рекомендуемое средство |
|---|---|
| Поиск существующих индексов Поиск с использованием ИИ Azure | Инструмент Поиск с использованием ИИ Azure |
| Поиск общедоступного веб-сайта для получения текущей информации | Средство поиска в Интернете |
| Объединение нескольких источников данных в одном запросе | Совместное использование нескольких инструментов |
Как работает поиск по файлам
Средство поиска файлов использует рекомендации по извлечению соответствующих данных из файлов и улучшению ответов модели.
Обработка запросов
При отправке запроса поиск файлов:
- Перезаписывает запрос, чтобы оптимизировать его для поиска.
- Разбивает сложные запросы на параллельные поиски.
- Выполняет гибридный поиск , сочетающий ключевые слова и семантические сопоставления в хранилищах векторов.
- Повторно выбирает результаты , чтобы выбрать наиболее релевантный контент для ответа.
Параметры разделения на части по умолчанию
| Настройка | Значение по умолчанию |
|---|---|
| Размер блока | 800 токенов |
| Перекрытие фрагментов | 400 токенов |
| Модель внедрения | text-embedding-3-large (256 измерений) |
| Максимальное количество блоков в контексте | 20 |
Векторные хранилища
Объекты векторного хранилища предоставляют средству поиска файлов возможность поиска файлов. При добавлении файла в векторное хранилище процесс автоматически анализирует, разбивает на блоки, встраивает и сохраняет файл в векторной базе данных, которая поддерживает как поиск по ключевым словам, так и семантический поиск. Каждое векторное хранилище может содержать до 10 000 файлов. Вы можете подключить векторные хранилища как к агентам, так и к беседам. В настоящее время можно подключить не более одного векторного хранилища к агенту и не более одного векторного хранилища к беседе.
Общие понятия и рекомендации по жизненному циклу (готовность, поведение удаления и политики окончания срока действия) см. векторных хранилищах для поиска файлов.
Удаление файлов из векторного хранилища с помощью:
- Удаление объекта файла векторного хранилища.
- Удаление базового объекта файла. Это действие удаляет файл из всех
vector_storeиcode_interpreterконфигураций для всех агентов и бесед в вашей организации.
Максимальный размер файла составляет 512 МБ. Каждый файл должен содержать не более 5 000 000 маркеров (вычисляется автоматически при присоединении файла).
Обеспечение готовности хранилища векторов перед созданием запусков
Перед созданием запуска убедитесь, что система полностью обрабатывает все файлы в хранилище векторов. Это гарантирует, что все данные в хранилище векторов доступны для поиска. Проверьте готовность хранилища векторов, используя функции опроса в SDK, или вручную запрашивая объект хранилища векторов, чтобы убедиться в том, что его состояние завершено.
В качестве запасного варианта объект выполнения устанавливает 60-секундное максимальное ожидание, когда векторное хранилище данных беседы содержит файлы, которые все еще обрабатываются. Это ожидание гарантирует, что все файлы, которые ваши пользователи загружают в беседе, станут полностью поисконспособными, прежде чем будет продолжено выполнение. Это резервное ожидание не применяется к хранилищу векторов агента.
Хранилища векторов разговоров имеют политики хранения данных по умолчанию.
Векторные хранилища, созданные с помощью вспомогательных средств общения (например, в беседах tool_resources.file_search.vector_stores или сообщениях message.attachments), имеют политику истечения срока действия по умолчанию в течение семи дней после последней активности (определяется как последний раз, когда хранилище векторов участвовало в выполнении).
Когда срок действия векторного хранилища истекает, операции в этой беседе претерпевают сбой. Чтобы устранить эту проблему, создайте новое векторное хранилище с теми же файлами и повторно прикрепите его к беседе.
Поддерживаемые типы файлов
Примечание
Для типов MIME текста кодировка должна быть UTF-8, UTF-16 или ASCII.
| Формат файла | Тип MIME |
|---|---|
.c |
text/x-c |
.cs |
text/x-csharp |
.cpp |
text/x-c++ |
.doc |
application/msword |
.docx |
application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.html |
text/html |
.java |
text/x-java |
.json |
application/json |
.md |
text/markdown |
.pdf |
application/pdf |
.php |
text/x-php |
.pptx |
application/vnd.openxmlformats-officedocument.presentationml.presentation |
.py |
text/x-python |
.py |
text/x-script.python |
.rb |
text/x-ruby |
.tex |
text/x-tex |
.txt |
text/plain |
.css |
text/css |
.js |
text/javascript |
.sh |
application/x-sh |
.ts |
application/typescript |
Ограничения
Помните об этих ограничениях при планировании интеграции поиска файлов:
- Поиск файлов поддерживает определенные форматы файлов и кодировки. См. раздел "Поддерживаемые типы файлов".
- Каждое векторное хранилище может содержать до 10 000 файлов.
- К агенту можно подключить не более одного векторного хранилища и не более одного векторного хранилища к беседе.
- Функции и доступность зависят от региона. См. поддержку Azure AI Foundry в регионе.
Устранение неполадок
| Проблема | Вероятно, причина | Разрешение |
|---|---|---|
| 401 Несанкционированный доступ | Маркер доступа отсутствует, истек или неправильно ограничен. | Получите новый маркер и повторите запрос. Для вызовов REST убедитесь, что задано AGENT_TOKEN правильно. |
| 403 Запрещено | Учетная запись пользователя, вошедшего в систему, не обладает необходимыми ролями. | Подтвердите роли в предварительных требованиях и повторите попытку после завершения распространения назначения ролей. |
| 404 Не найдено | Конечная точка проекта или идентификаторы ресурсов неверны. | Подтвердите FOUNDRY_PROJECT_ENDPOINT и идентификаторы, такие как имя агента, версия, идентификатор векторного хранилища и идентификатор файла. |
| Ответы игнорируют файлы | Агент не настроен с file_search, или хранилище векторов не подключено. |
Убедитесь, что определение агента включает file_search, а в vector_store_ids списке содержится идентификатор векторного хранилища. |
| Время ожидания загрузки файла | Большой файл или медленное сетевое подключение. | Используется upload_and_poll для обработки больших файлов. Рассмотрите возможность фрагментирования очень больших документов. |
| Сбой создания хранилища векторов | Превышена квота или недопустимый формат файла. | Проверьте ограничения хранилища векторов (10 000 файлов на хранилище). Убедитесь, что формат файла поддерживается. |
| Поиск возвращает неуместные результаты | Содержимое файла неправильно индексировано или запрос слишком обширен. | Дождитесь завершения индексирования (проверьте vector_store.status). Используйте более конкретные запросы. |
| Нет ссылок в ответе | Модель не использовала поиск файлов, и содержимое не найдено. | Используется tool_choice="required" для принудительного поиска файлов. Убедитесь, что содержимое файла соответствует разделу запроса. |
Связанное содержимое
- средство Поиск с использованием ИИ Azure — поиск существующих индексов Поиск с использованием ИИ Azure с помощью агентов
- Средство поиска в Интернете . Включение агентов для поиска в общедоступном интернете
- Векторные хранилища для поиска файлов. Общие сведения о жизненном цикле и истечении срока действия векторного хранилища
- Структурированные входные данные — параметризация определений агента во время выполнения