AWS Bedrock ile Endüstriyel Verilerde Generative AI: Anomali Tespiti ve Tahmin Modelleri
Giriş
AWS Bedrock, Amazon'un fully-managed Generative AI servisidir. Claude (Anthropic), Llama (Meta), Titan (Amazon) gibi foundation modellere tek bir API ile erişim sağlar. Cloud & IoT Veri Toplama Çözümlerimiz kapsamında, Bedrock ile endüstriyel AI uygulamalarını inceliyoruz.
Bedrock vs Diğer AI Çözümleri
| Özellik | AWS Bedrock | OpenAI API | Ollama (Local) |
|---|---|---|---|
| Deployment | Serverless (AWS) | Cloud (OpenAI) | On-premise |
| Veri Güvenliği | AWS içinde | 3rd party | %100 lokal |
| Model Seçimi | 10+ model | GPT serisi | Açık kaynak LLM |
| Maliyet | $0.001-0.08/1K token | $0.0015-0.06/1K token | Sunucu maliyeti |
| Latency | <500ms | ~1s | <200ms (GPU) |
Endüstriyel Use Case'ler
1. Sensör Verisi Anomali Tespiti
ZMA Data Acquisition'dan gelen verilerde pattern tanıma:
import boto3
import json
bedrock = boto3.client('bedrock-runtime', region_name='us-east-1')
# Son 24 saatin sensör verileri
sensor_data = {
"timestamp": [...],
"temperature": [22.1, 22.3, 22.2, 45.8, 22.4, ...], # 45.8 anomali!
"pressure": [1.01, 1.02, 1.01, 1.02, 1.01, ...],
"vibration": [0.05, 0.06, 0.05, 0.15, 0.14, ...] # Artış var
}
prompt = f"""
Aşağıdaki endüstriyel sensör verilerini analiz et:
{json.dumps(sensor_data, indent=2)}
Görevin:
1. Anormal değerleri tespit et
2. Olası arıza tipi tahmini yap
3. Aciliyet seviyesi belirle (Düşük/Orta/Yüksek)
4. Bakım önerisi sun
JSON formatında yanıt ver.
"""
response = bedrock.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1000,
"messages": [
{"role": "user", "content": prompt}
]
})
)
result = json.loads(response['body'].read())
print(result['content'][0]['text'])
Claude Çıktısı:
{
"anomalies": [
{
"sensor": "temperature",
"timestamp": "2025-12-29 14:30:00",
"value": 45.8,
"expected_range": "20-25°C",
"severity": "HIGH",
"possible_cause": "Soğutma sistemi arızası veya sensör hatası"
},
{
"sensor": "vibration",
"trend": "increasing",
"severity": "MEDIUM",
"possible_cause": "Rulman aşınması başlangıcı"
}
],
"recommendations": [
"1. Sıcaklık sensorünü acilen kontrol et",
"2. Soğutma sistemini incele",
"3. Motor titreşim bakımını 1 hafta içinde planla"
],
"urgency": "HIGH"
}
2. Doğal Dil ile Veri Sorgulama
Operator: "Geçen hafta tank 3'ün doluluk oranı ortalama neydi?"
def natural_language_query(question, database_schema):
prompt = f"""
SQL veritabanı şeması:
{database_schema}
Kullanıcı sorusu: "{question}"
Bu soruyu yanıtlayan SQL sorgusunu yaz. Sadece SQL kodu döndür, açıklama ekleme.
"""
response = bedrock.invoke_model(
modelId='anthropic.claude-3-haiku-20240307-v1:0',
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 500,
"messages": [{"role": "user", "content": prompt}]
})
)
sql = json.loads(response['body'].read())['content'][0]['text']
return sql
schema = """
CREATE TABLE tank_data (
tank_id INT,
timestamp DATETIME,
weight_kg FLOAT,
capacity_kg FLOAT
);
"""
sql = natural_language_query("Geçen hafta tank 3'ün doluluk oranı ortalama neydi?", schema)
print(sql)
Claude Çıktısı:
SELECT AVG((weight_kg / capacity_kg) * 100) as avg_fill_percentage
FROM tank_data
WHERE tank_id = 3
AND timestamp >= DATE_SUB(NOW(), INTERVAL 7 DAY);
3. Bakım Raporu Generation
maintenance_data = {
"equipment": "Motor 12B",
"last_maintenance": "2025-11-15",
"sensor_readings": {
"temperature": 75,
"vibration": 0.12,
"runtime_hours": 2400
},
"historical_failures": [
{"date": "2024-08-20", "issue": "Rulman değişimi"},
{"date": "2023-12-10", "issue": "Fan kayışı"}
]
}
prompt = f"""
Aşağıdaki ekipman için bakım raporu oluştur:
{json.dumps(maintenance_data, indent=2)}
Rapor formatı:
- Mevcut durum özeti
- Risk analizi
- Önerilen bakım işlemleri
- Tahmini maliyet ve süre
Profesyonel, teknik ama anlaşılır bir dil kullan.
"""
response = bedrock.invoke_model(...)
report = json.loads(response['body'].read())['content'][0]['text']
# PDF'e çevir ve email gönder
RAG (Retrieval Augmented Generation)
Fabrika operasyon el kitabını AI'a öğretme:
1. Doküman Embedding
from langchain.embeddings import BedrockEmbeddings
from langchain.vectorstores import FAISS
from langchain.document_loaders import PyPDFLoader
# PDF doküman yükle
loader = PyPDFLoader("motor_operation_manual.pdf")
documents = loader.load_and_split()
# Bedrock Titan embeddings
embeddings = BedrockEmbeddings(
model_id="amazon.titan-embed-text-v1",
client=bedrock
)
# Vector store oluştur
vectorstore = FAISS.from_documents(documents, embeddings)
vectorstore.save_local("faiss_index")
2. RAG Query
from langchain.chains import RetrievalQA
from langchain.llms import Bedrock
question = "Motor titreşimi 0.15 mm/s'yi aştığında ne yapmalıyım?"
# Relevent dokümanları bul
docs = vectorstore.similarity_search(question, k=3)
# Bedrock LLM
llm = Bedrock(model_id="anthropic.claude-3-sonnet-20240229-v1:0", client=bedrock)
# RAG chain
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
answer = qa_chain.run(question)
print(answer)
Claude Yanıtı (Doküman bazlı):
Operasyon el kitabı sayfa 47'ye göre:
Motor titreşimi 0.15 mm/s'yi aşarsa:
1. Motoru ACĐL DURDURUN
2. Rulman sıcaklığını kontrol edin (max 80°C)
3. Motor montaj vidallarını kontrol edin
4. Bakım ekibini çağırın (Tel: 5551234567)
NOT: 0.20 mm/s üzeri KRĐTĐK seviye, motor hasarı riski vardır.
Fine-Tuning (Model Eğitimi)
Kendi endüstriyel domain bilginizle modeli özelleştirme:
# Training data (JSON Lines format)
training_data = [
{
"prompt": "Loadcell drift nedir?",
"completion": "Loadcell drift, zaman içinde sensörün sıfır noktasının kayması nedeniyle oluşan ölçüm hatasıdır."
},
{
"prompt": "GDT transmitter kalibrasyonu nasıl yapılır?",
"completion": "1. Bilinen referans ağırlık kullan\n2. Modbus register 100'e kalibrasyon değeri yaz\n3. Coil 2'yi aktive et"
},
# ... 1000+ örnek
]
# Bedrock fine-tuning job
bedrock.create_model_customization_job(
jobName="gdt-domain-model",
customModelName="gdt-expert-claude",
baseModelId="anthropic.claude-3-haiku-20240307-v1:0",
trainingDataConfig={
"s3Uri": "s3://mybucket/training_data.jsonl"
},
outputDataConfig={
"s3Uri": "s3://mybucket/output/"
}
)
Guardrails (Güvenlik Korumaları)
AI yanıtlarında istenmeyen içeriği filtreleme:
bedrock.create_guardrail(
name="IndustrialSafetyGuardrail",
contentPolicyConfig={
"filtersConfig": [
{
"type": "VIOLENCE",
"inputStrength": "MEDIUM",
"outputStrength": "HIGH"
},
{
"type": "HATE",
"inputStrength": "HIGH",
"outputStrength": "HIGH"
}
]
},
topicPolicyConfig={
"topicsConfig": [
{
"name": "Financial Data",
"definition": "Şirket finansal verileri",
"type": "DENY"
}
]
}
)
Maliyet Optimizasyonu
Model Seçimi
| Model | Input | Output | Use Case |
|---|---|---|---|
| Claude 3 Haiku | $0.00025/1K | $0.00125/1K | Basit sınıflandırma |
| Claude 3 Sonnet | $0.003/1K | $0.015/1K | Kompleks analiz |
| Claude 3 Opus | $0.015/1K | $0.075/1K | En zor problemler |
| Llama 3 70B | $0.00265/1K | $0.0035/1K | Genel amaçlı |
Batch Processing
# Kötü: Her sensör okumasında API call
for reading in sensor_readings:
bedrock.invoke_model(...) # 1000 call = $3
# İyi: Batch processing
batch_prompt = f"Şu 1000 sensör okumasını analiz et:\n{readings}"
bedrock.invoke_model(...) # 1 call = $0.05
Gerçek Dünya Örneği
Bir üretim tesisinde Bedrock kullanımı:
- 300 sensör, 5 saniye polling
- Daily anomaly detection raporu
- Chat interface operatörler için
Aylık maliyet:
- API calls: ~500K tokens/ay × $0.003 = $1.50
- Fine-tuned model: +$2/ay
- Toplam: ~$3.50/ay
Alternatif (Manuel analiz): 1 data scientist × $5000/ay → %99.93 tasarruf
Sonuç
AWS Bedrock, endüstriyel AI uygulamalar için güçlü ve maliyet-efektif bir çözümdür. Cloud & IoT Veri Toplama Çözümlerimiz ile tam entegrasyon.