Поделиться через


Средство поиска файлов службы агента ИИ Azure

Поиск по файлам расширяет агенты с знаниями вне своей модели, например сведения о продуктах или документах, предоставляемых пользователями.

Примечание.

Используя стандартную настройку агента, улучшенное средство поиска файлов гарантирует, что файлы остаются в собственном хранилище, а ресурс поиска ИИ Azure используется для их приема, обеспечивая полный контроль над данными.

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

  • Отправка локальных файлов
  • Хранилище BLOB-объектов Azure

Поддержка использования

Поддержка литейных решений Azure AI Пакет SDK для Python Пакет SDK для C# Пакет SDK для JavaScript REST API Базовая настройка агента Настройка стандартного агента
✔️ ✔️ ✔️ ✔️ ✔️ Только отправка файлов Отправка файлов и использование хранилища BLOB-объектов BYO

Зависимость от настройки агента

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

Средство поиска файлов имеет те же функции, что и Помощники Azure OpenAI. Используются управляемые корпорацией Майкрософт ресурсы поиска и хранилища.

  • Отправленные файлы хранятся в управляемом хранилище Майкрософт
  • Хранилище векторов создается с помощью ресурса управляемого поиска Майкрософт

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

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

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

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

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

Нет разницы в коде между двумя настройками; единственным вариантом является место хранения файлов и созданных векторных хранилищ.

Принцип работы

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

  • Перезаписывает запросы пользователей, чтобы оптимизировать их для поиска.
  • Разбивает сложные запросы пользователей на несколько поисковых запросов, которые могут выполняться параллельно.
  • Выполняет как ключевые слова, так и семантические поиски в хранилищах векторов агента и потока.
  • Повторно выбирает результаты поиска, чтобы выбрать наиболее релевантные, прежде чем создавать окончательный ответ.
  • По умолчанию средство поиска файлов использует следующие параметры:
    • Размер блока: 800 токенов
    • Перекрытие блока: 400 маркеров
    • Модель внедрения: text-embedding-3-large на 256 измерениях
    • Максимальное количество блоков, добавленных в контекст: 20

Хранилища векторов

Объекты векторного хранилища предоставляют средству поиска файлов возможность поиска файлов. Добавление файла в векторное хранилище автоматически анализирует, блоки, внедряет и сохраняет файл в векторной базе данных, которая поддерживает как ключевое слово, так и семантический поиск. Каждое векторное хранилище может содержать до 10 000 файлов. Хранилища векторов можно подключить как к агентам, так и к потокам. В настоящее время можно подключить не более одного векторного хранилища к агенту и по крайней мере одно векторное хранилище к потоку.

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

  • Удаление объекта файла векторного хранилища или
  • Удалив базовый объект файла, который удаляет файл из всех vector_store и конфигураций code_interpreter для всех агентов и потоков в организации.

Максимальный размер файла — 512 МБ. Каждый файл должен содержать не более 5 000 000 токенов для каждого файла (вычисляется автоматически при вложении файла).

Обеспечение готовности хранилища векторов перед созданием запусков

Мы настоятельно рекомендуем убедиться, что все файлы в vector_store полностью обрабатываются перед созданием запуска. Это гарантирует возможность поиска всех данных в хранилище векторов. Вы можете проверить готовность векторного хранилища с помощью вспомогательных средств опроса в пакетах SDK или вручную провести опрос объекта векторного хранилища, чтобы убедиться, что состояние завершено.

В качестве резервной копии в объекте выполнения выполняется 60-секундное ожидание, когда хранилище векторов потока содержит файлы, которые по-прежнему обрабатываются. Это гарантирует, что все файлы, которые пользователи отправляют в поток, полностью доступный для поиска перед выполнением. Это резервное ожидание не применяется к хранилищу векторов агента.

Добавление поиска файлов в агент с помощью портала Azure AI Foundry

Вы можете добавить средство поиска Bing в агент программно с помощью примеров кода, перечисленных в верхней части этой статьи, или портала Azure AI Foundry. Если вы хотите использовать портал, выполните следующие действия.

  1. На экране создания и отладки агента прокрутите вниз область установки справа от знаний. Нажмите кнопку Добавить.

    Снимок экрана: доступные категории инструментов на портале Azure AI Foundry.

  2. Выберите файлы и следуйте инструкциям по добавлению средства.

    Снимок экрана: доступные средства знаний на портале Azure AI Foundry.

    Снимок экрана: страница отправки файла.

