Otonom AI ajanları geliştirirken en yaygın tuzaklardan biri "altın balığı problemi"dir. Bilgiyi koruyacak bir mekanizma olmadan bir ajan, her yeni etkileşimde boş bir sayfa olarak sıfırlanır. Büyük Dil Modelleri (LLM'ler) tek bir istem penceresi içinde bağlamı işlemekte inanılmaz derecede güçlü olsa da, doğaları gereği uzun vadeli kalıcılıktan yoksundurlar. Ajanların gerçekten öğrenmesini, tercihleri hatırlamasını ve oturumlar arasında durumu korumasını sağlamak için sağlam bellek mimarileri uygulamamız gerekir.
Ajan Bellek Türleri
Etkili bir ajan belleği nadiren tek parça monolitik bir yapıdır. Bunun yerine, genellikle farklı amaçlar için hizmet eden üç katmandan oluşur:
- Kısa Vadeli Bellek (Bağlam Penceresi): Bu, çıkarım sırasında LLM'ye aktarılan acil bağlamdır. Mevcut konuşma geçmişini ve sistem talimatlarını içerir. Token kısıtlamalarıyla sınırlı olsa da, acil akıl yürütme için kritik öneme sahiptir.
- Uzun Vadeli Bellek (Vektör Deposu): Bu, ajanın harici sabit diski olarak hareket eder. Belgeleri veya geçmiş etkileşimleri vektör uzaylarına gömerek ajan, gerektiğinde ilgili tarihi bilgileri alabilir ve bu şekilde token sınırlarını etkili bir şekilde aşabilir.
- Olaysal Bellek (Çalışma Belleği): Bu, bir görev sırasında ajanın belirli ve geçici durumudur; örneğin, bir alışveriş listesi oluşturulurken veya bir kod parçacığı hata ayıklanırken olduğu gibi.
RAG ile Uzun Vadeli Bellek Uygulama
Bir ajana uzun vadeli bellek verme konusunda en pratik yaklaşım, Alıntıyla Artırılmış Üretim (RAG - Retrieval-Augmented Generation) yöntemidir. Tüm geçmiş etkileşimleri bağlam penceresine yüklemek yerine (ki bu pahalı ve verimsizdir), yalnızca en alakalı parçaları getiririz. Bunun için metnin bir gömme modeli kullanılarak yüksek boyutlu vektörlere dönüştürülmesi gerekir.
Aşağıda, konuşma geçmişini saklayan ve gerektiğinde bunu getiren basit bir bellek sistemi kurmak için Python ve LangChain kütüphanesini kullanan pratik bir örnek bulunmaktadır.
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OpenAIEmbeddings
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
# Gömme modelini başlat
embeddings = OpenAIEmbeddings()
# Geçmiş etkileşimleri tutmak için bir vektör deposu oluştur
# Gerçek bir uygulamada, bunu diske veya bir veritabanına kalıcı hale getirmelisiniz
vectorstore = Chroma(embedding_function=embeddings, persist_directory="./db")
# Yakın geçmişteki adımları takip etmek için konuşma belleğini ayarla
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True,
output_key="answer"
)
# Getiriciyi LLM ile birleştir
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
# Zincir, getirme ile üretimi birleştirir
chat_chain = ConversationalRetrievalChain.from_llm(
llm,
retriever=retriever,
memory=memory
)
Pratik Düşünceler: Getirme ve Bakım
Altyapıyı kurmak basit olsa da, mühendislik meydan okuması bakımda yatmaktadır. Bellek statik değildir; budanmayı gerektirir. Her bir etkileşimi saklamak, nihayetinde gürültüye ve artan gecikmeye yol açar. Şu stratejileri uygulamak zorundasınız:
- Özetleme: Eski konuşmaları ham metin olarak tutmak yerine, düzenli olarak soyut gerçeklere özetleyin.
- Atma: Vektör deposundan eski verileri kaldırmak için bir atma politikası (En Az Kullanılan gibi) uygulayın.
- Filtreleme: Ajanın yalnızca mevcut kullanıcı veya görevle ilgili verilere bakmasını sağlamak için, bellekleri alakalılığa göre filtrelemek amacıyla meta verileri kullanın.
Sonuç
Bellek, AI ajanlarında gerçek zekanın temelidir. Bellek olmadan ajanlar, süreklilik hissi olmayan yalnızca gelişmiş sohbet botlarıdır. Kısa vadeli bağlamı kalıcı vektör depolama ile birleştiren katmanlı bir bellek stratejisi uygulayarak geliştiriciler, gerçekten kişisel, yardımcı ve karmaşık, çok adımlı akıl yürütme yeteneğine sahip ajanlar oluşturabilirler. Alan gelişirken, insan bilişsel süreçlerini taklit eden daha sofistike bellek mimarileri görmemiz muhtemeldir; ancak şu an için RAG ve vektör veritabanlarına hakim olmak temel ilk adımdır.