Modern Büyük Dil Modellerinin (LLM) en önemli kısıtlamalarından biri kalıcılıktan yoksun olmalarıdır. Bu modeller tek bir oturum içinde bağlamsal çıkarım yapmada mükemmel olsa da, bağlam penceresi kapandığında her şeyi unuturlar. Otonom yapay zeka ajanları geliştiren geliştiriciler için bu "amnezi" kritik bir darboğaz oluşturuyor. Gerçekten faydalı, otonom sistemler oluşturmak için, ajanların geçmiş etkileşimleri hatırlamasına, geri bildirimlerden öğrenmesine ve uzun süreli durumu sürdürmesine olanak tanıyan sofistike hafıza mimarileri uygulamalıyız.
Ajan hafızası genel olarak iki tipe ayrılır: kısa süreli hafıza ve uzun süreli hafıza. Kısa süreli hafıza genellikle LLM'nin anlık bağlam penceresinde bulunur ve mevcut konuşma akışını yönetir. Uzun süreli hafıza ise, verilerin oturumlar arasında kalıcı hale getirilmesi için harici depolama sistemleri gerektirir. Bu gönderi, vektör gömme (embedding) ve hibrit geri getirme stratejileri kullanarak sağlam bir uzun süreli hafıza sistemi uygulamaya odaklanmaktadır.
Ajan Hafızasının Mimarisi
Etkili ajan hafızası, üç aşamalı bir boru hattına dayanır: işleme (ingestion), depolama ve geri getirme. Bir ajan kullanıcı veya ortamla etkileşime girdiğinde, anahtar veri noktaları çıkarılır. Bu noktalar daha sonra, verilerin yüksek boyutlu sayısal temsilleri olan vektör gömme (embedding)lere dönüştürülür. Son olarak, ajan bilgi hatırlamaya ihtiyaç duyduğunda, bir sorgu vektörü oluşturur ve vektör veritabanında benzer gömme (embedding)leri arar.
Basitçe bir konuşmadaki her kelimeyi depolamak verimsizdir ve genellikle gürültüye neden olur. Bunun yerine, ajanlar bir "konsolidasyon" stratejisi kullanmalıdır. Bir oturumun sonunda veya düzenli aralıklarla, ajan konuşmayı özetler ve belirgin (salient) gerçekleri çıkarır. Bu süreç, anlamsal anlamı korurken veri hacmini azaltır.
Vektör Tabanlı Uzun Süreli Hafızanın Uygulanması
Uzun süreli depolama için Pinecone, Weaviate veya ChromaDB gibi vektör veritabanları idealdir. Bu veritabanlar, tam anahtar kelime eşleşmesi yerine anlamsal benzerliğe dayalı olarak ilgili geçmiş hafızaları bulmasına olanak tanıyan benzerlik aramasına izin verir. Aşağıda, temel bir hafıza deposu uygulamak için Python ve ChromaDB kütüphanesini kullanan pratik bir örnek bulunmaktadır.
import chromadb
from chromadb.utils import embedding_functions
# ChromaDB istemcisini başlat
client = chromadb.Client()
# Hafif bir model kullanarak bir gömme (embedding) fonksiyonu tanımla
# Üretimde, Sentence Transformers gibi daha sağlam bir model kullanın
embed_function = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")
# Ajan hafızası için kalıcı bir koleksiyon oluştur
# Kalıcılık, verilerin betik çalıştırmaları arasında hayatta kalmasını sağlar
memory_collection = client.get_or_create_collection(
name="agent_long_term_memory",
embedding_function=embed_function,
metadata={"hnsw:space": "cosine"}
)
def store_memory(agent, memory_text, metadata=None):
"""
Belirli bir hafızayı vektör veritabanına kaydeder.
Args:
agent: Hafıza ile ilişkili ajan kimliği.
memory_text: Hafızanın metin temsili.
metadata: Zaman damgası veya önem puanı gibi ek meta veriler.
"""
# Filtreleme için meta verilerin ajan kimliğini içerdiğinden emin olun
if metadata is None:
metadata = {}
metadata["agent_id"] = agent
# Hash'e dayalı benzersiz bir kimlik oluşturun veya UUID kullanın
import uuid
doc_id = str(uuid.uuid4())
memory_collection.add(
ids=[doc_id],
documents=[memory_text],
metadatas=[metadata]
)
return doc_id
def retrieve_memories(agent, query, n_results=5):
"""
Verilen bir sorgu için en ilgili hafızaları getirir.
Args:
agent: Filtreleme için ajan kimliği.
query: Mevcut bağlam veya soru.
n_results: Getirilecek hafıza sayısı.
Returns:
İlgili hafıza belgeleri listesi.
"""
# Ajan kimliğine göre filtrelenmiş bir benzerlik araması gerçekleştirin
results = memory_collection.query(
query_texts=[query],
n_results=n_results,
where={"agent_id": agent}
)
# Analiz için belgeleri ve mesafeleri çıkarın
memories = results["documents"][0]
distances = results["distances"][0]
# Düşük ilgililikteki hafızaları filtreleyin (isteğe bağlı eşik)
relevant_memories = []
for mem, dist in zip(memories, distances):
if dist < 0.5: # Kosinüs mesafe eşiği
relevant_memories.append(mem)
return relevant_memories
# Kullanım Örneği
# 1. Bir konuşmadan sonra hafıza kaydetme
store_memory("Agent_Alpha", "The user prefers dark mode in their dashboard settings.")
# 2. Kullanıcı arayüz ayarları hakkında sorduğunda hafıza getirme
query = "How should I configure the theme for my profile?"
relevant_context = retrieve_memories("Agent_Alpha", query)
print("Retrieved Context:", relevant_context)
Hassasiyet İçin Hibrit Geri Getirme
Vektör araması anlamsal anlayışta mükemmel olsa da, belirli isimler, tarihler veya teknik tanımlayıcılar gibi tam eşleşmelerde bazen başarısız olabilir. Bunu azaltmak için, gelişmiş ajan sistemleri vektör benzerlik aramasını geleneksel anahtar kelime araması (ör. BM25) ile birleştiren hibrit geri getirme kullanır. Bu yaklaşım, ajanın hem kavramsal olarak ilgili bilgileri hem de tam gerçek detayları geri getirmesini sağlar.
LLM için istemi (prompt) tasarlarken, geri getirilen hafızalar sistem istemine veya anlık bağlam penceresine enjekte edilmelidir. Bu hafızaları ilgililik ve güncelliğe göre sıralamak çok önemlidir. Daha eski hafızalar, bağlam kirliliğini önlemek için daha düşük ağırlıklandırılmalı veya özetlenmelidir. Örneğin, en ilgili üç son hafızayı ve tüm eski etkileşimlerin bir özetini dahil edebilirsiniz.
Bağlam Penceresi Sınırlarını Yönetme
Verimli geri getirme olsa bile, LLM'lerin sınırlı bağlam pencereleri vardır. Bir ajan uzun süre aktifse, kısa süreli hafızası (konuşma geçmişi) sınırı aşabilir. Bunu yönetmek için stratejiler şunları içerir:
- Kayan Pencere (Sliding Window): Aktif bağlamda yalnızca son N mesajı tutun.
- Özetleme (Summarization): LLM'ye düzenli olarak bugüne kadarki konuşmayı özetlemesini isteyin ve tam geçmişi özetle değiştirin.
- Hafıza Taşıma (Memory Offloading): Detaylı geçmişi uzun süreli vektör depolamaya taşıyın ve kısa süreli bağlamda yalnızca özeti tutun.
Bu teknikleri birleştirerek, geçmişlerinin farkında olan ve sürekli hissettiren ajanlar oluşturabilirsiniz; bu da kullanıcı deneyimini ve görev tamamlama oranlarını önemli ölçüde iyileştirir.
Sonuç
Ajan hafızası uygulamak yalnızca veri depolamakla ilgili değildir; bağlamı küratörlük etmekle ilgilidir. İyi tasarlanmış bir hafıza sistemi, ajanların durumdan bağımsız LLM'ler ile kalıcı, zeki asistanlar arasındaki boşluğu kapatmasına olanak tanır. Uzun süreli gerçekler için basit bir vektör deposuyla başlayın, hassasiyet için hibrit aramayı dahil edin ve bağlam pencerenizi titizlikle yönetin. Modeller ve araçlar evrildikçe, hafızayı etkili bir şekilde yönetme yeteneği, gelişmiş yapay zeka ajanları oluşturmak için temel bir yetkinlik olmaya devam edecektir.