Архив рубрики ~Лента новостей~

Создайте и запустите собственный ИИ-агент в облаке.

Создайте и запустите собственный ИИ-агент в облаке.
Создайте и запустите собственный ИИ-агент в облаке.

Создайте и разверните агента на AWS с помощью Strands и AgentCore.

Делиться

Изображение создано искусственным интеллектом.

Использование ИИ на AWS для выполнения полезной работы может быть относительно простым. Для простого приложения можно использовать несколько строк кода на Python с использованием библиотеки boto3 и API Bedrock. Вы настраиваете доступ к LLM, отправляете запрос и некоторые входные данные, реализуете ответ и получаете его пользователю. Как только требуется модель, поддержка контекстного разговора, выбор между инструментами, выбор подробным лидером или координация нескольких шагов, окружающий код приложения начинает напоминать агентскую структуру.Стрэндс обеспечивает этот агентский уровень, но надежный запуск агента связан с другими проблемами. Ему необходимо место для запуска, интерфейс вызова, изоляция сессий, масштабируемость, безопасность и, возможно, такие сервисы, как долговременная память или управляемый доступ к инструментам. Amazon Bedrock AgentCore предоставляет эти операционные возможности, независимо от того, как должен вести себя сам агент.

Обратите внимание: кроме того, что я являюсь пользователем их систем, я не имею никакого отношения к AWS и не связан с этой компанией.

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

Нити

Strands — это платформа для создания агентов с открытым исходным кодом от AWS. Она обеспечивает компоненты прикладного уровня, необходимые для создания агента.

  • Получение степени магистра права, например, по методике Клода Сонне, через Amazon Bedrock или по локальным моделям через Ollama и другие поставщики.
  • Системная подсказка, определяющая роль и поведение агента.
  • Инструменты, которые модель может вызвать по выбранному выбору.
  • Сообщения в разговоре и context.
  • Цикл работы агента, который отправляет запросы моделей, выполняет запрошенные инструменты и возвращает результаты выполнения инструментов моделей.

Strands можно рассматривать как аналог LangChain или CrewAI на платформе AWS.

Базовый агент Strands можно создать, используя только всю модель и системную подсказку:

 from Strands import Agent model = 'your_LLM_choice' Agent = Agent( model=model, system_prompt="Вы - помощник в сфере образования малого и среднего бизнеса.", ) response = Agent("Объясните первый закон Ньютона.")

Хотя я позиционирую эту статью как совместную работу Strands и AgentCore, сам Strands не требует AgentCore для работы. Агент Стрэндс — это обычное кодовое приложение, которое может работать локально или на другой инфраструктуре. AgentCore используется, когда агенту требуется управляемое развертывание в инфраструктуре AWS и в производственных сервисах, например, для управления памятью, масштабируемостью и мониторингом. помощника на основе Strands, а затем добавим AgentCore Memory для сохранения внешнего вида между диалогами. Наш агент будет отвечать на вопросы по следующим темам:

  • Математика
  • Физика
  • Химия
  • География

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

Я использую только одного агента Strands, а не отдельных специализированных агентов для каждой темы. Использование отдельных агентов оправдано, когда для разных тем требуются разные модели, инструменты, инструкции, данные или доступ к правам, но на данный момент добавлена ненужная координация и сложность этой первоначальной реализации. это набор управляемых сервисов AWS для создания, развертывания, подключения и эксплуатации агентов в облаке AWS. Он не зависит от используемой платформы, поэтому может размещать агентов, созданных с помощью Strands, LangChain, OpenAI Agents SDK и других платформеров.+——————+——————————————————————————+ | Возможность | Цель | +——————+——————————————————————————+ | Время выполнения | Размещение и масштабирование агентов в средах с изолированными сеансами. Поддерживает потоковую передачу и HTTP, MCP, | | | и протоколы A2A. | +——————+——————————————————————————+ | Память | Сохраняет события разговора и извлекает устойчивые факты, предпочтения, резюме или эпизоды | | | для использования во время сеансов. | +——————+——————————————————————————+ | шлюз | Предоставляет API, функции Lambda и серверы MCP как управляемые инструменты, которые могут обнаружить агенты | | | и позвоните. | +——————+——————————————————————————+ | идентичность | Управляет входящей проверкой подлинности и учетными данными, которые агенты используют для доступа к внешним службам. | +——————+——————————————————————————+ | Политика | Применяет правила авторизации Cedar к вызовам инструментов шлюза до того, как они достигнут своих целей. | +——————+——————————————————————————+ | Браузер | Предоставляет управляемые сеансы браузера для агентов, которым необходимо взаимодействовать с веб-сайтами. | +——————+——————————————————————————+ | Интерпретатор кода | Запускает Python, JavaScript или TypeScript в изолированных управляемых изолированных программных средах. | +——————+——————————————————————————+ | Наблюдаемость | Отправляет журналы агента, трассировки и метрики в такие службы, как CloudWatch и X-Ray. | +——————+——————————————————————————+ | Оценки | Измеряет поведение агентов и качество ответов с помощью встроенных или настраиваемых оценщиков. | +——————+——————————————————————————+

Эти возможности независимы друг от друга, то есть агент может использовать только тех, кто ему нужен, и привлечь других по развитию младших своих личностей.