В этом примере мы используем службу агента ИИ Azure для создания агента, который поможет ответить на вопросы о передаваемых данных из локальных файлов.

Необходимые компоненты

  1. Завершите настройку агента.

  2. Убедитесь, что у вас есть участник данных BLOB-объектов хранилища ролей в учетной записи хранения проекта.

  3. Убедитесь, что в проекте есть роль разработчика ИИ Azure.

Шаг 1. Создание клиента проекта

Создайте клиентский объект, содержащий строка подключения для подключения к проекту ИИ и другим ресурсам.

import os
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import FileSearchTool, MessageAttachment, FilePurpose
from azure.identity import DefaultAzureCredential


# Create an Azure AI Client from a connection string, copied from your Azure AI Foundry project.
# At the moment, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>"
# Customer needs to login to Azure subscription via Azure CLI and set the environment variables

credential = DefaultAzureCredential()
project_client = AIProjectClient.from_connection_string(
    credential=credential, conn_str=os.environ["PROJECT_CONNECTION_STRING"] 
)

Шаг 2. Отправка файлов и их добавление в векторное хранилище

Для доступа к файлам средство поиска файлов использует объект векторного хранилища. Отправьте файлы и создайте векторное хранилище. После создания векторного хранилища опробуйте его состояние до тех пор, пока все файлы не находятся в in_progress состоянии, чтобы убедиться, что все содержимое полностью обрабатывается. Пакет SDK предоставляет вспомогательные средства для отправки и опроса.

# We will upload the local file and will use it for vector store creation.

#upload a file
file = project_client.agents.upload_file_and_poll(file_path='./data/product_catelog.md', purpose=FilePurpose.AGENTS)
print(f"Uploaded file, file ID: {file.id}")

# create a vector store with the file you uploaded
vector_store = project_client.agents.create_vector_store_and_poll(file_ids=[file.id], name="my_vectorstore")
print(f"Created vector store, vector store ID: {vector_store.id}")

Чтобы сделать файлы доступными для агента, создайте FileSearchTool объект с идентификатором vector_store и подключите tools его к tool_resources агенту.


# create a file search tool
file_search_tool = FileSearchTool(vector_store_ids=[vector_store.id])

# notices that FileSearchTool as tool and tool_resources must be added or the agent will be unable to search the file
agent = project_client.agents.create_agent(
    model="gpt-4o-mini",
    name="my-agent",
    instructions="You are a helpful agent",
    tools=file_search_tool.definitions,
    tool_resources=file_search_tool.resources,
)
print(f"Created agent, agent ID: {agent.id}")

Шаг 4. Создание потока

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

# Create a thread
thread = project_client.agents.create_thread()
print(f"Created thread, thread ID: {thread.id}")

# Upload the user provided file as a messsage attachment
message_file = project_client.agents.upload_file_and_poll(file_path='product_info_1.md', purpose=FilePurpose.AGENTS)
print(f"Uploaded file, file ID: {message_file.id}")

# Create a message with the file search attachment
# Notice that vector store is created temporarily when using attachments with a default expiration policy of seven days.
attachment = MessageAttachment(file_id=message_file.id, tools=FileSearchTool().definitions)
message = project_client.agents.create_message(
    thread_id=thread.id, role="user", content="What feature does Smart Eyewear offer?", attachments=[attachment]
)
print(f"Created message, message ID: {message.id}")

Шаг 5. Создание запуска и проверка выходных данных

Создайте запуск и обратите внимание, что модель использует средство поиска файлов для предоставления ответа на вопрос пользователя.

run = project_client.agents.create_and_process_run(thread_id=thread.id, assistant_id=agent.id)
print(f"Created run, run ID: {run.id}")

project_client.agents.delete_vector_store(vector_store.id)
print("Deleted vector store")

project_client.agents.delete_agent(agent.id)
print("Deleted agent")

messages = project_client.agents.list_messages(thread_id=thread.id)
print(f"Messages: {messages}")

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

