Средство поиска файлов службы агента ИИ 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. Если вы хотите использовать портал, выполните следующие действия.
Краткое руководство. Отправка локальных файлов с помощью поиска файлов
В этом примере мы используем службу агента ИИ Azure для создания агента, который поможет ответить на вопросы о передаваемых данных из локальных файлов.
Необходимые компоненты
Убедитесь, что у вас есть участник данных BLOB-объектов хранилища ролей в учетной записи хранения проекта.
Убедитесь, что в проекте есть роль разработчика ИИ 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}")
Шаг 3. Создание агента и включение поиска файлов
Чтобы сделать файлы доступными для агента, создайте 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}")
Краткое руководство. Использование существующих файлов в Хранилище BLOB-объектов Azure с поиском файлов
В этом примере мы используем службу агента ИИ Azure для создания агента, который может помочь ответить на вопросы о информации из файлов в Хранилище BLOB-объектов Azure.
Необходимые компоненты
Завершите настройку стандартного агента.
Убедитесь, что у вас есть участник данных BLOB-объектов хранилища ролей в учетной записи хранения проекта.
Убедитесь, что в проекте есть роль разработчика ИИ 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 с теми же файлами и повторно подключить его к потоку.