2026-02-18Tobias Schmidt

Bedrock ve OpenAI ile Serverless Sohbet Uygulaması Geliştirme

B

Bağlamsal not entegrasyonuna sahip bir serverless sohbet uygulaması geliştirmek, modern uygulama geliştirme süreçlerinde önemli bir adımdır. Bu yazıda, Amazon Bedrock ve OpenAI API kullanarak, SST (Serverless Stack) çerçevesi ile AWS üzerinde nasıl ölçeklenebilir bir uygulama geliştireceğimizi inceleyeceğiz.

Proje Genel Bakışı

Bu proje, sadece gerçek zamanlı iletişime izin vermekle kalmayıp, aynı zamanda konuşmaları zenginleştirmek için bağlamsal notları kullanan bir sohbet uygulaması oluşturmayı içerir. Yani, oluşturduğunuz ve sakladığınız notlar, sohbetinize bir bağlam (context) olarak iletilebilir. Model, daha önce saklanan bilgilere başvurarak konuşmaları daha faydalı hale getirebilir.

Kullanılan Teknolojiler ve Mimari

Uygulamamız tamamen serverless ve kullandıkça öde (pay-per-use) modeline dayanmaktadır:

  • SST (Serverless Stack): Uygulamayı geliştirmek ve AWS'e dağıtmak için.
  • Next.js: Frontend arayüzü için.
  • AWS Lambda: Backend mantığı için.
  • Amazon DynamoDB: Veri saklama (notlar ve sohbet geçmişi) için.
  • Amazon Bedrock: Yapay zeka modellerine (örneğin Anthropic Claude veya Amazon Titan) erişim için.
  • OpenAI API: Alternatif AI modelleri için.

Mimari Şeması

Uygulama, kullanıcı isteklerini API Gateway üzerinden Lambda fonksiyonlarına yönlendirir. Lambda fonksiyonları, DynamoDB'den bağlam verilerini çeker ve Bedrock veya OpenAI API'ye göndererek yanıt üretir.

Adım 1: Başlangıç ve Önkoşullar

Başlamadan önce aşağıdakilerin kurulu olduğundan emin olun:

  • Node.js: En son LTS sürümü.
  • AWS CLI: Yapılandırılmış bir AWS hesabı.

SST projesini başlatmak için terminalinizde şu komutu çalıştırın:

npx create-sst@latest my-chat-app
cd my-chat-app
npm install

Adım 2: Altyapıyı Tanımlama (Infrastructure as Code)

SST, altyapınızı TypeScript ile tanımlamanıza olanak tanır. sst.config.ts dosyasında, Lambda fonksiyonlarını, DynamoDB tablolarını ve Next.js sitesini tanımlayabiliriz.

import { SSTConfig } from "sst";
import { NextjsSite, Table, Function } from "sst/constructs";

export default {
  config(_input) {
    return {
      name: "my-chat-app",
      region: "us-east-1",
    };
  },
  stacks(app) {
    app.stack(function Site({ stack }) {
      const table = new Table(stack, "Notes", {
        fields: {
          noteId: "string",
          content: "string",
        },
        primaryIndex: { partitionKey: "noteId" },
      });

      const site = new NextjsSite(stack, "site", {
        bind: [table],
      });

      stack.addOutputs({
        SiteUrl: site.url,
      });
    });
  },
} satisfies SSTConfig;

Adım 3: Backend Mantığı ve Bedrock Entegrasyonu

Backend tarafında, kullanıcıdan gelen mesajı ve ilgili notları alıp Bedrock API'sine gönderecek bir Lambda fonksiyonu oluşturuyoruz.

import { BedrockRuntimeClient, InvokeModelCommand } from "@aws-sdk/client-bedrock-runtime";

const client = new BedrockRuntimeClient({ region: "us-east-1" });

export const handler = async (event) => {
  const { message, context } = JSON.parse(event.body);

  const command = new InvokeModelCommand({
    modelId: "anthropic.claude-v2",
    contentType: "application/json",
    accept: "application/json",
    body: JSON.stringify({
      prompt: `Human: Context: ${context}

Question: ${message}

Assistant:`,
      max_tokens_to_sample: 300,
    }),
  });

  const response = await client.send(command);
  const result = JSON.parse(new TextDecoder().decode(response.body));
  
  return {
    statusCode: 200,
    body: JSON.stringify({ reply: result.completion }),
  };
};

Not: Bu kısım basitleştirilmiştir. Gerçek uygulamada hata yönetimi ve güvenlik kontrolleri eklemelisiniz.

Adım 4: Frontend Geliştirme (Next.js)

Next.js tarafında, kullanıcı arayüzünü oluşturarak backend API'mize istek atarız. React bileşenleri içinde fetch kullanarak Lambda fonksiyonunu çağırabilir ve yanıtı ekranda gösterebiliriz.

Sıkça Sorulan Sorular (SSS)

1. Neden SST kullanmalıyım?

SST, AWS CDK üzerine inşa edilmiş, serverless uygulamalar geliştirmeyi ve yerel ortamda test etmeyi (Live Lambda Development) son derece kolaylaştıran bir çerçevedir.

2. Bedrock ve OpenAI arasındaki fark nedir?

Bedrock, AWS üzerinde barındırılan ve birden fazla modele (Claude, Titan, Llama 2 vb.) tek bir API üzerinden erişim sağlayan bir servistir. OpenAI API ise doğrudan OpenAI modellerine (GPT-4 vb.) erişim sağlar.

3. Bu mimarinin maliyeti nedir?

Tamamen serverless olduğu için, sunucu maliyeti yoktur. Yalnızca Lambda çalışma süresi, DynamoDB okuma/yazma işlemleri ve Bedrock/OpenAI token kullanımı kadar ödeme yaparsınız. Düşük trafikli uygulamalar için maliyet genellikle çok düşüktür.

Daha fazla bilgi için AWS Danışmanlığı ve Kubernetes Danışmanlığı hizmetlerimize göz atabilirsiniz. Ayrıca genel teknoloji blogumuz için Ana Sayfa'yı ziyaret edebilirsiniz.

Kaynak / Source: https://awsfundamentals.com/blog/amazon-bedrock-the-openai-api-and-sst