Мы будем использовать AgentCore для создания структуры нашего агента Strands и его развертывания в AWS с помощью AgentCore Runtime . Это создаст стандартную структуру проекта в вашей локальной системе, локальный рабочий процесс, конфигурацию, развертывание и точку входа в среду выполнения. class=»wp-block-heading»> Как Strands и AgentCore взаимодействуют друг с другом

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

AgentCore Runtime контролирует, где и как работает это приложение. Он обеспечивает управляемую среду для агента: развертывание, масштабирование, изоляцию сессий, потоковую передачу и интерфейсный вызов.
Это важный момент, поскольку развертывание агента с помощью AgentCore не определяет общее поведение системы. Это в основном зависит от выбора модели и базового кода Strands.

Установка инструментов разработки

Для того, чтобы победить лидеров, вам понадобится:

  • Учетная запись WS.
  • Учетные данные AWS настроения локально.
  • Версия Node.js 20 или более поздняя.
  • Python 3.10 или более поздняя версия.
  • AWS CDK (используется AgentCore для развертывания).
  • Интерфейс командной строки AgentCore.
  • Доступен к выбранной модели в Amazon Bedrock.

Установка производилась на компьютере с Windows с помощью PowerShell. Если эти команды доступны, сначала установите AWS CLI и Node.js.

 PS C: > msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi PS C: > aws --version # # Вывод # aws-cli/2.22.15 Python/3.12.6 Windows/11 exe/AMD64

Установить AWS CDK глобально с помощью npm:

PS C: > npm install -g aws-cdk PS C: > cdk --version # # Output # 2.1126.0 (build a90d578)

Установить AgentCore CLI:

 PS C: > npm install -g @aws/agentcore PS C: > Agentcore --version # # Выходные данные # CLI AgentCore собирает агрегированную анонимную аналитику использования, чтобы помочь улучшить инструмент. Чтобы отказаться: Agentcore config telemetry.enabled false Для аудита: Agentcore config telemetry.audit true Чтобы узнать больше: Agentcore Telemetry --help 0.19.0

Команда `CLI create` в AgentCore создает среду Python и устанавливает в зависимости от сгенерированного проекта при локальном запуске. В сгенерированном файле `pyproject.toml`В зависимости от обстоятельств, такие как Strands и AgentCore SDK.

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

Убедитесь, что результаты LLM или профиля, которые вы хотите использовать, доступны в нужных странах. Это можно сделать из командной строки AWS следующим образом:

 PS C: > aws bedrock list-foundation-models --region <ВАШ_РЕГИОН> PS C: > aws bedrock list-inference-profiles --region <ВАШ_РЕГИОН>

Выбор модели

При создании проекта AgentCore флаг командной команды –model-provider Bedrock выбирает Amazon Bedrock в качестве поставщика, но не указывает, какую базовую модель приложение намерено использовать.

Если модель не указана, Strands по умолчанию использует одежду из моделей Anthropic. На момент написания статьи последняя модель Strands по умолчанию составляет global.anthropic.claude-sonnet-4–6,, но рекомендуется всегда использовать конкретную модель, которую вы используете в Strands.

В этом коде указано использование Anthropic Claude Sonnet 4.6. глобального межрегионального профиля результаты:

 from anders.models import BedrockModel model = BedrockModel( model_id="global.anthropic.claude-sonnet-4-6", Region_name="us-west-2", temp=0.2, max_tokens=1_500, )

Компания Bedrock предлагает несколько семейных моделей на Выбор, и Клод Сонет является лучшим примером для борьбы с малыми и средними предприятиями, в то время как Клод Хайку или Amazon Nova Micro могут перейти к более простым и экономичным маршрутам задач. Результат географического или прикладного профиля является лучшим выбором, когда обработка должна оставаться в пределах географической границы, например, Европы или Азии.

Создание проекта AgentCore

Используйте интерфейс командной строки AgentCore для инициализации проекта Strands с Bedrock в качестве поставщика моделей:

 PS C:Usersthomaprojectsstrands-agentcore-demo> Agentcore create --name SMETriage --framework Strands --protocol HTTP --model-provider Bedrock --build CodeZip --memory none # # Output # [done] Создать каталог проекта SMETriage/[done] Подготовить каталог Agentcore/[done] Инициализировать репозиторий git [done] Добавить агент в проект [done] Настройка среды Python Создано: SMETriage/app/SMEtriage/Агент Python (Strands) Agentcore/Проект Config и CDK Проект успешно создан! Чтобы продолжить, перейдите к новому проекту: cd SMETriage

Мы уже упоминали флаг-модель. Еще одна важная опция: –build CodeZip.

CodeZip — это формат прямого развертывания кода для приложений Python от AgentCore. Вместо создания образа Docker и использования ECR/ECS, с помощью этого флага CLI AgentCore:

  • Собирает исходные файлы Python агента.
  • Разрешает и упаковывает свои зависимости.
  • Создает ZIP-архив, последовательное приложение и Linux.
  • Зависимости, объединены с ARM64.
  • Загружает архив в Amazon S3.
  • Настраивает среду выполнения AgentCore для запуска точек запуска Python.

Этот выбор фиксируется в файле agentcore/agentcore.json project.

После завершения выполнения команды создания объекта AgentCore вы должны увидеть конкретный папок проекта, похожий на этот:

 SMETriage/|-- Agentcore/| |-- Agentcore.json # Конфигурация проекта и развертывания | |-- aws-targets.json # Целевая учетная запись и регион AWS | `-- .env.local # Значения только для локального значения; gitignored `-- app/`-- SMETriage/|-- main.py # Точка входа агента `-- pyproject.toml # Зависимости Python

