Web oyun alanları demolar için harikadır. Bir metin bloğu yapıştırırsınız, modelin düzgün bir özet oluşturmasını izlersiniz ve sekmeyi kapatırsınız. Ancak bu mühendislik değildir. Üretim ortamında çalışmak; API'ler, hata yönetimi ve siz uyurken çalışan kodlar demektir. Toplantı tutanaklarını, destek taleplerini veya araştırma makalelerini belirli bir program dahilinde işlemek istiyorsanız, bir veri hattına (pipeline) ihtiyacınız vardır.
Bu kılavuz, tam olarak bunu yapmanızı sağlar: Python, Python için AWS SDK (boto3) ve Amazon Bedrock kullanarak hafif ve otomatik bir belge özetleme betiği oluşturmak. Metin özetleme görevleri için hız ve maliyet açısından en ideal noktada bulunan Anthropic'in Claude 3 Haiku modelini kullanacağız.
Neden Bedrock ve Claude 3 Haiku?
Amazon Bedrock, temel modelleri tek bir AWS API seti aracılığıyla sunan yönetilen bir hizmettir. Harici uç noktaları bir araya getirmek ve ayrı faturalandırma ile güvenlik modelleriyle uğraşmak yerine, standart IAM kontrollerine sahip bir AWS uç noktasını çağırırsınız. Verileriniz AWS ortamınızda kalır.
Claude 3 Haiku, Anthropic'in Claude 3 ailesindeki en hafif modeldir. Yanıt verme hızı ve düşük maliyet için tasarlanmıştır; bu da onu, basit okuma görevlerinde daha büyük modellerin işlem gücü için fazla ödeme yapmadan öngörülebilir çıktılar almak istediğiniz yüksek hacimli özetleme işlemleri için ideal kılar.
İhtiyacınız Olanlar
Herhangi bir kod yazmadan önce aşağıdakilerin hazır olduğundan emin olun:
- Aktif bir AWS hesabı.
- Yerel olarak yüklü Python 3.9 veya üzeri.
- Bedrock modellerini çağırma iznine sahip kimlik bilgileriyle yapılandırılmış AWS CLI. Eğer henüz
aws configurekomutunu çalıştırmadıysanız, şimdi yapın. Daha sonra izin hatalarıyla karşılaşırsanız, muhtemelen IAM kullanıcınıza veya rolünüze uygun Bedrock çağırma (invocation) izinlerini eklemeniz gerekecektir. - AWS Bedrock konsolu içinde özellikle Anthropic Claude 3 Haiku için etkinleştirilmiş model erişimi. AWS, bir modeli çağırmadan önce her model sağlayıcısı için açıkça onay vermenizi gerektirir.
Adım 1: Model Erişimini Etkinleştirin
Bedrock, modelleri doğrudan kullanmanıza izin vermez. Önce konsoldan ilgili seçeneği etkinleştirmeniz gerekir.
- AWS Management Console'a giriş yapın.
- Arama çubuğunu kullanarak Amazon Bedrock'ı bulun.
- Sol navigasyon panelinde Model access seçeneğini belirleyin.
- Modify model access butonuna tıklayın.
- Anthropic (Claude 3 Haiku) kutucuğunu işaretleyin ve isteğinizi gönderin.
Durum "Access granted" olarak değiştiğinde, modeli kod üzerinden çağırmaya hazırsınız demektir.
Adım 2: Ortamınızı Kurun
Temiz bir Python ortamı, bağımlılıkları izole ve yeniden üretilebilir tutar. Terminalinizi açın ve şu komutları çalıştırın:
mkdir bedrock-summarizer && cd bedrock-summarizer
python3 -m venv venv
source venv/bin/activate
pip install boto3
Windows kullanıcıları, etkinleştirme komutunu venv\Scripts\activate ile değiştirmelidir. pip install boto3 işlemi tamamlandıktan sonra, AWS API'leri ile iletişim kurmak için ihtiyacınız olan her şeye sahip olacaksınız.
Adım 3: Betiği Yazın
summarize.py adında bir dosya oluşturun. Amaç, diskteki bir belgeyi okumak, onu Bedrock Converse API'sine iletmek ve kısa bir özet yazdırmaktır.
Aşağıda eksiksiz ve çalışan bir uygulama bulunmaktadır. Converse API'yi kullanıyoruz çünkü bu API, farklı model sağlayıcılarının beklediği ham JSON formatlamasını soyutlar. Siz sadece bir mesaj listesi ve çıkarım (inference) ayarlarını iletirsiniz.
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)
Burada vurgulanmaya değer birkaç pratik detay:
- boto3.client("bedrock-runtime"), çıkarımı (inference) yöneten çalışma zamanı (runtime) uç noktasını hedefler.
~/.aws/configdosyasındaki AWS bölgenizin Bedrock'ı desteklediğinden ve Haiku'yu aynı bölgede etkinleştirdiğinizden emin olun. - Model ID
anthropic.claude-3-haiku-20240307-v1:0, Bedrock'ın beklediği tam tanımlayıcıdır. Onu tam olarak kopyalayın. - Temperature değerinin 0.3 olarak ayarlanması çıktının gerçekçi kalmasını sağlar. Özetleme için yaratıcı süslemeler değil, tutarlılık ve kaynak metne sadakat istersiniz. Sıcaklığı (temperature) 1.0'a yaklaştırırsanız, model ifadeler konusunda özgür davranmaya başlar ve zaman zaman detaylar uydurabilir.
- Prompt'un kendisi spesifiktir. Modele belirsiz bir "bunu özetle" diyerek ham metin fırlatmak yerine, açıkça ana noktaları isteriz ve gereksiz ayrıntıları atlaması talimatını veririz. Bu tür bir netlik, kullanılamaz bir çıktıyı gerçekten kullanabileceğiniz bir şeyden ayırır.
Özetlemek istediğiniz herhangi bir metin dosyasını aynı dizine yerleştirin ve adını document.txt yapın.
Adım 4: Çalıştırın
Sanal ortamınız aktifken şu komutu çalıştırın:
python summarize.py
Kimlik bilgileriniz ve model erişiminiz doğruysa, birkaç saniye içinde terminalinizde düzgün bir özet görmelisiniz. Eğer bir erişim hatası alırsanız, IAM izinlerinizi tekrar kontrol edin ve konsolda Claude 3 Haiku'yu etkinleştirdiğinizden emin olun.
Betiğin Ötesine Geçmek
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