Необходимые компоненты

  1. Завершите настройку стандартного агента.

  2. Убедитесь, что у вас есть участник данных BLOB-объектов хранилища ролей в учетной записи хранения проекта.

  3. Убедитесь, что в проекте есть роль разработчика ИИ Azure.

Внимание

Поиск файлов с помощью хранилища BLOB-объектов поддерживается только настройкой стандартного агента.

Шаг 1. Создание клиента проекта

import os
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import FileSearchTool, VectorStoreDataSource, VectorStoreDataSourceAssetType
from azure.identity import DefaultAzureCredential


# Create an Azure AI Client from a connection string, copied from your Azure AI Foundry project.
# At the moment, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>"
# Customer needs to login to Azure subscription via Azure CLI and set the environment variables

credential = DefaultAzureCredential()
project_client = AIProjectClient.from_connection_string(
    credential=credential, conn_str=os.environ["PROJECT_CONNECTION_STRING"]
)

Шаг 2. Отправка локальных файлов в контейнер Хранилище BLOB-объектов Azure проекта

Отправьте локальный файл в контейнер Хранилище BLOB-объектов Azure проекта. Эта же учетная запись хранения, подключенная к агенту во время установки. При создании дополнительных агентов в одном проекте можно повторно использовать URI ресурса любых ранее загруженных файлов, необходимых этим агентам. Это означает, что вам не нужно повторно отправлять один и тот же файл, так как URI ресурса позволяют ссылаться на файлы напрямую.

Затем создайте векторное хранилище с помощью asset_uriфайла, которое является расположением файла в хранилище данных проекта.

# We'll upload the local file to your project Azure Blob Storage container and will use it for vector store creation.
_, asset_uri = project_client.upload_file("sample_file_for_upload.md")
print(f"Uploaded file, asset URI: {asset_uri}")

# create a vector store with a file in blob storage and wait for it to be processed
ds = VectorStoreDataSource(asset_identifier=asset_uri, asset_type=VectorStoreDataSourceAssetType.URI_ASSET)
vector_store = project_client.agents.create_vector_store_and_poll(data_sources=[ds], name="sample_vector_store")
print(f"Created vector store, vector store ID: {vector_store.id}")

Шаг 3. Создание агента с доступом к средству поиска файлов

# create a file search tool
file_search_tool = FileSearchTool(vector_store_ids=[vector_store.id])

# notices that FileSearchTool as tool and tool_resources must be added or the assistant unable to search the file
agent_1 = project_client.agents.create_agent(
    model="gpt-4o-mini",
    name="my-assistant",
    instructions="You are helpful assistant",
    tools=file_search_tool.definitions,
    tool_resources=file_search_tool.resources,
)
# [END upload_file_and_create_agent_with_file_search]
print(f"Created agent_1, agent_1 ID: {agent_1.id}")

thread = project_client.agents.create_thread()
print(f"Created thread, thread ID: {thread.id}")

message = project_client.agents.create_message(
    thread_id=thread.id, role="user", content="What feature does Smart Eyewear offer?"
)
print(f"Created message, message ID: {message.id}")

run = project_client.agents.create_and_process_run(thread_id=thread.id, assistant_id=agent_1.id)

project_client.agents.delete_vector_store(vector_store.id)
print("Deleted vector store")

project_client.agents.delete_agent(agent.id)
print("Deleted agent")

messages = project_client.agents.list_messages(thread_id=thread.id)
print(f"Messages: {messages}")

Шаг 4. Создание второго векторного хранилища с помощью ранее отправленного файла

Теперь создайте второе векторное хранилище с помощью ранее отправленного файла. asset_uri Использование файла, уже имеющегося в Хранилище BLOB-объектов Azure, полезно, если у вас есть несколько агентов, которым требуется доступ к тем же файлам, так как это устраняет необходимость отправки одного и того же файла несколько раз.


# create a vector store with a previously uploaded file and wait for it to be processed
ds_2 = VectorStoreDataSource(asset_identifier=asset_uri, asset_type=VectorStoreDataSourceAssetType.URI_ASSET)
vector_store_2 = project_client.agents.create_vector_store_and_poll(data_sources=[ds_2], name="sample_vector_store_2")
print(f"Created vector store, vector store ID: {vector_store.id}")

Шаг 5. Создание второго агента с доступом к средству поиска файлов