Сгенерированный проект можно протестировать перед внесением каких-либо изменений:

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage> Agentcore dev

Это открывает веб-страницу по адресу localhost:8080 или по домашнему адресу, Итак, и вы задаете модели вопросы.

473619245ecf728af299afeed2de85fb

Как управление AgentCore разрешениями IAM

Интерфейс командной строки Роль AgentCore обеспечивает выполнение агента в среде выполнения и предоставление оборудования, выбранного для выбранной модели Bedrock, доступ к настроенным ресурсам памяти и записи журналов выполнения среды.

В этом случае создание этой роли вручную не требуется. Однако у пользователя IAM, запускающего команду AgentCore Deploy, уже должно быть разрешение на создание и передачу ролей IAM, развертывание ресурсов CloudFormation, загрузка пакета CodeZip в S3 и управление скоростями работы AgentCore.

Пользователям и приложениям также требуется разрешение для вызова соответствующего агента. На этапе разработки обычно достаточно сгенерированных политик IAM. Перед запуском в производстве их следует проверить и оценить условия выполнения, модели, наличия памяти и вспомогательной инфраструктуры. main.py, в расположенном в рабочем положении app/SMETriage , Замените ссылку следующим кодом:

 импортировать ОС из Bedrock_agentcore.runtime импортировать BedrockAgentCoreApp из Strands импортировать Агент из Strands.models импортировать BedrockModel app = BedrockAgentCoreApp() MODEL_ID = os.getenv( "BEDROCK_MODEL_ID", "global.anthropic.claude-sonnet-4-6", ) REGION = os.getenv("AWS_REGION", "us-west-2") SUBJECT_PREFIXES = { "mathematics": ("Это ваш SME по математике." "Ответ на ваш вопрос следующий." ), "физика": ("Это ваш SME по физике." "Ответ на ваш вопрос следующий." ), "chemistry": ("Это ваш SME по химии." "Ответ на ваш вопрос следующий." ), "geography": ( "Это ваша география SME " "Ответ на ваш вопрос следующий." ), } def load_model() -> BedrockModel: return BedrockModel( model_id=MODEL_ID, имя_региона=REGION, температура=0.2, max_tokens=1_500, ) def build_agent() ->Agent: prefixes = "n".join( f"- {subject}: {prefix}" для темы, префикс в SUBJECT_PREFIXES.items() ) return Agent( model=load_model(), system_prompt=( "Вы являетесь образовательным помощником по сортировке МСП. " "Сначала решите, касается ли вопрос пользователя в первую очередь " "математики, физики, химии, географии или неподдерживаемого " "предмет." "Отвечайте только на вопросы по математике, физике, химии или географии. " "Для поддерживаемых вопросов начните с точного префикса " "выбранной темы, а затем дайте четкое и точное объяснение. " "Когда вопрос пересекается с предметами, выберите тему, наиболее " "важную для ответа на него. " "На неподтвержденные вопросы отвечайте точно: " ""Извините, я не знаю ответа на that."nn" "Необходимые префиксы субъектов:n" f"{prefixes}" ), ) @app.entrypoint def ignore(payload, context): Prompt = payload.get("prompt") if not isinstance(prompt, str) или не Prompt.strip(): return {"error": "Требуется непустой вопрос."} if len(prompt) > 2_000: return {"error": "Вопрос превышает максимальную длину."} выполнение.

1/Явное указание конфигурации модели

функция load_model централизует конфигурацию Bedrock.
Например, переменная среда BEDROCK_MODEL_ID может переопределить LLM по умолчанию без изменения исходного кода.

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage> $env:BEDROCK_MODEL_ID = "" PS C:Usersthomaprojectsstrands-agentcore-demosmetriage> Agentcore dev

Это полезно при использовании моделей или использовании различных профилей результатов в разных средах.

2/Предоставление моделей возможностей направлять вопросы

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

  • «Объясните гипотезу Римана десятилетнему» ребенок».
  • «Почему нержавеющая сталь устойчива к коррозии?»
  • «Почему в прибрежных регионах часто бывает более мягким климат?»

Классификатор с фиксированным набором ключевых слов должен был бы предугадать такие термины, как «Риман» , «коррозия » и «прибрежный» . Модель уже понимает взаимосвязь между древними терминами и соответствует им темами.

Некоторые вопросы решаются таким образом между другими темами. Рассмотрим, например: «Как химический состав атмосферы влияет на климат?» Химия и география — оба следующих направления, поэтому в задании следует выбрать тот вариант, который наиболее соответствует ответу.

Этот гибкий, но не совсем выгодный. Модель может по-разному классифицировать один и тот же неоднозначный вопрос при одном запуске операции или выдавать ответ в неправильном формате. Это может быть приемлемо для ассистента преподавателя, но гораздо более рискованно, если маршрутизация контролирует доступ к конфиденциальным инструментам или данным. В этом случае вам потребуется внедрить другие средства контроля, например, структурированный вывод.

3/Проверка выполнения запроса

Сначала появляется запрос, подходящий для использования вопроса.
Это обычный проверочный запрос, а не модерация контента. Она оставляет в модели некорректных поражений и увеличивает большие запросы. Функция, помеченная как `@ app.entrypoint`,, является связующим звеном между AgentCore Runtime и агентом Strands. Среда выполнения обеспечивает полезную нагрузку, функция которой впоследствии агент Strands формирует ответ.

