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

В этом руководстве мы разберем создание именно такого решения: легковесного автоматизированного скрипта для суммаризации документов с использованием Python, AWS SDK для Python (boto3) и Amazon Bedrock. Мы будем использовать Anthropic Claude 3 Haiku — модель, которая идеально сочетает в себе скорость и стоимость для задач суммаризации текста.

Почему Bedrock и Claude 3 Haiku?

Amazon Bedrock — это управляемый сервис, который предоставляет доступ к базовым моделям через единый набор AWS API. Вместо того чтобы собирать воедино внешние эндпоинты и возиться с разными моделями биллинга и безопасности, вы вызываете эндпоинт AWS с использованием стандартного управления IAM. Ваши данные остаются внутри вашей среды AWS.

Claude 3 Haiku — самая компактная модель в семействе Anthropic Claude 3. Она создана для высокой скорости отклика и низкой стоимости, что делает её идеальной для высокообъемной суммаризации, когда вам нужен предсказуемый результат без переплаты за вычислительную мощность более крупных моделей при выполнении простых задач по чтению.

Что вам понадобится

Перед написанием кода убедитесь, что у вас готово следующее:

  • Активный аккаунт AWS.
  • Установленный локально Python 3.9 или выше.
  • Настроенный AWS CLI с учетными данными, имеющими разрешение на вызов моделей Bedrock. Если вы еще не запускали aws configure, сделайте это сейчас. Если позже вы столкнетесь с ошибками прав доступа, вам, скорее всего, потребуется прикрепить соответствующие разрешения на вызов Bedrock к вашему IAM-пользователю или роли.
  • Доступ к моделям, включенный специально для Anthropic Claude 3 Haiku в консоли AWS Bedrock. AWS требует явного подтверждения доступа для каждого поставщика моделей перед тем, как вы сможете его использовать.

Шаг 1: Включите доступ к моделям

Bedrock не позволяет вызывать модели «из коробки». Сначала нужно переключить тумблер в консоли.

  1. Войдите в консоль управления AWS (AWS Management Console).
  2. Используйте строку поиска, чтобы найти Amazon Bedrock.
  3. В левой панели навигации выберите Model access.
  4. Нажмите Modify model access.
  5. Отметьте галочкой Anthropic (Claude 3 Haiku) и отправьте запрос.

Как только статус изменится на "Access granted", вы сможете вызывать модель через код.

Шаг 2: Настройте окружение

Чистое окружение Python позволяет изолировать зависимости и обеспечивать воспроизводимость. Откройте терминал и выполните следующие команды:

mkdir bedrock-summarizer && cd bedrock-summarizer
python3 -m venv venv
source venv/bin/activate
pip install boto3

Пользователям Windows следует заменить команду активации на venv\Scripts\activate. После завершения pip install boto3 у вас будет все необходимое для взаимодействия с AWS API.

Шаг 3: Напишите скрипт

Создайте файл с именем summarize.py. Цель состоит в том, чтобы прочитать документ с диска, передать его в Bedrock Converse API и вывести краткое резюме.

Ниже представлена полная рабочая реализация. Мы используем Converse API, так как он абстрагирует сырое форматирование JSON, которое ожидают разные поставщики моделей. Вы просто передаете список сообщений и настройки вывода (inference settings).

import boto3

def summarize_document(text: str) -> str:
    client = boto3.client("bedrock-runtime")
    
    model_id = "anthropic.claude-3-haiku-20240307-v1:0"
    
    messages = [
        {
            "role": "user",
            "content": [
                {
                    "text": (
                        "Provide a concise summary of the following document. "
                        "Focus on the main points and avoid unnecessary detail:\n\n"
                        f"{text}"
                    )
                }
            ]
        }
    ]
    
    response = client.converse(
        modelId=model_id,
        messages=messages,
        inferenceConfig={
            "temperature": 0.3,
            "maxTokens": 512
        }
    )
    
    summary = response["output"]["message"]["content"][0]["text"]
    return summary.strip()


if __name__ == "__main__":
    with open("document.txt", "r", encoding="utf-8") as f:
        document_text = f.read()
    
    result = summarize_document(document_text)
    print("\n--- Summary ---\n")
    print(result)

Несколько практических деталей, на которые стоит обратить внимание:

  • boto3.client("bedrock-runtime") обращается к эндпоинту runtime, который отвечает за инференс. Убедитесь, что ваш регион AWS в ~/.aws/config поддерживает Bedrock и что вы включили Haiku именно в этом регионе.
  • Model ID anthropic.claude-3-haiku-20240307-v1:0 — это точный идентификатор, который ожидает Bedrock. Скопируйте его в точности.
  • Установка Temperature на 0.3 делает вывод более обоснованным. Для суммаризации вам нужна последовательность и точность относительно исходного текста, а не творческие украшательства. Если вы поднимете температуру ближе к 1.0, модель начнет вольно обращаться с формулировками и иногда выдумывать детали.
  • Сам промпт составлен специфическим образом. Вместо того чтобы скармливать модели сырой текст с расплывчатым «summarize this», мы явно просим выделить основные тезисы и даем инструкцию пропускать «воду». Такая четкость отделяет бесполезный результат от того, что действительно можно использовать в работе.

Поместите любой текстовый файл, который хотите суммаризировать, в ту же директорию и назовите его document.txt.

Шаг 4: Запуск

С активированным виртуальным окружением выполните:

python summarize.py

Если ваши учетные данные и доступ к модели верны, вы увидите аккуратное резюме в терминале через несколько секунд. Если вы получите ошибку доступа, перепроверьте свои разрешения IAM и убедитесь, что включили Claude 3 Haiku в консоли.

Выходя за рамки скрипта

This pipeline is intentionally simple, but it is the foundation for real automation. Here is how you can extend it without adding bloat.

Batch processing. Swap the single file read for a loop over a directory. Drop fifty PDFs or text files into an input folder, iterate through them, and write the summaries to an output folder. If you want to ingest PDFs directly, you will need a preprocessing step with a library like PyPDF2 or pdfplumber to extract raw text before it hits Bedrock.

Chunking strategy. Very long documents may exceed the model’s context limit. When that happens, split the text into logical chunks by paragraph or section, summarize each chunk individually, and then pass the intermediate summaries back through the model for a final synthesis. This two-stage approach keeps you under token limits while preserving coverage of the full document.

Error handling. Production code should catch boto3.exceptions.ClientError specifically. AWS may throttle your requests if you call the API too aggressively. Wrap your converse call in a retry loop with exponential backoff, or use a library like tenacity to handle rate limits gracefully.

Prompt engineering. The difference between a mediocre summary and a useful one often comes down to the prompt. Ask for bullet points if you need scanability. Ask for a one-paragraph executive summary if the audience is senior leadership. You can even pass formatting constraints, such as "Limit the summary to three sentences" or "Return the output as JSON with keys for topic, key_points, and action_items."

The Real Takeaway

Moving from a chat playground to a working script is the inflection point where AI becomes infrastructure. Once this pipeline runs locally, you can lift it into an AWS Lambda function triggered by S3 uploads, schedule it on ECS Fargate, or hook it into an existing data workflow. The API call is the easy part. The engineering value comes from wrapping that call in logic that handles files, errors, and formatting so you never have to copy and paste text into a browser again.

For additional context and variations on this setup, see the original walkthrough on Dev.to. If you want to discuss AWS architectures, LLM pipelines, or prompt engineering with a community of builders, join the conversation over at [GyaanSetu AI on Telegram](https://t.me/GyaanSet