AWS Bedrock ile Endüstriyel Verilerde Generative AI: Anomali Tespiti ve Tahmin Modelleri

Amazeng Teknik Ekip
10 dakika okuma
AWS BedrockGenerative AILLMClaudeAnomali TespitiAI ML

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

ÖzellikAWS BedrockOpenAI APIOllama (Local)
DeploymentServerless (AWS)Cloud (OpenAI)On-premise
Veri GüvenliğiAWS içinde3rd party%100 lokal
Model Seçimi10+ modelGPT serisiAçık kaynak LLM
Maliyet$0.001-0.08/1K token$0.0015-0.06/1K tokenSunucu 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

ModelInputOutputUse Case
Claude 3 Haiku$0.00025/1K$0.00125/1KBasit sınıflandırma
Claude 3 Sonnet$0.003/1K$0.015/1KKompleks analiz
Claude 3 Opus$0.015/1K$0.075/1KEn zor problemler
Llama 3 70B$0.00265/1K$0.0035/1KGenel 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.

İlgili Kaynaklar