Тестирование агента

После остановки и перезапуска команды Agentcore dev мы можем задавать агенту вопросы.

b48df2306c861b80facf0105b006b848

Как показано, каждый ответ должен объявляться с соответствующим префиксом SME, а обновленные ответы демонстрируют, что новый агент вступил в силу. Кроме того, на неподдерживаемый вопрос, например, «Кто написал «Гордость и предубеждение»?», следует дать ответ:

 "Мне очень жаль, я не знаю ответа на that."

Наличие пересекающихся вопросов полезно для того, чтобы увидеть, как модель разрешает неоднозначность:

632c0be16804de970d627fc0604175fd

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

Развертывание агента в облаке AWS.

После того, как агент начнет корректно локально работать, разверните его в AWS, используя этот пример. команда:

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage>Agentcore Deploy Project: SMETriage Target: us-east-2:0123456789 [выполнено] Проверить проект [выполнено] Проверить зависимости [выполнено] Построить проект CDK [выполнено] Синтезировать CloudFormation [выполнено] Проверить состояние стека [выполнено] Загрузить среду AWS [выполнено] Вычислить изменения различий... [готово] Опубликовать ресурсы ╭────────────────────────────────────────────╮ │ ✓ Развертывание на AWS завершено │ │ │ │ [████████████████████] 5/5 │ ╰──────────────────────────────────────────────╯ Развернуто: 1 стек: AgentCore-SMETriage-default Примечание. Поиск транзакций включен. Для полной активности поиска транзакций и индексации следов вызовов требуется ~10 минут. Журнал: Agentcore.clilogsdeploydeploy-20260611-104449.log

Мы можем проверить эффективность среды выполнения:

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage>Agentcore status --type агент Агенты SMETriage: Развернуто - Время выполнения: ГОТОВО (arn:aws:bedrock-agentcore:us-east-2:0123456789:runtime/SMETriage_SMETriage-r5adp27A24) URL: https://bedrock-agentcore.us-east-2.amazonaws.com/runtimes/arn%3Aaws%3Abedrock-agentcore%3Aus-east-2%3A6963531187 45%3Aruntime%2FSMETriage_SMETriage-r5adp27A24/infections

Затем вызовите его с помощью:

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage>агенткор вызывает «Объясните, как вероятность используется в повседневной жизни». --stream { "response": "Это ваш математический SME. Ответ на ваш вопрос следующий.nnВероятность — это математическое исследование вероятности и случайности, и оно проявляется во многих аспектах повседневной жизни. Вот несколько ключевых примеров:nn## Прогноз погодыn- Метеорологи используют вероятность, чтобы предсказать **вероятность дождя или снега** (например, "70% вероятность дождя")n- Эти прогнозы основаны на исторических данных и атмосферных данных. моделиnn## Страхование и финансыn- Страховые компании рассчитывают **вероятность риска** для установления цен премий.n- Банки оценивают **вероятность дефолта по кредиту** при выдаче кредитов.n- Инвесторы оценивают **вероятность возврата** инвестиций.nn## Медицина и здравоохранениеn- Врачи используют вероятность для оценки **точности диагностических тестов** и риска заболевания.n- Клинические испытания полагаются на вероятность, чтобы определить, является ли **лечение эффективным. эффективный**n- Консультанты-генетики рассчитывают **вероятность наследования заболеваний**nn## Игры и азартные игрыn- Карточные игры, кости и лотереи управляются **математической вероятностью**n- Понимание шансов помогает людям принимать **обоснованные решения** о риске.nn## Принятие решений на каждый деньn- Решение о том, стоит ли **носить с собой зонтик**, на основе прогнозируемой вероятностиn- Оценка **вероятность пробок** при планировании поездок на работуn- Оценка **рисков безопасности** в повседневной деятельностиnn## Контроль качестваn- Производители используют вероятность для **прогнозирования уровня дефектов** на производствеnnПо сути, вероятность помогает нам **количественно оценивать неопределенность** и принимать более обоснованные решения в непредсказуемом мире.n" } Сессия: 735d6d6b-b2de-40d3-ae3c-741821c4810f Чтобы возобновить: агентный вызов --session-id 735d6d6b-b2de-40d3-ae3c-741821c4810f Журнал: C:Usersthomaprojectsstrands-agentcore-demosmetriageagentcore.clilogsinvokeinvoke-SMETriage-20260611-105138.log

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

Примечание: на данном этапе AgentCore Runtime обеспечивает управляемую среду выполнения, но работа приложений остается в коде Strands. Изменение системной подсказки или модели требует обновления и повторного развертывания приложения.

Добавление функциональности AgentCore — Память

