Bağlam Mühendisliği
Giriş
Bağlam mühendisliği, 2025 yılında yapay zeka (AI) alanında önemli bir yer edinmiş, prompt mühendisliğinden evrilen yeni bir disiplindir. Prompt mühendisliği, büyük dil modelleri (LLM’ler) için belirli talimatlar oluşturmaya odaklanırken, bağlam mühendisliği, bir LLM’nin görevleri güvenilir ve etkili bir şekilde gerçekleştirmesini sağlamak için tüm bilgi ekosistemini tasarlamayı ve yönetmeyi içerir. Bu rapor, bağlam mühendisliğinin tanımı, önemi, teknikleri ve uygulamalarını, son sektör tartışmaları ve teknik kaynaklardan elde edilen bilgiler ışığında incelemektedir.
Bağlam Mühendisliği Nedir?
Bağlam mühendisliği, Andrej Karpathy tarafından “bağlam penceresini bir sonraki adım için doğru bilgilerle doldurmanın ince sanatı ve bilimi” olarak tanımlanmıştır. Tek bir prompt oluşturmanın ötesine geçerek, talimatlar, hafıza, harici veriler ve araçlar gibi bir LLM’nin işlediği tüm girdilerin stratejik bir şekilde düzenlenmesini kapsar. Shopify CEO’su Tobi Lütke, 19 Haziran 2025’te geniş yankı uyandıran bir paylaşımda, bunu “görevin LLM tarafından çözülebilir hale getirilmesi için tüm bağlamı sağlama sanatı” olarak nitelendirmiştir.
Prompt Mühendisliğinden Temel Farklar
- Kapsam: Prompt mühendisliği, tek bir talimat veya sorgu yazımına odaklanır (örneğin, “Naval gibi bir tweet yaz”). Bağlam mühendisliği ise, LLM’nin çalıştığı tüm “zihinsel dünyayı” tasarlar; bu, hafıza, alınan veriler ve araç çıktılarını içerir.
- Sistematik Yaklaşım: Prompt mühendisliği genellikle deneme-yanılma yoluyla ayarlamalar içerirken, bağlam mühendisliği yazılım mimarisine benzer şekilde tekrarlanabilir, ölçeklenebilir sistemler üzerine odaklanır.
- Sonuç: Prompt mühendisliği tek seferlik görevler veya yaratıcı çıktılar için uygundurken, bağlam mühendisliği uzun süreli iş akışlarını, çok adımlı konuşmaları ve üretim düzeyinde yapay zeka sistemlerini destekler.
Bağlam Mühendisliği Neden Önemli?
ChatGPT, Claude ve Gemini gibi LLM’ler daha yetkin hale geldikçe, başarısızlıkların çoğu modelin sınırlamalarından değil, yetersiz veya kötü yapılandırılmış bağlamdan kaynaklanmaktadır. Bağlam mühendisliği bunu şu yollarla ele alır:
- Doğruluğu Artırma: İlgili, yüksek kaliteli bağlam sağlamak, kesin ve güvenilir çıktılar sağlar.
- Başarısızlıkları Azaltma: Ajanların çoğu başarısızlığı, model başarısızlığı değil, bağlam başarısızlığıdır; model, etkili bir şekilde performans göstermek için gerekli bilgiye sahip değildir.
- Ölçeklenebilirliği Sağlama: Bağlam mühendisliği, karmaşık, çok adımlı iş akışlarını ve ajan sistemlerini destekler, bu da kurumsal uygulamalar için vazgeçilmezdir.
- Kişiselleştirmeyi Geliştirme: Konuşma geçmişi, kullanıcı tercihleri ve harici verileri yöneterek, bağlam mühendisliği kişiselleştirilmiş yapay zeka deneyimleri yaratır.
Bağlam Mühendisliğinin Temel Bileşenleri
Bağlam mühendisliği, LLM’nin sınırlı “çalışma belleği” olan bağlam penceresini optimize etmek için birden fazla bilgi türünü yönetmeyi içerir. Ana bileşenler şunlardır:
- Talimatlar/Sistem Promptları: LLM’nin davranışını tanımlayan açık, yapılandırılmış yönergeler, genellikle kurallar veya örnekler içerir.
- Konuşma Geçmişi ve Hafıza: Geçmiş etkileşimleri takip ederek tutarlılığı sağlar; kısa vadeli (oturum bazlı) veya uzun vadeli (oturumlar arası) hafıza modülleri kullanılır.
- Alınan Bilgiler (RAG): Belgeler, veritabanları veya API’lerden alınan harici veriler, Alım Artırılmış Üretim (RAG) yoluyla güncel bilgi sağlamak için kullanılır.
- Araç Çıktıları: Arama API’leri veya kod yürütme gibi harici araçlardan elde edilen sonuçlar, LLM’nin yeteneklerini artırmak için bağlama entegre edilir.
- Yapılandırılmış Çıktılar: LLM’nin yanıt formatının (örneğin, JSON) tanımlanması, tutarlılık ve kullanılabilirlik sağlar.
Bağlam Mühendisliği Teknikleri
Bağlam mühendisliği, LLM’nin bağlam penceresinin sınırlı kapasitesini (örneğin, 8k, 32k veya 128k token) yönetmek ve performansı optimize etmek için çeşitli stratejiler kullanır. Temel teknikler şunlardır:
1. Alım Artırılmış Üretim (RAG)
RAG, statik LLM bilgisini, vektör veritabanları (örneğin, Pinecone, Weaviate) veya bilgi tabanlarından dinamik alımla birleştirir. Belgeler parçalara ayrılır, gömülür ve sorguya semantik benzerlik temelinde alınır, ardından prompt ile birleştirilir. Gelişmiş “ajan RAG”, planlama, araç kullanımı ve yansıtma ile çok adımlı döngüleri içerir.
2. Hafıza Yönetimi
- Kısa Vadeli Hafıza: Oturum içinde konuşma geçmişini tutar, çok adımlı etkileşimlerde tutarlılık sağlar.
- Uzun Vadeli Hafıza: Kullanıcı tercihlerini veya geçmiş etkileşimleri oturumlar arasında depolar, alımlar için gömüler veya bilgi grafikleri kullanır.
- Yansıtma: Reflexion gibi teknikler, ajanların kendi oluşturdukları hafızaları üretip yeniden kullanmalarına olanak tanır, zamanla performansı artırır.
3. Bağlam Seçimi ve Budama
- Hedefli Alım: Not defterlerinden veya çalışma zamanı durumundan yalnızca ilgili bilgileri seçerek gürültüyü azaltır.
- Bağlam Budama: Eski veya çelişkili bilgileri kaldırarak hataları önler; bir çalışmada, bilgilerin dönüşler arasında parçalanması performansı %39 düşürmüştür.
- Bağlam Özetleme: Token ağırlıklı etkileşimleri, temel detayları koruyarak yoğunlaştırır; Claude Code’un “otomatik sıkıştırma” özelliği buna örnektir.
4. Araç Yönetimi
Ajanlar genellikle arama API’leri veya kod yürütme ortamları gibi araçlar kullanır, ancak çok fazla araç kafa karışıklığına yol açabilir. Araç açıklamalarına RAG uygulamak, seçim doğruluğunu üç katına çıkarabilir. Kum havuzları, token ağırlıklı çıktıları izole ederek yalnızca ilgili sonuçları LLM’ye geri aktarır.
5. Çok Ajanlı Mimariler
Karmaşık görevlerde, çok ajanlı sistemler bağlamı alt görevlere böler, her biri uzmanlaşmış alt görevleri üstlenir. Ancak zayıf bağlam paylaşımı, tutarsız sonuçlara yol açabilir; örneğin, Flappy Bird klonunda alt ajanların uyumsuz bileşenler oluşturması gibi. Etkili bağlam mühendisliği, ajanlar arasında paylaşılan bağlamı sağlar.
6. Token Optimizasyonu
Sabit bağlam pencereleriyle, mühendisler bilgi yoğunluğuna öncelik vermelidir. Teknikler şunlardır:
- Parçalama ve Özetleme: Büyük belgeleri parçalara ayırma veya token sınırlarına uyması için özetleme.
- Yenilik Önyargısı Yönetimi: Kritik bilgileri tekrarlayarak veya sabitleyerek “ortada kaybolma” sorunlarını önleme.
- Yapılandırılmış Formatlar: Daha az tokenla daha fazla bilgi paketlemek için özel işaretleme veya JSON kullanma.
Bağlam Mühendisliğinin Uygulamaları
Bağlam mühendisliği, güvenilir, ölçeklenebilir ve kişiselleştirilmiş sistemler sağlayarak sektörlerde yapay zeka uygulamalarını dönüştürmektedir. Örnekler:
- Kurumsal Yapay Zeka Asistanları: Çok ajanlı RAG sistemleri, Confluence, Jira ve CRM’lerden gelen verileri birleştirerek birleşik yanıtlar sağlar.
- Kodlama Asistanları: Claude Code ve Cursor gibi araçlar, tüm kod tabanlarını anlamak, logları ayrıştırmak ve kodlama stilini sürdürmek için bağlam mühendisliği kullanır.
- Eğitim Teknolojisi: Praktika AI gibi yapay zeka öğretmenleri, öğrenici profillerini ve ilerlemelerini izleyerek kişiselleştirilmiş dersler sunar.
- Sağlık: Tıbbi yapay zeka asistanları, hasta kayıtları ve araştırmalara dayalı doğru, gizliliğe duyarlı yanıtlar sağlamak için yapılandırılmış bağlam kullanır.
- E-ticaret ve Finans: Derin bağlam, kişiselleştirilmiş öneriler ve gerçek zamanlı veri işleme sağlar.
Zorluklar ve Dikkat Edilmesi Gerekenler
- Bağlam Penceresi Sınırlamaları: Milyon tokenluk pencereler bile olsa, daha fazla veri doldurmak verimsizdir. Mühendisler, alaka düzeyi ve tutarlılığa öncelik vermelidir.
- Model Kafa Karışıklığı: Çok fazla araç veya kötü formatlanmış bağlam, hatalara yol açabilir.
- Gizlilik ve Güvenlik: ChatGPT’nin konum verilerini görüntülere enjekte etmesi gibi beklenmedik hafıza alımları, kullanıcı güvenini zedeleyebilir.
- Hata Ayıklama: Bağlam mühendisliği, tam bağlam penceresini ve token akışını incelemeyi gerektirir; bu, prompt mühendisliğinin basit yeniden yazımından farklıdır.
Bağlam Mühendisliğinin Geleceği
Bağlam mühendisliği, Tobi Lütke ve Andrej Karpathy gibi sektör liderlerinin vurguladığı üzere, modern yapay zeka sistem tasarımının temeli olmaya hazırlanıyor. Yapay zeka ajanları geliştikçe, Anthropic’in Model Bağlam Protokolü, LangChain ve LlamaIndex gibi araçlar bağlam yönetimini standartlaştırıyor. Disiplin, ad-hoc prompt ayarlamasından sistematik orkestrasyona geçiş yaparak, yapay zekanın karmaşık, gerçek dünya görevlerini benzersiz bir güvenilirlikle ele almasını sağlıyor.
Örnek Çözüm: E-ticaret Platformunda Kişiselleştirilmiş Ürün Öneri Sistemi
Senaryo
Bir e-ticaret platformu, kullanıcılarına alışveriş alışkanlıklarına, geçmiş satın alımlarına ve gerçek zamanlı davranışlarına dayalı olarak kişiselleştirilmiş ürün önerileri sunmak istiyor. Mevcut sistem, statik kurallara dayalı öneriler üretiyor ve kullanıcıların dinamik ihtiyaçlarına yeterince yanıt veremiyor. Bağlam mühendisliği kullanarak, bir LLM tabanlı asistanın (örneğin, Grok 3) daha doğru, bağlama duyarlı öneriler sunmasını sağlayacağız.
Amaç
- Kullanıcının geçmiş alışveriş verilerini, gerçek zamanlı tarama davranışlarını ve ürün kataloğunu entegre ederek kişiselleştirilmiş öneriler sunmak.
- LLM’nin bağlam penceresini optimize ederek hızlı, doğru ve tutarlı yanıtlar sağlamak.
- Kullanıcı gizliliğini korurken, yalnızca ilgili verilerin bağlama dahil edilmesini sağlamak.
Çözüm Tasarımı
1. Sistem Mimarisi
Bağlam mühendisliği odaklı sistem şu bileşenlerden oluşacak:
- LLM: Grok 3, öneri oluşturma ve kullanıcı etkileşimlerini işlemek için kullanılacak.
- Veri Kaynakları:
- Kullanıcı profili (uzun vadeli hafıza): Geçmiş satın alımlar, favoriler, demografik bilgiler.
- Gerçek zamanlı tarama verileri (kısa vadeli hafıza): Mevcut oturumdaki tıklamalar, sepet içeriği, arama sorguları.
- Ürün kataloğu: Vektör veritabanında saklanan ürün açıklamaları, kategoriler ve stok durumu.
- Araçlar:
- Arama motoru API’si: Ürün kataloğundan ilgili ürünleri almak için.
- Öneri motoru API’si: İlk önerileri oluşturmak için mevcut kural tabanlı sistemi destekler.
- Bağlam Yöneticisi: Tüm verileri birleştirir, bağlam penceresini optimize eder ve LLM’ye gönderir.
2. Bağlam Mühendisliği Uygulaması
a) Sistem Promptu
LLM’ye net bir rol ve yönergeler verilir:
Sen bir e-ticaret asistanısın. Görevin, kullanıcıya geçmiş satın alımları, tarama davranışları ve ürün kataloğuna dayalı olarak kişiselleştirilmiş ürün önerileri sunmaktır. Yanıtlarını kısa, kullanıcı dostu ve JSON formatında sun. Öneriler, kullanıcının ilgi alanlarına uygun olmalı ve stokta olan ürünleri içermeli. Gizliliğe saygı göster; yalnızca sağlanan verileri kullan.
b) Hafıza Yönetimi
- Kısa Vadeli Hafıza: Kullanıcının mevcut oturumdaki davranışları (örneğin, “kırmızı spor ayakkabı” araması, sepetine bir tişört eklemesi) bir JSON nesnesinde saklanır:
{ "session_id": "12345", "current_search": "kırmızı spor ayakkabı", "cart": ["beyaz tişört"], "clicks": ["nike koşu ayakkabısı", "adidas tişört"] }
- Uzun Vadeli Hafıza: Kullanıcının geçmiş satın alımları ve tercihleri, bir vektör veritabanında (örneğin, Pinecone) saklanır. Örneğin:
{ "user_id": "user789", "past_purchases": ["mavi kot pantolon", "siyah sırt çantası"], "preferences": ["casual giyim", "sneaker"] }
c) Retrieval-Augmented Generation (RAG)
- Kullanıcının arama sorgusu ve tarama verileri, ürün kataloğundan ilgili ürünleri almak için vektör aramasına dönüştürülür. Örneğin, “kırmızı spor ayakkabı” sorgusu için:
- Vektör veritabanı, “kırmızı”, “spor ayakkabı” ve kullanıcı tercihleriyle (örneğin, “casual giyim”) eşleşen ürünleri döndürür.
- Alınan ürünler, stok durumu ve fiyat gibi metadata ile birlikte bağlama eklenir:
[ {"id": "prod1", "name": "Nike Air Max Kırmızı", "category": "sneaker", "price": 1200, "stock": true}, {"id": "prod2", "name": "Adidas Ultraboost Kırmızı", "category": "sneaker", "price": 1500, "stock": true} ]
d) Araç Entegrasyonu
- Mevcut öneri motoru API’si, kullanıcı verilerine dayalı ön öneriler üretir. Bu çıktılar, RAG ile alınan ürünlerle birleştirilir.
- Arama motoru API’si, stok durumu veya yeni ürün lansmanları gibi gerçek zamanlı verileri çeker.
- Bağlam yöneticisi, araç çıktılarını özetler ve yalnızca en ilgili bilgileri LLM’ye aktarır:
{ "tool_output": { "recommendation_engine": ["Nike Air Max", "Puma Sneaker"], "search_api": ["Yeni kırmızı sneaker koleksiyonu stokta"] } }
e) Token Optimizasyonu
- Bağlam penceresi (örneğin, 32k token) sınırlı olduğundan, veri özetlenir:
- Ürün açıklamaları, yalnızca ad, kategori, fiyat ve stok durumu gibi temel alanlara indirgenir.
- Konuşma geçmişi, son 3 etkileşime sıkıştırılır.
- Kritik bilgiler (örneğin, kullanıcı aramasındaki “kırmızı” anahtar kelimesi) tekrarlanarak “ortada kaybolma” sorunu önlenir.
- Örnek bağlam (yaklaşık 500 token):
{ "system_prompt": "Kullanıcıya kişiselleştirilmiş ürün ALEVI sun. Yanıt JSON formatında olmalı.", "user_data": { "current_search": "kırmızı spor ayakkabı", "past_purchases": ["mavi kot pantolon"], "preferences": ["casual giyim"] }, "retrieved_products": [ {"id": "prod1", "name": "Nike Air Max Kırmızı", "price": 1200, "stock": true}, {"id": "prod2", "name": "Adidas Ultraboost Kırmızı", "price": 1500, "stock": true} ], "tool_output": { "recommendation_engine": ["Nike Air Max"], "search_api": ["Kırmızı sneaker stokta"] } }
f) Yapılandırılmış Çıktı
LLM, önerileri JSON formatında üretir:
{
"recommendations": [
{
"product_id": "prod1",
"name": "Nike Air Max Kırmızı",
"price": 1200,
"reason": "Kırmızı spor ayakkabı aramanıza ve casual giyim tercihinize uygun."
},
{
"product_id": "prod2",
"name": "Adidas Ultraboost Kırmızı",
"price": 1500,
"reason": "Yüksek performanslı sneaker, son aramanızla uyumlu."
}
]
}
3. İş Akışı
- Kullanıcı Etkileşimi: Kullanıcı “kırmızı spor ayakkabı” arar ve sepetine bir tişört ekler.
- Bağlam Toplama:
- Kısa vadeli hafıza, tarama verilerini (arama, tıklamalar, sepet) kaydeder.
- Uzun vadeli hafıza, kullanıcı profilinden geçmiş satın alımları ve tercihleri çeker.
- RAG, ürün kataloğundan ilgili ürünleri alır.
- Araçlar, öneri motoru ve arama API’sinden ek veriler sağlar.
- Bağlam Optimizasyonu: Bağlam yöneticisi, verileri özetler ve token sınırlarına uygun hale getirir.
- LLM İşleme: Grok 3, bağlamı işler ve JSON formatında öneriler üretir.
- Yanıt Sunumu: Öneriler, kullanıcıya web arayüzünde veya mobil uygulamada gösterilir.
- Geri Bildirim Döngüsü: Kullanıcı, önerilerden birini seçerse, bu veri uzun vadeli hafızaya eklenir ve gelecekteki öneriler için kullanılır.
4. Avantajlar
- Kişiselleştirme: Kullanıcı verileri ve gerçek zamanlı davranışlar, önerilerin alaka düzeyini artırır.
- Ölçeklenebilirlik: RAG ve araç entegrasyonu, büyük ürün kataloglarıyla çalışmayı sağlar.
- Verimlilik: Token optimizasyonu, bağlam penceresini etkili kullanır ve hızlı yanıtlar sağlar.
- Gizlilik: Yalnızca ilgili veriler kullanılır ve bağlam budama ile gereksiz bilgiler hariç tutulur.
5. Zorluklar ve Çözümler
- Zorluk: Çok fazla ürün verisi, bağlam penceresini doldurabilir.
- Çözüm: RAG ile yalnızca en yüksek eşleşme skoruna sahip 5-10 ürünü dahil edin.
- Zorluk: Kullanıcı davranışlarındaki ani değişiklikler (örneğin, hediye alışverişi) önerileri bozabilir.
- Çözüm: Kullanıcıya niyetini doğrulatan bir mini prompt (örneğin, “Bu ürünü kendiniz için mi, hediye olarak mı arıyorsunuz?”).
- Zorluk: API hataları veya eksik stok verileri.
- Çözüm: Hata kontrol mekanizmaları ekleyin; eksik veriler için LLM, varsayılan önerilere geçer.
6. Kullanılan Teknolojiler
- LLM: OpenAI (Gpt4).
- Vektör Veritabanı: Pinecone veya Weaviate.
- Araçlar: LangChain (RAG ve bağlam yönetimi için), mevcut öneri motoru API’si.
- Programlama: Python, JSON formatlama ve API entegrasyonları için.
OpenAI ile Örnek Uygulama
OpenAI’nin API’sini (örneğin, gpt-4
veya benzer bir model) kullanarak e-ticaret platformu için kişiselleştirilmiş ürün öneri sistemini uygulayan bir Python kodu örneği sunuyorum. Bu kod, önceki bağlam mühendisliği prensiplerini (RAG, hafıza yönetimi, token optimizasyonu, araç entegrasyonu) koruyor ve OpenAI’nin openai
kütüphanesi ile entegre oluyor. Grok 3 yerine OpenAI’nin modelini kullanıyoruz, ancak sistem mimarisi ve bağlam mühendisliği yaklaşımı aynı kalıyor.
Ön Koşullar
- Kütüphaneler:
openai
,pinecone-client
(vektör veritabanı için),requests
(API çağrıları için),json
(yapılandırılmış veri yönetimi için). - Gereksinimler: Python 3.8+, OpenAI API anahtarı, Pinecone API anahtarı, bir öneri motoru API’si (veya simüle edilmiş bir hizmet).
- Not: OpenAI API’sini kullanmak için bir API anahtarına ihtiyacınız var. Gerçek uygulamada,
openai
kütüphanesini kullanarakgpt-4
veya başka bir modeli çağıracağız.
Kod
import json
import requests
from typing import Dict, List
from pinecone import Pinecone, ServerlessSpec
from openai import OpenAI
# OpenAI API istemcisi
openai_client = OpenAI(api_key="your-openai-api-key") # OpenAI API anahtarınızı buraya ekleyin
# OpenAI API çağrısı
def call_openai_api(context: Dict) -> Dict:
"""
OpenAI API'sini çağırarak öneriler üretir.
:param context: Bağlam mühendisliği ile oluşturulan bağlam
:return: JSON formatında öneriler
"""
context_str = json.dumps(context, ensure_ascii=False)
response = openai_client.chat.completions.create(
model="gpt-4", # veya başka bir model, örneğin "gpt-4-turbo"
messages=[
{"role": "system", "content": context["system_prompt"]},
{"role": "user", "content": f"Bağlam: {context_str}\nLütfen JSON formatında ürün önerileri üret."}
],
response_format={"type": "json_object"}, # JSON çıktısı için
max_tokens=500, # Yanıt için token sınırı
temperature=0.7 # Yaratıcılık seviyesi
)
# Yanıtı JSON olarak döndür
return json.loads(response.choices[0].message.content)
# Bağlam Mühendisliği Sınıfı
class ContextEngineer:
def __init__(self, pinecone_api_key: str, recommendation_api_url: str):
"""
Bağlam mühendisliği yöneticisi.
:param pinecone_api_key: Pinecone vektör veritabanı için API anahtarı
:param recommendation_api_url: Mevcut öneri motoru API'si
"""
self.pc = Pinecone(api_key=pinecone_api_key)
self.index_name = "product-catalog"
self.recommendation_api_url = recommendation_api_url
self.system_prompt = """
Sen bir e-ticaret asistanısın. Görevin, kullanıcıya geçmiş satın alımları, tarama davranışları ve ürün kataloğuna dayalı olarak kişiselleştirilmiş ürün önerileri sunmaktır. Yanıtlarını kısa, kullanıcı dostu ve JSON formatında sun. Öneriler, kullanıcının ilgi alanlarına uygun olmalı ve stokta olan ürünleri içermeli. Gizliliğe saygı göster; yalnızca sağlanan verileri kullan.
Örnek çıktı:
{
"recommendations": [
{
"product_id": "prod1",
"name": "Ürün Adı",
"price": 100,
"reason": "Neden bu ürün önerildi."
}
]
}
"""
def initialize_vector_db(self):
"""
Pinecone vektör veritabanını başlatır ve ürün kataloğunu yükler.
"""
# Örnek ürün verileri
products = [
{"id": "prod1", "name": "Nike Air Max Kırmızı", "category": "sneaker", "price": 1200, "stock": True},
{"id": "prod2", "name": "Adidas Ultraboost Kırmızı", "category": "sneaker", "price": 1500, "stock": True},
{"id": "prod3", "name": "Puma Siyah Tişört", "category": "tişört", "price": 300, "stock": True}
]
# Pinecone indeksini oluştur
if self.index_name not in self.pc.list_indexes().names():
self.pc.create_index(
name=self.index_name,
dimension=128, # Örnek embedding boyutu
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-west-2")
)
# Ürünleri vektör veritabanına ekle (basitleştirilmiş embedding)
index = self.pc.Index(self.index_name)
for product in products:
# Gerçek uygulamada, ürün açıklamaları için bir embedding modeli (örn. BERT) kullanılır
vector = [0.1] * 128 # Simüle edilmiş embedding
index.upsert([(product["id"], vector, product)])
def fetch_user_data(self, user_id: str, session_data: Dict) -> Dict:
"""
Kullanıcı verilerini toplar (kısa ve uzun vadeli hafıza).
"""
# Uzun vadeli hafıza (örnek veri)
long_term_memory = {
"user_id": user_id,
"past_purchases": ["mavi kot pantolon", "siyah sırt çantası"],
"preferences": ["casual giyim", "sneaker"]
}
# Kısa vadeli hafıza (oturum verileri)
short_term_memory = session_data
return {
"long_term": long_term_memory,
"short_term": short_term_memory
}
def retrieve_products(self, query: str) -> List[Dict]:
"""
RAG kullanarak ürün kataloğundan ilgili ürünleri alır.
"""
index = self.pc.Index(self.index_name)
# Simüle edilmiş vektör sorgusu (gerçekte, sorgu için embedding üretilir)
query_vector = [0.1] * 128
results = index.query(vector=query_vector, top_k=2, include_metadata=True)
products = [
result["metadata"] for result in results["matches"]
if result["metadata"]["stock"] # Yalnızca stokta olanlar
]
return products
def call_recommendation_api(self, user_data: Dict) -> Dict:
"""
Mevcut öneri motoru API'sini çağırır.
"""
try:
response = requests.post(self.recommendation_api_url, json=user_data)
return response.json()
except Exception as e:
print(f"API hatası: {e}")
return {"recommendations": []}
def build_context(self, user_id: str, session_data: Dict, query: str) -> Dict:
"""
Bağlamı oluşturur ve optimize eder.
"""
# Kullanıcı verilerini topla
user_data = self.fetch_user_data(user_id, session_data)
# RAG ile ürünleri al
retrieved_products = self.retrieve_products(query)
# Öneri motoru API'sinden veri al
toolobserve: System: tool_output = self.call_recommendation_api(user_data)
# Bağlamı oluştur
context = {
"system_prompt": self.system_prompt,
"user_data": {
"current_search": query,
"past_purchases": user_data["long_term"]["past_purchases"],
"preferences": user_data["long_term"]["preferences"]
},
"retrieved_products": retrieved_products,
"tool_output": tool_output
}
# Token optimizasyonu: Bağlam boyutu 32k token sınırını aşarsa budama
context_str = json.dumps(context, ensure_ascii=False)
if len(context_str) > 32000: # Örnek token sınırı
context["retrieved_products"] = context["retrieved_products"][:2] # İlk 2 ürünü al
context["user_data"]["past_purchases"] = context["user_data"]["past_purchases"][:1] # Son 1 satın alımı al
return context
def generate_recommendations(self, user_id: str, session_data: Dict, query: str) -> Dict:
"""
Önerileri üretir.
"""
context = self.build_context(user_id, session_data, query)
response = call_openai_api(context)
return response
# Kullanım Örneği
if __name__ == "__main__":
# Örnek yapılandırma
pinecone_api_key = "your-pinecone-api-key" # Gerçek anahtarınızı kullanın
recommendation_api_url = "http://example-recommendintregration-api.com"
# Bağlam mühendisini başlat
engineer = ContextEngineer(pinecone_api_key, recommendation_api_url)
engineer.initialize_vector_db()
# Örnek kullanıcı verileri
user_id = "user789"
session_data = {
"session_id": "12345",
"current_search": "kırmızı spor ayakkabı",
"cart": ["beyaz tişört"],
"clicks": ["nike koşu ayakkabısı", "adidas tişört"]
}
# Önerileri üret
recommendations = engineer.generate_recommendations(user_id, session_data, "kırmızı spor ayakkabı")
# Sonuçları yazdır
print(json.dumps(recommendations, indent=2, ensure_ascii=False))
Kod Açıklaması
OpenAI Entegrasyonu:
call_openai_api
fonksiyonu, OpenAI’ningpt-4
modelini çağırır ve bağlamı JSON formatında işleyerek yapılandırılmış öneriler üretir.response_format={"type": "json_object"}
parametresi, çıktının JSON formatında olmasını sağlar.max_tokens
vetemperature
parametreleri, yanıt uzunluğunu ve yaratıcılık seviyesini kontrol eder.
Bağlam Mühendisliği Teknikleri:
- RAG: Pinecone vektör veritabanı, ürün kataloğundan ilgili ürünleri almak için kullanılır.
- Hafıza Yönetimi: Kullanıcı verileri kısa vadeli (oturum verileri) ve uzun vadeli (kullanıcı profili) hafıza olarak toplanır.
- Token Optimizasyonu: Bağlam boyutu 32k token sınırını aşarsa, ürünler ve geçmiş satın alımlar sınırlandırılır.
- Araç Entegrasyonu: Öneri motoru API’si ve Pinecone’dan alınan veriler bağlama entegre edilir.
- Yapılandırılmış Çıktı: OpenAI, JSON formatında tutarlı öneriler üretir.
Örnek Çıktı:
{
"recommendations": [
{
"product_id": "prod1",
"name": "Nike Air Max Kırmızı",
"price": 1200,
"reason": "Aramanıza uygun, casual giyim tarzınıza uyan popüler bir sneaker."
},
{
"product_id": "prod2",
"name": "Adidas Ultraboost Kırmızı",
"price": 1500,
"reason": "Yüksek performanslı kırmızı sneaker, son aramanızla uyumlu."
}
]
}
Kurulum ve Çalıştırma
- Kütüphaneleri Yükleyin:
pip install openai pinecone-client requests
- OpenAI API Anahtarı: OpenAI’ye kaydolun ve bir API anahtarı alın (
your-openai-api-key
yerine ekleyin). - Pinecone API Anahtarı: Pinecone’a kaydolun ve bir API anahtarı alın.
- Öneri API’si: Şirket içi bir öneri motoru API’si URL’sini sağlayın veya simüle edilmiş bir API kullanın.
- Kodu Çalıştırın:
python recommendation_system_openai.py
Sınırlamalar ve İyileştirmeler
- Sınırlamalar:
- Embedding üretimi basitleştirilmiştir; gerçek uygulamada BERT veya benzeri bir model kullanılmalı.
- Hata yönetimi basittir; üretimde daha sağlam hata kontrolü eklenmeli.
- Örnek veri seti küçüktür; gerçek dünyada daha büyük bir ürün kataloğu gerekir.
- İyileştirmeler:
- Dinamik Özetleme: Büyük bağlamları özetlemek için bir özetleme modeli entegre edin.
- Geri Bildirim Döngüsü: Kullanıcı seçimlerini uzun vadeli hafızaya kaydederek önerileri iyileştirin.
- Çok Ajanlı Sistem: Önerileri doğrulamak için bir doğrulama ajanı ekleyin.
Ek Notlar
- Gizlilik: Kod, yalnızca ilgili kullanıcı verilerini kullanır ve bağlam budama ile gereksiz verileri hariç tutar.
- Ölçeklenebilirlik: Pinecone ve modüler tasarım, büyük ürün katalogları ve kullanıcı tabanları için uygundur.
- Uyarlama: Kodu başka bir sektöre (örneğin, sağlık veya eğitim) uyarlamak için veri kaynaklarını ve sistem promptunu değiştirin.
Sonuç
Bağlam mühendisliği, prompt mühendisliğinin ötesine geçerek dinamik, bağlam farkında sistemler yaratmada bir paradigma değişimi temsil eder. Talimatları, hafızayı, alınan verileri ve araçları dikkatle düzenleyerek, bağlam mühendisleri LLM’lerin doğru, tutarlı ve ölçeklenebilir sonuçlar sunmasını sağlar. Organizasyonlar, ajan sistemlerini benimsedikçe ve yapay zekayı kritik iş akışlarına entegre ettikçe, bağlam mühendisliğini ustalaşmak, LLM’lerin tüm potansiyelini açığa çıkarmak için vazgeçilmez olacaktır.
Kaynaklar
- blog.langchain.com, “Bağlam mühendisliğinin yükselişi”
- www.philschmid.de, “Yapay zekadaki yeni beceri prompt değil, bağlam mühendisliği”
- www.llamaindex.ai, “Bağlam Mühendisliği - Nedir ve dikkate alınması gereken teknikler”
- blog.langchain.com, “Bağlam Mühendisliği”
- medium.com, “Bağlam Mühendisliğini Anlama”
- medium.com, “Bağlam Mühendisliği: Yapay Zeka Stratejisini Yükseltme”
- www.datacamp.com, “Bağlam Mühendisliği: Örneklerle Bir Rehber”
- simonwillison.net, “Bağlam mühendisliği”
- github.com, “davidkimai/Context-Engineering”
- github.com, “coleam00/context-engineering-intro”
- thenewstack.io, “Bağlam Mühendisliği: Prompt Mühendisliği ve RAG’in Ötesine Geçme”
- medium.com, “Bağlam Mühendisliği vs Prompt Mühendisliği”
- news.ycombinator.com, “Yapay zekadaki yeni beceri prompt değil, bağlam mühendisliği”
- ramp.com, “Bağlam Mühendisliği Nedir?”
- natesnewsletter.substack.com, “Mükemmel Prompt’un Ötesinde”
- nlp.elvissaravia.com, “Bağlam Mühendisliği Rehberi”
- www.promptingguide.ai, “Bağlam Mühendisliği Rehberi”
- rlancemartin.github.io, “Ajanlar için Bağlam Mühendisliği”
- blog.getzep.com, “Bağlam Mühendisliği Nedir?”
- boristane.com, “Bağlam mühendisliği yapay zekayı sihirli kılıyor”
- datasciencedojo.com, “Bağlam Mühendisliği Nedir? Güvenilir Yapay Zeka ve RAG Sistemleri için Yeni Temel”
- labs.adaline.ai, “Yapay Zeka Ajanları için Bağlam Mühendisliği Nedir?”
- @LangChainAI, “Bağlam Mühendisliği”
- @abhirb, “Bağlam Mühendisliği = LLM’nin düşünme şeklini tasarlama”