АГЕНТ AWS BEDROCK – Проблема с параметрами SessionAttributes

Вопрос или проблема

Я создаю персонализированный чат-бот с использованием AWS Bedrock Agent и следовал этой документации, чтобы он знал предыдущую информацию, когда начинается новый разговор через API InvokeAgent:

https://docs.aws.amazon.com/pt_br/bedrock/latest/userguide/agents-session-state.html

Таким образом, я хочу, чтобы, когда пользователь собирается пообщаться с LLM (здесь используется Claude 3.5 Sonnet), при его первом запросе я передавал sessionState с параметрами sessionAttributes в вызове. В sessionAttributes я отправляю имя пользователя, возраст и предыдущие разговоры, чтобы LLM мог ‘знать’ пользователя до генерации первого ответа, основываясь на предыдущих взаимодействиях и информации из базы данных.

Вот скрипт, который я написал:

import uuid
import boto3

def invoke_agent(agent_id, agent_alias_id, session_id, prompt):
    """
    Отправляет подсказку для обработки и ответа агента,
    используя как sessionAttributes, так и promptSessionAttributes.
    """

    try:
        # Определяем атрибуты сеанса для поддержания контекста, специфичного для пользователя, в ходе взаимодействий
        response = agents_runtime_client.invoke_agent(
                agentId=agent_id,
                agentAliasId=agent_alias_id,
                sessionId=session_id,
                sessionState={ 
                    'sessionAttributes': {
                        'userName': 'Yoran', # {user.name}
                        'userAge': '21',     # {year(today - user.birthdate)}
                        'summary': 'Пользователь много говорил о языках программирования, таких как Python и Javascript' # {user.summary_conversation}
                    },
},
                inputText=f"{prompt}", ## user_message,
                enableTrace=False,
            )

        completion = ""
        for event in response.get("completion"):
            chunk = event["chunk"]
            completion += chunk["bytes"].decode()

    except Exception as e:
        print(f"Не удалось вызвать агента. {str(e)}")
        raise

    return completion

# Определяем параметры чата
agent_alias_id = "XXXXXXXX"
agent_id = "XXXXXXXX"
session_id = str(uuid.uuid4())
input_text = "Как меня зовут??"


# Вызываем агента с sessionAttributes и promptSessionAttributes
response = invoke_agent(agent_id, agent_alias_id, session_id, input_text)
print(response)

Я передаю userName как параметр sessionAttributes, но когда я спрашиваю о своем имени в первом вызове API, LLM отвечает:

Извините, но у меня нет вашего имени в записях. Не хотите ли сообщить мне ваше имя?

Я использую это неправильно? Я прочитал всю документацию и думал, что это лучший способ дать LLM память, но я просто не могу получить то, что ожидаю.

Я пытался использовать параметры, приведенные в документации AWS Bedrock, чтобы дать LLM память о контексте/долгосрочный контекст.

Я ожидал, что LLM сможет читать свои sessionAttributes.

Ответ или решение

Проблема, с которой вы столкнулись при использовании параметров sessionAttributes в AWS Bedrock Agent, скорее всего связана с тем, как язычная модель (LLM) обрабатывает и использует эти данные. Ваша реализация передачи sessionAttributes в API выглядит корректной, однако есть несколько аспектов, которые стоит учесть.

  1. Проверка структуры запросов: Убедитесь, что sessionAttributes правильно передаются в методе invoke_agent. Вы можете добавить отладочный вывод (например, print(sessionState)), чтобы убедиться, что данные формируются корректно.

  2. Форматирование данных: Иногда модели могут неправильно интерпретировать данные, если они не находятся в ожидаемом формате. Убедитесь, что значения всех атрибутов соответствуют ожидаемому формату. Например, если возраст должен быть числом, передавайте его числом, а не строкой.

  3. Обработка LLM: Убедитесь, что LLM действительно поддерживает использование sessionAttributes при генерации ответа. Возможно, модель, которую вы используете, не настроена на автоматическое извлечение информации из этих атрибутов. В таком случае вам может потребоваться модифицировать ваш ввод (prompt) так, чтобы явно указывать данные, которые вы хотите использовать. Например, вы можете модифицировать строку запроса, чтобы она звучала так: "Меня зовут {userName}, мне {userAge} лет. Что ты об этом думаешь?".

  4. Логика обработки запросов: Если ваша модель не учитывает контекст из sessionAttributes, рассмотрите возможность интеграции логики на уровне вашего приложения, чтобы формировать ввод с учетом этой информации.

  5. Работа с документацией и поддержкой: Если после всех проверок проблема сохраняется, подумайте о том, чтобы обратиться в поддержку AWS, предоставив им минимально воспроизводимый пример, включая ваши входные данные и ожидаемые результаты.

Пример исправленного передаваемого текстового запроса может выглядеть так:

input_text = f"Меня зовут {sessionState['sessionAttributes']['userName']}, мне {sessionState['sessionAttributes']['userAge']} лет. Как ты считаешь, это нормально?"

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

Следуя этим рекомендациям, вы сможете лучше настроить взаимодействие с AWS Bedrock Agent и избежать проблем с передачей состояния сеанса. Удачи в дальнейших разработках!

Оцените материал
Добавить комментарий

Капча загружается...