В начале я предложил, что AgentCore состоит из различных частей, например, шлюза, системы выполнения задач, Диптихи и т. д. д.

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

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage> Agentcore вызывает "Объясните первый закон Ньютона". --stream { "response": "physicals: Это ваш SME по физике. Ответ на ваш вопрос следующий.nn**Первый закон движения Ньютона** (также известный как **Закон инерции**) гласит:nn>*Объект в покое остается в покое, а объект в движении остается в движении с постоянной скоростью (той же скоростью и направлением), если на него не действует чистая внешняя сила.*nn---nn### Ключевые понятия:nn1. **Инерция**. Это тенденция объекта сопротивляться изменениям своего состояния движения. Чем больше масса объекта, тем больше его инерция.nn2. **В покое** – если объект неподвижен, он останется неподвижным, пока на него не будет действовать сила. Например, книга, лежащая на столе, не будет двигаться сама по себе.nn3. **В движении** – если объект движется, он будет продолжать двигаться по прямой линии с той же скоростью, если на него не действует сила (например, трение, гравитация или приложенная сила).nn4. **Чистая внешняя сила**. Значение имеет *комбинированная/результирующая* сила. Если все силы, действующие на объект, уравновешиваются (чистая сила = 0), объект ведет себя так, как будто на него не действует никакая сила.nn---nn### Пример на каждый день:nКогда автомобиль внезапно останавливается, пассажиры кренятся **вперед** — их тела находились в движении и имеют тенденцию **оставаться в движении**, демонстрируя инерцию.nnЭтот закон фундаментально определяет, что такое **сила**: то, что *изменяет* состояние движения объекта object.n" } Сеанс: 7dbe017a-e306-4891-88d1-b707a5d6f894 Для возобновления: агенткор вызывает --session-id 7dbe017a-e306-4891-88d1-b707a5d6f894 Журнал: C:Usersthomaprojectsstrands-agentcore-demosmetriageagentcore.clilogsinvokeinvoke-SMETriage-20260611-133213.log

Для запроса запроса на продолжение мы можем использовать идентификатор сессия: 7dbe017a-e306–4891–88d1-b707a5d6f894.

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage>Agentcore Invoke --session-id 7dbe017a-e306-4891-88d1-b707a5d6f894 "Дайте мне пример" --stream { "response": "физика: Это ваш малый и средний бизнес по физике. Ответ на ваш вопрос следующий.nnВот ясный, повседневный пример Первого закона Ньютона в действие:nn---nn### 🎳 Пример: катящийся шар для боулинга.nn**Сценарий:**nКогда вы катите шар для боулинга по дорожке, он продолжает двигаться вперед по прямой примерно с той же скоростью, пока либо:n- **не ударится о кегли** (внешняя сила останавливает его), либоn- **замедлится из-за трения** между шаром и полом (внешняя сила уменьшает его speed)nn---nn### Breaking It Down:nn| Situation | What Happens | Why |n|----------|--------------|-----|n| Ball is rolled | It keeps moving forward | No net force to stop it immediately |n| Friction acts on ball | It gradually slows down | External force opposing motion |n| Ball Он останавливается или меняет направление | Внешняя сила со стороны кеглей |nn---nn### Ключевой момент:nВ среде **без трения** (например, в космосе) шар для боулинга будет катиться **вечно** по прямой линии с одной и той же скоростью, потому что не будет ** никакой внешней силы**, способной изменить его движение.nn---nnЭто прекрасно иллюстрирует Первый закон Ньютона - мяч сопротивляется любому изменению своего движения, и только **внешняя сила** может изменить его скорость или направление.n" } Сеанс: 7dbe017a-e306-4891-88d1-b707a5d6f894 Для продолжения: агенткорный вызов --session-id 7dbe017a-e306-4891-88d1-b707a5d6f894 Журнал: C:Usersthomaprojectsstrands-agentcore-demosmetriageagentcore.clilogsinvokeinvoke-SMETriage-20260611-133413.log

Однако идентификаторы сессий НЕ являются механизмами долговременной памяти. Для этого мы можем использовать возможности памяти AgentCore.

Добавление памяти AgentCore

Память AgentCore хранит события диалогов и может из них привести к полезным долгосрочным записям. В ней встроены стратегии, служащие различных лиц:

 +-----------------+---------------------------------------------------------------+ | Стратегия | Что он извлекает | +-----------------+---------------------------------------------------------------+ | ПОЛЬЗОВАТЕЛЬ_ПРЕФЕРЕНЦИЯ | Выбор пользователя, предпочтительный стиль и повторяющиеся предпочтения. | +-----------------+---------------------------------------------------------------+ | СЕМАНТИЧЕСКИЙ | Прочные факты из разговоров. | +-----------------+---------------------------------------------------------------+ | РЕЗЮМЕ | Краткое изложение бесед. | +-----------------+---------------------------------------------------------------+ | ЭПИЗОДИЧЕСКИЙ | Последовательности взаимодействий, которые могут повлиять на дальнейшее поведение. | +-----------------+--------------------------------------------------------------+

Для нашего агента-специалиста наиболее подходящим проявлением является USER_PREFERENCE . Он позволяет агенту запоминать такие утверждения, как:

  • «Используйте британский вариант английского языка для правописания»
  • «Всегда отвечайте на пиратском» сленге».
  • «Отвечайте кратко».

Идентификаторы акторов и идентификаторы сессий

Память требует два идентификатора:

 +------------+-------------------------------------------------------------+---------------------------------------------+ | Идентификатор | Значение | Когда это изменится | +------------+-------------------------------------------------------------+---------------------------------------------+ | id_актора | Учащийся, чьи прочные воспоминания сохраняются и | Сохраняйте стабильность для одного и того же учащегося. | | | получено. | | +------------+-------------------------------------------------------------+---------------------------------------------+ | идентификатор сеанса | Один разговор, содержащий связанные повороты. | Используйте новое значение для нового разговора. | +------------+-------------------------------------------------------------+---------------------------------------------+

