Средство поиска файлов для агентов

Используйте средство поиска файлов, чтобы агенты 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
  • Роль участника данных 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 и используете его в только что созданном 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]

Ссылки

Использование поиска файлов в агенте 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"

Ссылки

Проверка результатов поиска файлов

После выполнения примера кода в этой статье убедитесь, что поиск файлов работает:

  • Убедитесь, что хранилище векторов и файл созданы.
    • В примерах Python и TypeScript вспомогательные средства отправки и опроса завершают только после завершения приема.
  • Задайте вопрос, который можно ответить только из отправленного содержимого.
  • Убедитесь, что ответ основан на ваших документах.

Источники файлов

  • Отправка локальных файлов (настройка агента "Базовый" и "Стандартный")
  • Хранилище BLOB-объектов Azure (только для стандартной настройки)

Поведение поиска файлов по типу установки агента

Базовая настройка агента

Средство поиска файлов имеет те же функции, что и API Azure OpenAI Responses. Это средство использует управляемые Microsoft ресурсы поиска и хранилища.

  • Вы храните загруженные файлы в управляемом хранилище Microsoft.
  • Вы создаете векторное хранилище с помощью Microsoft управляемого ресурса поиска.

Настройка стандартного агента

Инструмент поиска файлов использует ресурсы Поиск с использованием ИИ Azure и Хранилище BLOB-объектов Azure, к которым вы подключаетесь в процессе настройки агента.

  • Вы храните загруженные файлы в подключенной учетной записи Хранилище BLOB-объектов Azure.
  • Вы создаете векторные хранилища с помощью подключенного ресурса Поиск с использованием ИИ Azure.

Для обоих настроек агента служба обрабатывает весь процесс приема, который включает в себя:

  • Автоматический синтаксический анализ и разбиение на блоки документов.
  • Создание и хранение эмбеддингов.
  • Использование поиска векторов и ключевых слов для получения соответствующего содержимого для запросов пользователей.

Код идентичен обоим настройкам. Единственное различие заключается в том, где хранятся ваши файлы и векторные хранилища.

Выберите поиск по файлам при необходимости:

  • Поиск по документам, которые вы отправляете напрямую (PDF-файлы, Word документы, файлы кода)
  • Разрешить агентам отвечать на вопросы из закрытого или конфиденциального содержимого
  • Обработка файлов до 512 МБ без управления внешней инфраструктурой поиска

Рассмотрим альтернативные варианты для следующих сценариев:

Сценарий Рекомендуемое средство
Поиск существующих индексов Поиск с использованием ИИ Azure Инструмент Поиск с использованием ИИ Azure
Поиск общедоступного веб-сайта для получения текущей информации Средство поиска в Интернете
Объединение нескольких источников данных в одном запросе Совместное использование нескольких инструментов

Как работает поиск по файлам

Средство поиска файлов использует рекомендации по извлечению соответствующих данных из файлов и улучшению ответов модели.

Обработка запросов

При отправке запроса поиск файлов:

  1. Перезаписывает запрос, чтобы оптимизировать его для поиска.
  2. Разбивает сложные запросы на параллельные поиски.
  3. Выполняет гибридный поиск , сочетающий ключевые слова и семантические сопоставления в хранилищах векторов.
  4. Повторно выбирает результаты , чтобы выбрать наиболее релевантный контент для ответа.

Параметры разделения на части по умолчанию

Настройка Значение по умолчанию
Размер блока 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" для принудительного поиска файлов. Убедитесь, что содержимое файла соответствует разделу запроса.