file_search_tool_2 = FileSearchTool(vector_store_ids=[vector_store_2.id])
# notices that FileSearchTool as tool and tool_resources must be added or the assistant unable to search the file
agent_2 = project_client.agents.create_agent(
    model="gpt-4o-mini",
    name="my-assistant-2",
    instructions="You are helpful assistant",
    tools=file_search_tool_2.definitions,
    tool_resources=file_search_tool_2.resources,
)
# [END upload_file_and_create_agent_with_file_search]
print(f"Created agent, agent ID: {agent_2.id}")

Поддерживаемые типы файлов

Примечание.

Для типов text/MIME кодировка должна быть либо utf-8, utf-16, либо ASCII.

File format Тип 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

Создание векторных хранилищ и добавление файлов

Добавление файлов в векторные хранилища — это асинхронная операция. Чтобы убедиться, что операция завершена, рекомендуется использовать вспомогательные средства создания и опроса в наших официальных пакетах SDK. Если вы не используете пакеты SDK, вы можете получить vector_store объект и отслеживать его file_counts свойство, чтобы увидеть результат операции приема файлов.

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


# create a vector store with no file and wait for it to be processed
vector_store = project_client.agents.create_vector_store_and_poll(data_sources=[], name="sample_vector_store")
print(f"Created vector store, vector store ID: {vector_store.id}")

# add the file to the vector store or you can supply file ids in the vector store creation
vector_store_file_batch = project_client.agents.create_vector_store_file_batch_and_poll(
    vector_store_id=vector_store.id, file_ids=[file.id]
)
print(f"Created vector store file batch, vector store file batch ID: {vector_store_file_batch.id}")

Кроме того, можно добавить несколько файлов в векторное хранилище путем создания пакетов до 500 файлов.

batch = project_client.agents.create_vector_store_file_batch_and_poll(
  vector_store_id=vector_store.id,
  file_ids=[file_1.id, file_2.id, file_3.id, file_4.id, file_5.id]
)

Базовая настройка агента: удаление файлов из векторных хранилищ

Файлы можно удалить из векторного хранилища с помощью следующих способов:

  • Удаление объекта файла векторного хранилища или
  • Удаление базового объекта файла, который удаляет файл из всех vector_store и code_interpreter конфигураций для всех агентов и потоков в организации.

Максимальный размер файла — 512 МБ. Каждый файл должен содержать не более 5 000 000 токенов для каждого файла (вычисляется автоматически при вложении файла).

Удаление хранилища векторов

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

file_search_tool.remove_vector_store(vector_store.id)
print(f"Removed vector store from file search, vector store ID: {vector_store.id}")

project_client.agents.update_agent(
    assistant_id=agent.id, tools=file_search_tool.definitions, tool_resources=file_search_tool.resources
)
print(f"Updated agent, agent ID: {agent.id}")

Удаление хранилищ векторов

project_client.agents.delete_vector_store(vector_store.id)
print("Deleted vector store")

Управление затратами с помощью политик истечения срока действия

Для базовой настройки file_search агента средство использует vector_stores объект в качестве ресурса и выставляется счет на основе размера созданных vector_store объектов. Размер объекта векторного хранилища — это сумма всех проанализированных блоков из файлов и их соответствующих внедрения.

Чтобы помочь вам управлять затратами, связанными с этими объектами vector_store, мы добавили поддержку политик истечения срока действия в объекте vector_store . Эти политики можно задать при создании или обновлении vector_store объекта.

vector_store = project_client.agents.create_vector_store_and_poll(
  name="Product Documentation",
  file_ids=[file_1.id],
  expires_after={
      "anchor": "last_active_at",
      "days": 7
  }
)

Хранилища векторов потоков имеют политики истечения срока действия по умолчанию

Хранилища векторов, созданные с помощью вспомогательных средств потоков (например tool_resources.file_search.vector_stores , в потоках или message.attachments сообщениях), имеют политику истечения срока действия по умолчанию в течение семи дней после последнего активного (определяется как последний раз, когда хранилище векторов было частью выполнения).

Когда срок действия хранилища векторов истекает, запуски в этом потоке завершаются сбоем. Чтобы устранить эту проблему, можно повторно создать vector_store с теми же файлами и повторно подключить его к потоку.