AgentCore Runtime предоставляет переменный session_id. Применение передачи идентификатора пользователя через actor_id. В нашем примере он применяется в документированном пользовательском заголовке X-Learner-Id , который идентифицирует пользователя (actor_id), отправляющего запрос.

Для полей act_id следует использовать непрозрачный идентификатор, сгенерированный приложением, например, Learner-7f83a2 или УУИД. Не указывайте идентификатор адреса электронной почты, имя или другую личную информацию.

Параметр requestHeaderAllowlist выполнения выполнения делает X-Learner-Id доступным через context.request_headers. В рабочем приложении это значение следует получать на основе аутентифицированной учетной записи и не доверять идентификатор обучающегося, предоставленного непосредственно недоверенным клиентом.

использовать память ресурса.

В корневом каталоге проекта определяется ресурс Память:

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage> Agentcore add Memory ` >> --name LearnerPreferences ` >> --strategies USER_PREFERENCE ` >> --expiry 30

Необходимо добавить новый раздел в файл agentcore/agentcore.json :

 { "memories": [ { "name": "LearnerPreferences", "eventExpiryDuration": 30, "strategies": [ { "type": "USER_PREFERENCE", "namespaceTemplates": [ "/users/{actorId}/preferences/" ] } ] } ] }

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

При развертывании AgentCore:

  • Создает ресурс Memory.
  • Предоставляет роль выполнения разрешения на чтение и запись.
  • Встраивает свой идентификатор в среду выполнения как MEMORY_LEARNERPREFERENCES_ID.

Strands интегрируется с памятью AgentCore через AgentCoreMemorySessionManager.

При каждом вызове приложения выполняются следующие действия:

1. Получает идентификатор обучающегося из разрешенного заголовка X-Learner-Id или поля userId, предоставленного приложению.

2. Получает данный идентификатор разговора из контекста выполнение.

3. Создает конфигурацию памяти AgentCore для данного обучающегося и диалога.

4. Создает агент Strands с менеджером сессий памяти.

5. Установите параметр сессий сохранения сообщений и получите соответствующие настройки.

В коде агента создаются Strands при каждом вызове, поскольку его память относится к одному актеру и сеансу. Модель Bedrock и системная подсказка по-прежнему могут использоваться повторно.

Вот измененный код агента Strands.

 импортировать операционную систему из Bedrock_agentcore.memory.integrations.Strands.config импортировать ( AgentCoreMemoryConfig, RetrivalConfig, ) из Bedrock_agentcore.memory.integrations.Strands.session_manager импортировать ( AgentCoreMemorySessionManager, ) из Bedrock_agentcore.runtime импортировать BedrockAgentCoreApp из Strands импортировать агента из Strands.Models импорт BedrockModel app = BedrockAgentCoreApp() MODEL_ID = os.getenv( "BEDROCK_MODEL_ID", "global.anthropic.claude-sonnet-4-6", ) REGION = os.getenv("AWS_REGION", "us-west-2") MEMORY_ID = os.getenv("MEMORY_LEARNERPREFERENCES_ID") SUBJECT_PREFIXES = { "mathematics": ("Это ваш SME по математике." "Ответ на ваш вопрос следующий."), "физика": ("Это ваш SME по физике." "Ответ на ваш вопрос следующий." ), "chemistry": ("Это ваш SME по химии." "Ответ на ваш вопрос следующий." ), "geography": ("Это ваш SME по географии." "Ответ на ваш вопрос следующий." ), } def load_model() -> BedrockModel: вернуть BedrockModel( model_id=MODEL_ID, имя_региона=РЕГИОН, температура=0,2, max_tokens=1_500, ) def build_system_prompt() ->str: prefixes = "n".join( f"- {subject}: {prefix}" для предмета, префикс в SUBJECT_PREFIXES.items() ) return ("Вы образовательный помощник по сортировке МСП. " "Сначала решите, касается ли вопрос пользователя в первую очередь " "математики, физики, химии, географии или неподдерживаемого " "предмета. " "Отвечайте только на вопросы о математике, физика, химия, " "или география" "Для поддерживаемых вопросов начните с точного префикса " "выбранного предмета, а затем дайте четкое и точное объяснение. " "Если вопрос пересекается с предметами, выберите предмет, который наиболее " "важен для ответа на него. " "Используйте любые полученные предпочтения учащегося при определении уровня, " "стиля и примеров в ответе" "На неподдерживаемые вопросы отвечайте точно:" ""Мне очень жаль. не знаю ответа на этот вопрос. "nn" "Необходимые префиксы субъектов:n" f"{prefixes}" ) MODEL = load_model() SYSTEM_PROMPT = build_system_prompt() def build_session_manager(actor_id: str, session_id: str, ) ->AgentCoreMemorySessionManager | Нет: если нет MEMORY_ID: return None namespace = f"/users/{actor_id}/preferences/" memory_config = AgentCoreMemoryConfig( Memory_id=MEMORY_ID, act_id=actor_id, session_id=session_id, retrival_config={ namespace: RetrivalConfig( top_k=3,релевантность_score=0.5, ) }, ) return AgentCoreMemorySessionManager( Agentcore_memory_config=memory_config, Region_name=REGION, ) def get_actor_id(payload, context) ->ул | Нет: act_id = payload.get("userId"), если isinstance(actor_id, str) и act_id.strip(): return actor_id.strip() request_headers = getattr(context, "request_headers", None) или {} для имени, значения в request_headers.items(): if name.casefold() == "x-learner-id": if isinstance(value, str) и value.strip(): return value.strip() return None @app.entrypoint def ignore(payload, context): Prompt = payload.get("prompt") actor_id = get_actor_id(payload, context) if not isinstance(prompt, str) или не Prompt.strip(): return {"error": "Требуется непустой вопрос."} if len(prompt) > 2_000: return {"error": "Вопрос превышает максимальное значение length."} if not actor_id: return {"error": "Требуется непустой userId."} if len(actor_id) > 128: return {"error": "userId превышает максимальную длину."} session_id = getattr(context, "session_id", None) или "local-session" session_manager = build_session_manager(actor_id, session_id) Agent = Agent( model=MODEL, session_manager=session_manager, system_prompt=SYSTEM_PROMPT, ) response = Agent(prompt.strip()) return { "response": str(response), "memory_enabled": session_manager не имеет значения None, } if __name__ == "__main__": app.run()

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

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage> Agentcore вызывает ` "Я предпочитаю отвечать на пиратском языке" ` -H "X-Learner-Id: Learner-7f83a2" ` --stream { "response": "Аррр, я заметил твое предпочтение пиратской речи, приятель! Давай, задавай мне свой вопрос о математике, физике, химии или географии, и я отвечу тебе на лучшем пиратском языке семи морей! 🏴‍☠️⚓n", "memory_enabled": true } Session: 2a94f2d9-9e40-417e-a53a-ad9393f0490d Чтобы возобновить: агенткор вызывает --session-id 2a94f2d9-9e40-417e-a53a-ad9393f0490d Журнал: C:Usersthomaprojectsstrands-agentcore-demosmetriageagentcore.clilogsinvokeinvoke-SMETriage-20260611-135649.log

