Главная / Статьи / Практические замечания: семантический поиск среди инструментов MCP с использованием Amazon Bedrock AgentCore

Практические замечания: семантический поиск среди инструментов MCP с использованием Amazon Bedrock AgentCore

Пошаговое руководство по практическим рекомендациям: семантический поиск в инструментах MCP с использованием Amazon Bedrock AgentCore: контракты, проверки и готовые блоки кода для команд, внедряющих эту модель.

903 слов

В этом руководстве показано, как построить цепочку от сырья до рабочей системы для семантического поиска в инструментах MCP с использованием Amazon Bedrock AgentCore Gateway. Основное внимание уделяется практическим шагам, четким проверкам и коду, который можно просто добавить в репозиторий без необходимости угадывать намерения автора. Для обзора необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не пытаясь угадать скрытое состояние. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия элементам, определите критерии успеха и не допускайте безответственного частичного выполнения задачи.

Что вы создадите

При работе над проектом «What you build» сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Рядом с функциональными результатами записывайте время выполнения, стоимость токенов или запросов. Очевидность затрат с самого начала предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды. Для каждого вызова фиксируйте название инструмента, хэш аргументов, время задержки и результат. Без такой информации отладка занимает часы.

Почему семантический поиск на стороне Gateway

При работе над разделом «Почему семантический поиск на стороне Gateway» сначала запишите спецификацию: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Фиксируйте название инструмента, хеш аргументов, время задержки и результат каждого вызова. Без такой записи отладка циклов агента занимает часы.

Предварительные требования

При работе над предварительными требованиями сначала запишите «контракт»: необходимые входные данные, сигнал о успехе и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не последующими доработками. Фиксируйте имя инструмента, хеш аргументов, время задержки и результат каждого вызова. Без такой записи отладка занимает часы. При работе над предварительными требованиями сначала запишите «контракт»: необходимые входные данные, сигнал о успехе и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Дайте названия элементам, определите критерии успеха и не допускайте безответственного частичного выполнения задач.

Выполнить семантический поиск

Семантический поиск работает наилучшим образом, когда его рассматривают как измеримую систему. Прежде чем расширять объём работы, необходимо зафиксировать один идеальный пример обработки запроса, один случай сбоя и записку о возврате к предыдущему состоянию. Рядом с функциональными результатами следует указывать время выполнения и стоимость токенов или запросов. Отображение стоимости на раннем этапе помогает избежать неожиданных счетов при переходе от демо-среды к общедоступным средам. Необходимо предоставлять инструменты с узкими схемами и чёткими метками о побочных эффектах. Администраторам нужно знать, какие вызовы изменяют состояние системы, прежде чем они автоматически одобрят их выполнение.

Шаг 1: Запрос к инструменту поиска

Шаг 1: Запрос к инструменту поиска работает наилучшим образом, если рассматривать его как измеримую структуру. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема обработки. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Используйте инструменты с узкими схемами и четкими метками побочных эффектов. Хостам необходимо знать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят их.

from mcp.client.streamable_http import streamablehttp_client
from mcp.client.session import ClientSession
async with streamablehttp_client(gateway_url) as (r, w, _):
    async with ClientSession(r, w) as session:
        await session.initialize()        result = await session.call_tool(
            "x_amz_bedrock_agentcore_search",
            {"query": "find a customer by phone number"},
        )        for match in result.content:
            print(match.text)

Шаг 2: Используйте результаты для фильтрации списка инструментов

Шаг 2: Используйте результаты для фильтрации списка инструментов — это работает лучше всего, если рассматривать его как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма задачи. Документируйте одновременно успешный и восстановительный пути выполнения. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не последующими улучшениями. Отображайте инструменты с узкими схемами и чёткими метками побочных эффектов. Хостам необходимо знать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят их.

async def smart_tool_selection(session, user_request: str, top_k: int = 5):
    search = await session.call_tool(
        "x_amz_bedrock_agentcore_search",
        {"query": user_request},
    )
    relevant_tool_names = [match.text for match in search.content[:top_k]]    all_tools = await session.list_tools()
    return [t for t in all_tools.tools if t.name in relevant_tool_names]

Шаг 3: Подключите его к агенту Strands

Шаг 3: Подключение к агенту Strands работает лучше всего, если рассматривать его как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма задачи. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-либо шаг срабатывает некорректно, причина сбоя должна указывать на конкретную ответственность, а не на запутанную цепочку операций.

from strands import Agent
from strands.tools.mcp import MCPClient
async def run(user_message: str):
    async with MCPClient(gateway_url) as mcp:
        relevant_tools = await smart_tool_selection(mcp.session, user_message)        agent = Agent(
            model="anthropic.claude-opus-4-7-v1:0",
            tools=relevant_tools,
            system_prompt="Use only the provided tools to answer.",
        )
        return await agent.run_async(user_message)

Настройка поиска

Справочная информация

Что дальше

Чек-лист операций