Мы видим, что флаг memory_enabled установлен в значении true, и теперь мы просто передаем наш Learner-Id при задании вопросов, вот так…

 PS C:Usersthomaprojectsstrands-agentcore-demosmetriage> Agentcore вызывает ` "Объясните второй закон Ньютона." ` -H "X-Learner-Id: Learner-7f83a2" ` --stream { "response": "физика: Это ваш SME по физике. Ответ на ваш вопрос следующий.nnЭй, дружище! Соберись и дай мне послушать! ⚓nn**Второй закон движения Ньютона**, ага, это будет один из величайших сокровища всей науки!nn---nn🏴‍☠️ **Закон, простыми пиратскими терминами:**nn> **Сила = Масса × Ускорение**n>*(или как мы нацарапаем это на корпусе корабля: **F = ma**)*nn---nn**Что это значит, спросите вы?**nn- ⚓ **Сила (F)** — Это будет толчок или притяжение, которое вы что-то дадите', измеряемое в Ньютонах, обр!n- 💀 **Масса (m)** — Это то, сколько *вещей* составляет ваше пушечное ядро или сундук с сокровищами, измеряется в килограммах!n- 🌊 **Ускорение (a)** — Это то, насколько быстрой будет ваша скорость *change'*, измеряемая в метрах в секунду в квадрате!nn---nn**Прекрасный пример из открытого моря:**nnЕсли вы стреляете из **тяжелого пушечного ядра** и **легкое пушечное ядро** с той же силой, более легкое отлетает с БОЛЬШИМ ускорением! Чем тяжелее, тем медленнее, как корпус, покрытый ракушками!nnИтак, помните: чем **больше масса**, тем **сильнее вам придется толкать**, чтобы получить такое же ускорение! nnТеперь подними паруса и иди применять физику, негодяй! 🦜n", "memory_enabled": true } Сеанс: d665e549-6bf2-470d-96ce-506b5be141e2 Для возобновления: вызов агента --session-id d665e549-6bf2-470d-96ce-506b5be141e2 Журнал: C:Usersthomaprojectsstrands-agentcore-demosmetriageagentcore.clilogsinvokeinvoke-SMETriage-20260611-155936.log

Эксплуатационные расходы

Сам SDK Strands Agents является открытым исходным кодом и бесплатен для использования следующим образом:

    Локально на вашем ноутбуке
  • На EC2
  • В контейнере Docker
  • На лямбда
  • В любом другом месте по вашему выбору

Вы платите только за вызываемый LLM (например, Amazon Nova, Anthropic Claude, OpenAI GPT и т. д.) и за любую инфраструктуру, на которой он работает (EC2, Lambda и т. д.). Таким образом, если вы создадите агента Strands, который обращается к Amazon Bedrock, ваш счет, по сути, будет следующим:

 Затраты на вывод модели Bedrock + EC2/Lambda/etc. затраты (если применимо)

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

Для получения более подробной информации, пожалуйста, перейдите по ссылкам ниже. https://aws.amazon.com/bedrock/pricing/

Краткое содержание

В этой статье обсуждалось, как создать и запустить агентский рабочий процесс на AWS. Два основных компонента, которые позволяют это сделать, называются Strands и AgentCore.

Strands используется для определения возможностей вашего агента и моделей, которые он использует для своей работы. Strands предлагает гибкую поддержку моделей. Вы можете использовать любую модель LLM в Amazon Bedrock, которая поддерживает использование инструментов и потоковую передачу данных, модель из встроенных моделей Claude от Anthropic через API Anthropic, модель через Ollama и множество других моделей поставщиков, таких как OpenAI через LiteLLM. При желании вы также можете определить свою небольшую модель поставщика.

AgentCore позволяет локально тестировать агента перед полным развертыванием в облачной инфраструктуре AWS. AgentCore не зависит от типа агента: вы можете создавать агентов, используя Strands, как мы вариант, а также другие системы разработки агентов, такие как CrewAI и LangGraph. другое.

В качестве примера мы использовали агента-эксперта, который помогает вообще в вопросах по математике, физике, химии и географии. Он использовал Bedrock и программу Anthropic Sonnet LLM для понимания и понимания каждого вопроса и выбора обычного экспертного ответа. Вопросы, выходящие за рамки прикладных тем, вежливо отклонялись.

Я также рассказал о разнице между сессиями во время выполнения и долговременной памяти. Сессия во время выполнения сохраняет контекст в течение одного разговора, позволяя агенту отвечать на вопросы. Этот контекст меняется в начале новой сессии.

Память AgentCore решает проблему, обеспечивая передачу полезной информации между отдельными диалогами. Связывая выборы с пользователем через поля заголовка запроса act_id и X-Learner-Id , агент может запоминать инструкции, такие как короткие ответы или, как в показанном примере, ответы на вопросы на пиратском сленге.

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

Если вы хотите узнать больше, официальная документация по AWS Strands доступна здесь. Для получения дополнительной информации об AgentCore используйте эту ссылку.

Томас Рид. Все материалы от Томаса Рида.

Источник: towardsdatascience.com

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Новости робототехники Квортерхилл обсуждает модернизацию транспорта в США, отмечая 70-летие федеральных автомагистралей Архив рубрики ~Коротко из Telegram~ Китай запускает пятилетку ИИ-образования. Госсовет выпустил план до 2030 года:… Архив рубрики ~Коротко из Telegram~ Кнопочные Nokia теперь с ИИ. HMD выпустила Nokia 200 4G:… Новости робототехники Забудьте про робособак: учёные показали робота-морского ежа. Вместо двух или… Архив рубрики ~Полезное~ Anthropic выложила официальную библиотеку готовых промптов для Claude Code. Бесплатно…. Архив рубрики ~Коротко из Telegram~ В Skyeng появился свой ИИ-разработчик «Джулия» Skyeng внедрил внутреннего ИИ-ассистента… Архив рубрики ~Коротко из Telegram~ Нейросети впервые прочитали целый обугленный свиток из Геркуланума В Vesuvius… Архив рубрики ~Полезное~ Anthropic запустила Claude Science — AI-воркбенч для учёных Anthropic выкатила… Архив рубрики ~Коротко из Telegram~ Devin Fusion снижает цену AI-кодинга на 35% Cognition представила Devin… Архив рубрики ~Коротко из Telegram~ VK выкатил нейропоиск Discovery AI для своих сервисов Инженеры AI… Архив рубрики ~Коротко из Telegram~ ИИ-инфраструктура разгоняет энергопотребление Google Google выпустила экологический отчёт за 2025… Архив рубрики ~Коротко из Telegram~ ИТМО показал MetaDiT — ИИ для проектирования наноструктурной оптики В… Архив рубрики ~Коротко из Telegram~ OpenAI показала свой первый ИИ-чип OpenAI впервые представила собственный чип… Архив рубрики ~Коротко из Telegram~ Вайбкодеров за год стало в 137 раз больше OpenAI выпустила… Новости робототехники Квортерхилл обсуждает модернизацию транспорта в США, отмечая 70-летие федеральных автомагистралей Архив рубрики ~Коротко из Telegram~ Китай запускает пятилетку ИИ-образования. Госсовет выпустил план до 2030 года:… Архив рубрики ~Коротко из Telegram~ Кнопочные Nokia теперь с ИИ. HMD выпустила Nokia 200 4G:… Новости робототехники Забудьте про робособак: учёные показали робота-морского ежа. Вместо двух или… Архив рубрики ~Полезное~ Anthropic выложила официальную библиотеку готовых промптов для Claude Code. Бесплатно…. Архив рубрики ~Коротко из Telegram~ В Skyeng появился свой ИИ-разработчик «Джулия» Skyeng внедрил внутреннего ИИ-ассистента… Архив рубрики ~Коротко из Telegram~ Нейросети впервые прочитали целый обугленный свиток из Геркуланума В Vesuvius… Архив рубрики ~Полезное~ Anthropic запустила Claude Science — AI-воркбенч для учёных Anthropic выкатила… Архив рубрики ~Коротко из Telegram~ Devin Fusion снижает цену AI-кодинга на 35% Cognition представила Devin… Архив рубрики ~Коротко из Telegram~ VK выкатил нейропоиск Discovery AI для своих сервисов Инженеры AI… Архив рубрики ~Коротко из Telegram~ ИИ-инфраструктура разгоняет энергопотребление Google Google выпустила экологический отчёт за 2025… Архив рубрики ~Коротко из Telegram~ ИТМО показал MetaDiT — ИИ для проектирования наноструктурной оптики В… Архив рубрики ~Коротко из Telegram~ OpenAI показала свой первый ИИ-чип OpenAI впервые представила собственный чип… Архив рубрики ~Коротко из Telegram~ Вайбкодеров за год стало в 137 раз больше OpenAI выпустила…

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