Takip et

Mi Agente se Rebeló: Bedrock Agent ve S3 Entegrasyonu Sorunları

Büyük Dil Modellerini (LLM) gerçek dünya görevlerinde kullanmak heyecan verici olsa da, bazen ajanlarımız inatçı olabilir. Özellikle AWS Bedrock Agent’ları S3’ten bilgi çekerken karşılaşılan o meşhur ‘[retrieved information]’ hatası, geliştiricilerin kabusu haline gelebiliyor. Peki, bu ajanı isyan ettiren ne ve onu nasıl tekrar yola getirebiliriz?

Son yıllarda yapay zeka dünyasında yaşanan devrim, özellikle Büyük Dil Modelleri (LLM’ler) ve onların etrafında inşa edilen akıllı ajanlar sayesinde günlük hayatımıza daha fazla entegre olmaya başladı. Bu ajanlar, karmaşık görevleri anlayıp yerine getirme yeteneğiyle dikkat çekiyorlar. Ancak, bu yeteneklerinin temelinde yatan en kritik unsurlardan biri, doğru ve güncel bilgiye erişimdir. AWS Bedrock Agent’ları, şirketlerin özel verileriyle zenginleştirilmiş bilgi tabanları üzerinden çalışarak bu boşluğu doldurmayı hedefler. Genellikle bu bilgi tabanlarının arkasında, maliyet etkinliği ve ölçeklenebilirliği nedeniyle Amazon S3 (Simple Storage Service) gibi depolama hizmetleri bulunur. Teoride her şey kusursuz görünse de, pratikte sıkça karşılaşılan ve geliştiricilerin uykularını kaçıran bir sorun var: Bedrock Agent’ın S3’ten bilgi çekerken verdiği o meşhur ‘[retrieved information]‘ hatası. Bu makale boyunca, bu hatanın ne anlama geldiğini, neden ortaya çıktığını ve adım adım nasıl çözülebileceğini derinlemesine inceleyeceğiz. Amacımız, hem yeni başlayanların konuyu temelden anlamasını sağlamak hem de deneyimli geliştiricilere sorun giderme ve optimizasyon konusunda değerli ipuçları sunmaktır.

Akıllı ajanlar, modern yazılım mimarilerinin önemli bir parçası haline gelmiştir. Bu ajanlar, sadece metin üretmekle kalmayıp, belirli hedeflere ulaşmak için eylemler gerçekleştirebilen, kararlar alabilen ve harici sistemlerle etkileşime girebilen yapay zeka varlıklarıdır. AWS Bedrock Agent, Amazon’un Geniş Dil Modellerini (LLM’ler) kullanarak bu tür akıllı ajanları oluşturmak için tasarlanmış yönetilen bir hizmettir. Temel olarak, bir Bedrock Agent, bir kullanıcının doğal dildeki isteğini alır, bu isteği anlamlandırır, gerekli bilgileri toplar ve ardından tanımlanmış araçları veya eylemleri kullanarak bu isteği yerine getirir.

Peki, bu neden bu kadar önemli? Geleneksel LLM’ler genellikle eğitildikleri verilere bağlı kalır ve güncel veya özel şirket içi bilgilere doğrudan erişimleri yoktur. İşte burada Bedrock Agent’lar devreye girer. Bir Bedrock Agent’ı bir bilgi tabanı (Knowledge Base) ile entegre ettiğinizde, modelin kendi eğitilmiş verilerinin ötesine geçerek, sizin sağladığınız belgelerden, veritabanlarından veya diğer depolama alanlarından bilgi almasını sağlayabilirsiniz. Bu işlem, Retrieval Augmented Generation (RAG) olarak bilinir ve LLM’lerin halüsinasyon yapma eğilimini azaltırken, daha doğru, ilgili ve güncel yanıtlar üretmesine olanak tanır. Örneğin, bir müşteri hizmetleri ajanı düşünün. Bu ajan, sadece genel bilgilere dayanarak yanıt vermek yerine, şirketin ürün dokümanlarını, SSS’lerini veya geçmiş müşteri etkileşimlerini içeren bir bilgi tabanına erişerek çok daha spesifik ve yararlı cevaplar sunabilir. Bu, müşteri deneyimini önemli ölçüde iyileştirir ve operasyonel verimliliği artırır.

Gerçek dünya senaryolarına baktığımızda, Bedrock Agent’ların potansiyeli oldukça geniştir:

  • Müşteri Hizmetleri ve Destek: Müşterilerin ürünler, hizmetler veya hesaplarıyla ilgili sorularını yanıtlayan akıllı sohbet botları oluşturmak. Agent, S3’te depolanan ürün kılavuzları, garanti bilgileri veya teknik destek belgelerinden bilgi çekebilir.
  • İç Bilgi Yönetimi: Çalışanların şirket politikaları, İK belgeleri veya proje dokümanları hakkında hızlıca bilgi almasını sağlayan dahili asistanlar. Bu, eğitim sürelerini kısaltır ve verimliliği artırır.
  • Satış ve Pazarlama: Müşteri adaylarının belirli ürün özellikleri hakkında sorularını yanıtlayan veya kişiselleştirilmiş öneriler sunan satış destek ajanları. S3’teki pazarlama materyalleri veya ürün veri sayfaları kullanılabilir.
  • Finansal Danışmanlık: Yatırım ürünleri, mevzuat veya piyasa koşulları hakkında bilgi sağlayan finansal asistanlar. Güvenli S3 kovalarında depolanan raporlar ve analizler bilgi kaynağı olabilir.

Bu senaryolarda S3’ün rolü merkezi bir öneme sahiptir. S3, yüksek dayanıklılığı, düşük maliyeti ve neredeyse sınırsız ölçeklenebilirliği ile büyük miktarda yapılandırılmamış veriyi depolamak için ideal bir çözümdür. Üstelik, Bedrock Knowledge Bases ile doğal entegrasyonu sayesinde, S3’teki belgeleri doğrudan bir bilgi tabanına dönüştürmek oldukça kolaydır. Ancak, bu kolaylığın ardında, doğru yapılandırma ve yetkilendirme süreçlerinin titizlikle yönetilmesi gerektiği gerçeği yatar. Aksi takdirde, ajanımız beklenmedik bir şekilde ‘isyan edebilir’ ve bilgi çekme konusunda sıkıntılar yaşayabiliriz. Bu da bizi makalemizin ana problemine, yani ‘[retrieved information]’ hatasına götürüyor.

S3’ü Bir Bedrock Agent İçin Bilgi Kaynağı Yapmak Nasıl Bir Süreçtir?

Bir Bedrock Agent’ın güçlü olabilmesi için doğru ve erişilebilir bilgiye ihtiyacı vardır. Amazon S3, bu bilgiyi depolamak için mükemmel bir platform sunar. Ancak, S3’teki ham veriyi doğrudan bir ajana sunmak yeterli değildir; bu verinin ajan tarafından anlaşılabilir ve kullanılabilir bir formata dönüştürülmesi gerekir. Bu süreç, genellikle bir Bedrock Bilgi Tabanı (Knowledge Base) oluşturmayı ve S3’ü bu tabana bağlamayı içerir. Hadi adım adım bu süreci inceleyelim:

1. S3 Kovası (Bucket) Oluşturma ve Veri Yükleme

İlk adım, bilgilerinizi barındıracak bir S3 kovası oluşturmaktır. Bu kova, ajanınızın erişmesi gereken tüm belgeleri, kılavuzları, SSS’leri veya diğer metin tabanlı verileri içerecektir. S3 konsolu üzerinden kolayca yeni bir kova oluşturabilir ve uygun bir bölge seçebilirsiniz.

Veri yükleme konusunda, S3 farklı dosya türlerini destekler. Bedrock Knowledge Bases şu anda TXT, CSV, JSON, XML, PDF, DOCX ve HTML dosyalarını doğrudan işleyebilir. Verilerinizi S3’e yüklerken, anlamlı bir dizin yapısı kullanmak, ileride verileri yönetmek ve güncellemek açısından faydalı olacaktır. Örneğin, ‘urunler/kilavuzlar/‘ veya ‘sss/genel/‘ gibi klasörler oluşturabilirsiniz.

aws s3 cp "path/to/your/document.pdf" s3://your-agent-knowledge-bucket/documents/

Bu komut, yerel bir dosyayı S3 kovanıza kopyalar. Yüklediğiniz dosyaların içeriğinin, ajanınızın yanıtlamasını istediğiniz sorularla ilgili olduğundan emin olun. Kaliteli ve temiz veri, ajanınızın performansının temelini oluşturur.

2. Bedrock Bilgi Tabanı (Knowledge Base) Oluşturma

Verileriniz S3'te hazır olduğunda, Bedrock konsoluna giderek yeni bir bilgi tabanı oluşturma sürecini başlatmalısınız. Bu adımda:

  • Bilgi Tabanı Adı ve Açıklaması: Anlamlı bir isim ve açıklama girin.
  • IAM Hizmet Rolü: Bu, kritik bir adımdır. Bedrock Bilgi Tabanı'nın S3 kovanıza erişebilmesi için gerekli izinlere sahip bir IAM hizmet rolü tanımlamanız gerekir. Bu rol, s3:GetObject, s3:ListBucket gibi izinleri içermelidir.
  • Veri Kaynağı Yapılandırması: S3 kovanınızı veri kaynağı olarak seçin ve verilerinizin bulunduğu yolu (örneğin, s3://your-agent-knowledge-bucket/documents/) belirtin.

Bu aşamada, Bilgi Tabanı için bir vektör veritabanı seçmeniz istenecektir. Amazon Aurora (PostgreSQL için pgvector eklentisi ile), Pinecone, Redis Enterprise Cloud ve Amazon OpenSearch Service (Serverless) gibi seçenekler mevcuttur. Vektör veritabanı, S3'teki belgelerinizin içeriğini matematiksel vektörlere dönüştürerek, anlamsal olarak benzer bilgilerin hızlıca bulunmasını sağlar. Bedrock, belgelerinizi chunking (parçalama) yapar ve bu parçaları seçtiğiniz vektör veritabanında depolamak için gömme modellerini (embedding models) kullanır.

3. Vektörleştirme ve Senkronizasyon

Bilgi tabanını ve veri kaynağını yapılandırdıktan sonra, Bedrock otomatik olarak S3'teki belgelerinizi alır, parçalara ayırır, bu parçaları vektörleştirir ve seçtiğiniz vektör veritabanında saklar. Bu ilk senkronizasyon biraz zaman alabilir, özellikle büyük veri kümeleriyle çalışıyorsanız.


      "knowledgeBaseConfiguration": {
        "type": "S3",
        "s3Configuration": {
          "bucketArn": "arn:aws:s3:::your-agent-knowledge-bucket",
          "inclusionPrefixes": ["documents/"] 
        }
      },
      "vectorDatabaseConfiguration": {
        "vectorDatabaseType": "OPENSEARCH_SERVERLESS",
        "openSearchServerlessConfiguration": {
          "collectionArn": "arn:aws:aoss:us-east-1:123456789012:collection/your-collection-id",
          "vectorIndexName": "your-vector-index",
          "fieldMapping": {
            "vectorField": "vector_embedding",
            "textField": "text_chunk",
            "metadataField": "document_metadata"
          }
        }
      }
    

Yukarıdaki JSON yapısı, bir Bilgi Tabanı yapılandırmasının parçalarını gösterir. Bu, Bedrock'un arka planda nasıl çalıştığını anlamanıza yardımcı olur. Özellikle inclusionPrefixes kısmı, S3 kovanızın hangi dizinlerinin taranacağını belirtir ki bu, gereksiz verilerin işlenmesini engeller.

Bundan sonra, S3'teki verilerinizde herhangi bir değişiklik yaptığınızda (yeni belge ekleme, mevcut belgeyi güncelleme vb.), Bilgi Tabanı'nı manuel olarak veya zamanlanmış bir şekilde senkronize etmeniz gerekir. Senkronizasyon, yeni veya güncellenmiş bilgilerin vektör veritabanına işlenmesini ve ajanınız tarafından erişilebilir olmasını sağlar.

Uzman İpucu: Büyük veri kümeleri için ilk senkronizasyonun uzun sürebileceğini unutmayın. Bu süre zarfında ajanınızın beklenen performansı sergileyememesi normaldir. Ayrıca, S3 nesne anahtarlarınızda Türkçe karakterler veya özel semboller kullanmaktan kaçınmak, olası entegrasyon sorunlarını önleyebilir.

Bu adımları dikkatlice takip etmek, Bedrock Agent'ınız için sağlam bir bilgi tabanı oluşturmanın temelini atar. Ancak, tüm bunlar doğru yapılmış gibi görünse bile, ajanınızın hala '[retrieved information]' hatası vermesi olasıdır. Bir sonraki bölümde, bu sinir bozucu hatanın nedenlerini ve perde arkasındaki potansiyel sorunları inceleyeceğiz.

Mi Agente se Rebeló: [retrieved information] Hatasının Perde Arkası Nedir?

Her şey yolunda görünürken, Bedrock Agent'ınızdan gelen '[retrieved information]' çıktısını görmek, tıpkı bir casusun görevi reddetmesi gibi can sıkıcı olabilir. Bu hata mesajı, aslında ajanın tam olarak neyin yanlış gittiğini söylemek yerine, bir bilgi alma girişiminde başarısız olduğunu gösteren genel bir ibaredir. Yani ajanınız, kullanıcıdan gelen bir soruyu yanıtlamak için bilgi tabanına başvurduğunda, gerekli bilgiyi çekememiş veya çektiği bilgiyi anlamlandıramamıştır. Bu, LLM'nin kullanıcıya spesifik bir cevap vermek yerine, görevi yerine getiremediğini ima eden bir tür savunma mekanizmasıdır.

Bu hatanın arkasında yatan nedenler çeşitli olabilir ve genellikle birkaç faktörün birleşimiyle ortaya çıkar. İşte en yaygın senaryolar ve potansiyel suçlular:

1. Yetkilendirme (IAM) Sorunları: Ajanın Bilgiye Erişim İzni Yok!

Bu, en sık karşılaşılan ve genellikle gözden kaçan nedenlerden biridir. Bedrock Agent'ınızın S3'teki bilgi tabanına erişebilmesi için gerekli IAM (Identity and Access Management) izinlerine sahip olması şarttır. İki ana rol burada kritik öneme sahiptir:

  • Bedrock Agent Yürütme Rolü: Bu rol, Bedrock Agent'ın genel operasyonlarını (LLM'i çağırmak, araçları kullanmak vb.) gerçekleştirmesi için gerekli izinlere sahiptir. Ayrıca, oluşturduğunuz bilgi tabanına erişim izni de olmalıdır.
  • Bedrock Bilgi Tabanı Hizmet Rolü: Bu rol, Bilgi Tabanı'nın kendisinin S3 kovanıza erişerek verileri okuyabilmesi, vektörleştirebilmesi ve senkronize edebilmesi için izinleri içerir.

Eğer bu rollerden herhangi birinde eksik izinler varsa (örneğin, s3:GetObject, s3:ListBucket veya bedrock:Retrieve gibi izinler eksikse), ajanınız S3'teki bilgilere ulaşamaz ve bu hata kaçınılmaz olur.

2. Veri Formatı veya Yapılandırma Hataları: Ajana Anlaşılmaz Veri Sunumu!

Ajan, S3'teki veriyi doğru bir şekilde okuyamıyorsa veya işleyemiyorsa da bu hatayı verebilir. Bu durum genellikle şunlardan kaynaklanır:

  • Desteklenmeyen Dosya Formatları: Belirli bir dosya türünü yüklediniz, ancak Bilgi Tabanı onu desteklemiyor veya doğru bir şekilde işleyemiyor.
  • Kötü Yapılandırılmış Veri: Özellikle JSON veya CSV gibi yapılandırılmış verilerde formatlama hataları, ajanın bilgiyi doğru ayrıştırmasını engelleyebilir.
  • Chunking (Parçalama) Sorunları: Bedrock, belgelerinizi vektörleştirmeden önce küçük parçalara ayırır. Eğer parçalama stratejisi (chunking strategy) uygun değilse (çok büyük veya çok küçük parçalar), ilgili bilgilerin doğru bir şekilde alınması zorlaşabilir.
  • Metadata Eksikliği veya Yanlışlığı: Bazı durumlarda, metadata ajanın belirli bilgileri filtrelemesi veya önceliklendirmesi için kritik olabilir. Eksik veya yanlış metadata, doğru bilginin bulunamamasına yol açabilir.

3. Bilgi Tabanı Senkronizasyon Sorunları: Eski veya Eksik Bilgiler!

S3'e yeni veriler yüklediniz ancak Bilgi Tabanı'nı senkronize etmeyi unuttunuz mu? Veya senkronizasyon işlemi başarısız mı oldu? Bu durumda, ajanınız yeni veya güncellenmiş bilgilere erişemez ve hala eski veya eksik bilgilere dayanarak yanıt vermeye çalışır, bu da '[retrieved information]' ile sonuçlanabilir.

4. Vektör Veritabanı Sorunları: Bilgi Araması Başarısız!

Vektör veritabanınız (örneğin, OpenSearch Serverless) doğru çalışmıyorsa, kapasite sorunları yaşıyorsa veya indeksleme hataları varsa, Bedrock Bilgi Tabanı anlamsal aramayı doğru bir şekilde gerçekleştiremez. Bu durum, ajanın alakalı bilgileri bulamamasına neden olur.

5. İstem (Prompt) Kalitesi ve Alaka Düzeyi: Yanlış Soru, Yanlış Cevap!

Bazen sorun, teknik altyapıda değil, kullanıcının sorduğu sorunun kendisinde olabilir. Eğer kullanıcının istemi (prompt), bilgi tabanınızdaki verilerle zayıf bir şekilde ilişkiliyse veya bilgi tabanınızda bu konuda hiçbir bilgi yoksa, ajan doğal olarak bir şey bulamayacaktır. Ayrıca, ajanın istem mühendisliği (prompt engineering) ayarları da önemlidir. Ajanın bilgi alma stratejisi, retriever yapılandırması gibi unsurlar, arama kalitesini doğrudan etkiler.

Vaka Analizi: E-ticaret Destek Botu

Bir e-ticaret şirketi, Bedrock Agent kullanarak bir müşteri destek botu geliştirdi. Bot, S3'te depolanan ürün kılavuzları, SSS'ler ve iade politikalarından bilgi alacaktı. İlk testlerde, bot "Ayakkabı numarası tablosu nerede?" gibi sorulara doğru yanıt verirken, "X ürünü için garanti süresi nedir?" sorusuna sürekli '[retrieved information]' hatası veriyordu. İncelemeler sonucunda şu sorunlar tespit edildi:

  • IAM Eksikliği: Bilgi Tabanı'nın S3 kovanına erişen IAM rolünde s3:GetObject izni yalnızca belirli bir önek için tanımlanmış, ancak garanti bilgilerini içeren PDF'ler farklı bir dizindeydi.
  • Veri Formatı: Garanti bilgileri, PDF olarak yüklenmişti ancak OCR (Optik Karakter Tanıma) işleminden geçirilmemiş, sadece taranmış görüntülerden oluşuyordu. Bu nedenle Bedrock, PDF'in içindeki metni çıkarıp vektörleştiremiyordu.
  • Senkronizasyon: Garanti bilgileri yeni eklenmişti ancak Bilgi Tabanı manuel olarak senkronize edilmemişti.

Bu sorunlar giderildikten (IAM politikası güncellendi, PDF'ler OCR'dan geçirildi ve Bilgi Tabanı senkronize edildi) sonra, bot "X ürünü için garanti süresi nedir?" sorusuna doğru yanıtlar vermeye başladı. Bu vaka analizi, '[retrieved information]' hatasının arkasında birden fazla nedenin olabileceğini ve sistematik bir sorun giderme yaklaşımının ne kadar kritik olduğunu göstermektedir.

Bir sonraki bölümde, bu potansiyel suçluları nasıl yakalayacağımızı ve adım adım sorun giderme stratejilerini ele alacağız.

Yetkilendirme (IAM) Ayarları: Agent ve S3 Arasındaki Güven Köprüsü Nasıl Kurulur?

Bedrock Agent'ın S3'teki bilgi tabanına sorunsuz bir şekilde erişebilmesi için doğru IAM (Identity and Access Management) yapılandırması hayati önem taşır. Yanlış veya eksik izinler, '[retrieved information]' hatasının en yaygın nedenidir. Bu bölümde, gerekli IAM rollerini ve politikalarını adım adım nasıl yapılandıracağınızı inceleyeceğiz.

1. Bedrock Agent Yürütme Rolü

Bu rol, Bedrock Agent'ın kendisi tarafından üstlenilir ve Bedrock'un arkasındaki LLM'i çağırmak, araçları kullanmak ve Bilgi Tabanlarına erişmek gibi temel operasyonları gerçekleştirmesini sağlar. Bu rolün temel olarak aşağıdaki izinlere ihtiyacı vardır:

  • Bedrock hizmetine erişim (bedrock:InvokeModel).
  • Oluşturduğunuz Bilgi Tabanına erişim (bedrock:Retrieve, bedrock:RetrieveAndGenerate).
  • Opsiyonel olarak, eğer ajanınız başka AWS hizmetlerini (Lambda, S3) bir araç olarak kullanıyorsa, o hizmetlere erişim izinleri.

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "bedrock:InvokeModel",
              "bedrock:Retrieve",
              "bedrock:RetrieveAndGenerate"
            ],
            "Resource": [
              "arn:aws:bedrock:REGION:ACCOUNT_ID:model/*",
              "arn:aws:bedrock:REGION:ACCOUNT_ID:knowledge-base/YOUR_KNOWLEDGE_BASE_ID"
            ]
          },
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:REGION:ACCOUNT_ID:log-group:/aws/bedrock/*"
          }
          // Eğer Lambda aracı kullanıyorsanız, buraya lambda:InvokeFunction eklenmeli
        ]
      }
    

Yukarıdaki politika, temel Bedrock Agent işlevselliği ve Bilgi Tabanı erişimi için gerekli izinleri sağlar. YOUR_KNOWLEDGE_BASE_ID kısmını kendi bilgi tabanınızın kimliğiyle değiştirmeyi unutmayın.

2. Bedrock Bilgi Tabanı Hizmet Rolü

Bu rol, Bedrock Bilgi Tabanı'nın S3'teki veri kaynağınıza ve seçtiğiniz vektör veritabanına erişmesi için kullanılır. Bu rolün S3 tarafında en azından aşağıdaki izinlere sahip olması gerekir:

  • S3 kovanındaki nesneleri listeleme (s3:ListBucket).
  • S3 kovanındaki nesneleri okuma (s3:GetObject).

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ],
            "Resource": [
              "arn:aws:s3:::YOUR_S3_KNOWLEDGE_BUCKET",
              "arn:aws:s3:::YOUR_S3_KNOWLEDGE_BUCKET/*"
            ]
          },
          {
            "Effect": "Allow",
            "Action": [
              "aoss:APIMapping", 
              "aoss:BatchGetCollection",
              "aoss:DescribeCollection"
              // Vektör veritabanınıza göre diğer OpenSearch/Pinecone/Aurora izinleri
            ],
            "Resource": "*" 
          }
        ]
      }
    

Bu politika örneği, Bedrock Bilgi Tabanı'nın S3 kovanınıza erişimi ve OpenSearch Serverless gibi bir vektör veritabanıyla etkileşimi için gerekli izinleri içerir. YOUR_S3_KNOWLEDGE_BUCKET ve ilgili vektör veritabanı kaynaklarını kendi kaynaklarınızla değiştirmeniz önemlidir. Özellikle Resource: "*" yerine daha spesifik ARN'ler kullanmak, en iyi güvenlik uygulamasıdır.

3. S3 Kovası Politikası (Opsiyonel ama Önerilen)

Bazı durumlarda, S3 kovanınıza erişimi daha da kısıtlamak isteyebilirsiniz. Bu, kova politikası ile yapılır ve sadece belirli IAM rollerinin (yani Bilgi Tabanı hizmet rolünüzün) bu kovaya erişmesine izin verir. Bu, 'Least Privilege' prensibini destekler.


      {
        "Version": "2012-10-17",
        "Id": "Policy1234567890",
        "Statement": [
          {
            "Sid": "AllowBedrockKnowledgeBaseAccess",
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::ACCOUNT_ID:role/YOUR_KNOWLEDGE_BASE_SERVICE_ROLE_NAME"
            },
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ],
            "Resource": [
              "arn:aws:s3:::YOUR_S3_KNOWLEDGE_BUCKET",
              "arn:aws:s3:::YOUR_S3_KNOWLEDGE_BUCKET/*"
            ]
          }
        ]
      }
    

Bu politika, yalnızca YOUR_KNOWLEDGE_BASE_SERVICE_ROLE_NAME adlı IAM rolünün belirtilen S3 kovasına erişmesine izin verir. Bu, ek bir güvenlik katmanı sağlar.

Kontrol Listesi:

  • Agent Yürütme Rolü, Bilgi Tabanına bedrock:Retrieve iznine sahip mi?
  • Bilgi Tabanı Hizmet Rolü, S3 kovanına s3:GetObject ve s3:ListBucket izinlerine sahip mi?
  • S3 kovanı, Bilgi Tabanı Hizmet Rolüne erişim izni veren bir kova politikasına sahip mi? (Eğer varsa)
  • Tüm ARN'ler (Amazon Resource Name) doğru ve ilgili AWS kaynaklarını işaret ediyor mu?
  • ROLLERİN GÜVEN İLİŞKİLERİNDE (TRUST POLICY) Bedrock hizmetinin (bedrock.amazonaws.com) üstlenmesine izin veriliyor mu? Bu da kritik bir adımdır.

Bu adımları dikkatlice gözden geçirmek ve tüm izinlerin doğru yapılandırıldığından emin olmak, '[retrieved information]' hatasını çözmede genellikle ilk ve en etkili adımdır. Bir sonraki bölümde, veri formatı ve yapılandırmanın ajanın bilgiyi doğru anlamasını nasıl etkilediğini ele alacağız.

Adım Adım Sorun Giderme: [retrieved information] Hatasını Çözmek İçin Ne Yapmalıyız?

'[retrieved information]' hatasıyla karşılaştığınızda paniğe kapılmayın. Bu, çözülebilir bir sorundur ve sistematik bir yaklaşımla üstesinden gelinebilirsiniz. İşte adım adım izlemeniz gereken sorun giderme süreci:

1. CloudWatch Günlüklerini İnceleyin

AWS CloudWatch, Bedrock Agent'ınızın ve Bilgi Tabanınızın arkasındaki her şeyin kayıtlarını tutar. Bu günlükler, sorunun kök nedenini belirlemenin en iyi yoludur. Bedrock Agent'ınızı oluştururken veya düzenlerken, CloudWatch günlüklerinin etkinleştirildiğinden emin olun. Genellikle, /aws/bedrock/agents/YOUR_AGENT_ID ve /aws/bedrock/knowledge-bases/YOUR_KNOWLEDGE_BASE_ID altında günlük grupları bulabilirsiniz.

  • Agent Günlükleri: Burada, ajanın kullanıcının istemini nasıl yorumladığını, hangi araçları çağırmaya çalıştığını ve Bilgi Tabanı'ndan bilgi alma girişimlerinin sonuçlarını görebilirsiniz. Eğer bir yetkilendirme hatası varsa, burada açıkça belirtilir.
  • Bilgi Tabanı Günlükleri: Bilgi Tabanının S3'ten verileri okuma, parçalara ayırma, vektörleştirme ve vektör veritabanına yazma işlemleriyle ilgili detayları burada bulabilirsiniz. Senkronizasyon hataları, veri formatı sorunları veya vektör veritabanı bağlantı sorunları bu günlüklerde kendini gösterir.

Hata mesajlarını ve uyarıları dikkatlice okuyun. Örneğin, 'AccessDenied' hatası genellikle IAM izinleriyle ilgili bir sorunu işaret ederken, 'InvalidDocument' veya 'UnprocessableEntity' gibi mesajlar veri formatı veya içeriğiyle ilgili sorunlara işaret edebilir.

2. IAM İzinlerini Tekrar Kontrol Edin

Daha önceki bölümde detaylıca bahsettiğimiz IAM rollerini ve politikalarını (Agent Yürütme Rolü, Bilgi Tabanı Hizmet Rolü ve S3 Kova Politikası) tekrar gözden geçirin. Aşağıdaki soruları kendinize sorun:

  • Tüm gerekli izinler (s3:GetObject, s3:ListBucket, bedrock:Retrieve vb.) doğru rollerde tanımlanmış mı?
  • Kaynak ARN'leri (Amazon Resource Name) doğru mu? Yanlış bir ARN, iznin geçersiz olmasına neden olabilir.
  • Güven ilişkileri (Trust Policies) doğru yapılandırılmış mı? İlgili hizmetlerin (bedrock.amazonaws.com) rolü üstlenmesine izin veriliyor mu?

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "bedrock.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
    

Bu, bir IAM rolünün güven ilişkisi politikası örneğidir. bedrock.amazonaws.com hizmetinin bu rolü üstlenmesine izin verir.

3. Bilgi Tabanı Senkronizasyon Durumunu Kontrol Edin

AWS Bedrock konsoluna gidin ve Bilgi Tabanınızın durumunu kontrol edin. 'Ready' durumunda mı? En son ne zaman senkronize edildi? S3'e yeni veriler eklediyseniz veya mevcut verileri güncellediyseniz, Bilgi Tabanını manuel olarak senkronize etmeyi unutmayın. Senkronizasyon işlemi sırasında herhangi bir hata olup olmadığını da buradan kontrol edebilirsiniz.

Uzman İpucu: Eğer Bilgi Tabanı senkronizasyonu sürekli başarısız oluyorsa, S3'teki belirli bir dosyanın (büyük boyutu, bozuk formatı, şifreleme vb.) soruna neden olabileceğini unutmayın. Bu durumda, sorunlu dosyayı izole etmeye çalışın.

4. Veri Formatını ve İçeriğini Gözden Geçirin

S3'e yüklediğiniz dosyaların Bedrock tarafından desteklenen formatlarda olduğundan ve içeriklerinin temiz, okunabilir olduğundan emin olun. Özellikle:

  • PDF'ler: Taranmış PDF'ler yerine metin seçilebilen PDF'ler kullanın. Gerekirse OCR (Optik Karakter Tanıma) işleminden geçirin.
  • JSON/CSV: Syntax hataları olmadığından emin olun.
  • Metin Kalitesi: Kötü yazılmış, çok kısa veya çok uzun, alakasız bilgilerle dolu metinler ajanın performansını düşürebilir.
  • Chunking Stratejisi: Bilgi Tabanı oluştururken varsayılan parçalama ayarlarının uygun olup olmadığını değerlendirin. Çok büyük parçalar, modelin belirli bir cevabı bulmasını zorlaştırabilir; çok küçük parçalar ise bağlam kaybına yol açabilir.

5. İstem (Prompt) Mühendisliğini Gözden Geçirin

Bazen sorun, ajanın kendi yapılandırmasında değil, ona sorduğunuz sorunun kalitesinde olabilir. Ajana sorduğunuz soru, bilgi tabanınızdaki verilerle ne kadar alakalı? Çok genel veya çok belirsiz bir soru, ajanın doğru bilgiyi çekmesini zorlaştırabilir. Ajana spesifik ve doğrudan sorular sormaya çalışın. Ayrıca, ajanınızın talimatlarını (instructions) da gözden geçirin. Ajan, ne araması gerektiği veya bilgiyi nasıl kullanması gerektiği konusunda yeterince yönlendirildi mi?

6. Küçük Ölçekli Testler Yapın

Tüm Bilgi Tabanınız yerine, sadece birkaç küçük, bilinen belgeyle bir test Bilgi Tabanı oluşturun. Bu, sorunun büyük veri hacminden mi yoksa temel entegrasyon ayarlarından mı kaynaklandığını anlamanıza yardımcı olabilir. Eğer test Bilgi Tabanı ile sorunsuz çalışıyorsa, sorun muhtemelen veri kalitenizde veya ölçekle ilgili bir faktördedir.

Bu adımları sabırla ve metodik bir şekilde izleyerek, '[retrieved information]' hatasının arkasındaki gerçek nedeni bulma ve Bedrock Agent'ınızı tekrar işler hale getirme şansınız oldukça yüksektir. Sorun giderme süreci bazen bir dedektiflik hikayesine dönebilir, ancak her adımda elde ettiğiniz bilgi, bir sonraki adımı daha bilinçli atmanızı sağlar.

Gelişmiş Stratejiler ve En İyi Uygulamalar: Daha Sağlam Bedrock Agent'ları Nasıl Kurulur?

Bir Bedrock Agent'ı S3 ile entegre ederken '[retrieved information]' hatasını aşmak sadece başlangıçtır. Daha sağlam, güvenilir ve etkili ajanlar oluşturmak için bazı gelişmiş stratejiler ve en iyi uygulamaları benimsemek kritik öneme sahiptir. Bu bölümde, ajanınızın performansını ve dayanıklılığını artıracak yöntemleri ele alacağız.

1. Çoklu Bilgi Kaynaklarını Akıllıca Kullanın

Tek bir S3 kovası veya bilgi tabanıyla sınırlı kalmak zorunda değilsiniz. Karmaşık senaryolar için, birden fazla bilgi tabanı oluşturabilir ve bunları Bedrock Agent'ınıza bağlayabilirsiniz. Örneğin:

  • Bir bilgi tabanı ürün dokümantasyonu için, diğeri şirket politikaları için olabilir.
  • Farklı dillerdeki içerikler için ayrı bilgi tabanları kullanmak.

Ajanınızın, kullanıcının sorgusuna göre hangi bilgi tabanına başvuracağına karar vermesini sağlayacak gelişmiş istem mühendisliği (prompt engineering) teknikleri uygulayabilirsiniz. Bu, ajanın daha doğru ve hedefe yönelik bilgiler çekmesine yardımcı olur.

2. Özelleştirilmiş Araçlar (Tools) ile S3 Entegrasyonunu Genişletin

Bedrock Bilgi Tabanı, yapılandırılmamış veriler için harika bir çözümdür. Ancak, ajanınızın S3'teki yapılandırılmış verilerle (örneğin, bir CSV dosyasındaki müşteri siparişleri veya bir JSON dosyasındaki ürün stok bilgileri) doğrudan etkileşime girmesini istiyorsanız, özel araçlar oluşturmanız gerekebilir. Bu araçlar genellikle bir AWS Lambda fonksiyonu aracılığıyla S3'teki belirli verileri sorgulayabilir veya güncelleyebilir.


      import json
      import boto3

      s3_client = boto3.client('s3')

      def get_product_stock(product_id: str):
          # S3'ten ürün stok bilgisini çeken örnek bir Lambda fonksiyonu
          bucket_name = 'your-product-data-bucket'
          key = f'products/{product_id}/stock.json'
          try:
              response = s3_client.get_object(Bucket=bucket_name, Key=key)
              data = json.loads(response['Body'].read().decode('utf-8'))
              return {"stock": data.get("current_stock", 0)}
          except s3_client.exceptions.NoSuchKey:
              return {"error": "Product not found or stock information unavailable."}
          except Exception as e:
              return {"error": str(e)}

      # Bedrock Agent için Lambda'ya eklenecek bir tool tanımı örneği (OpenAPI şemasında)
      # /get_product_stock:
      #   get:
      #     summary: Belirli bir ürünün stok durumunu sorgular.
      #     operationId: getProductStock
      #     parameters:
      #       - name: product_id
      #         in: query
      #         description: Sorgulanacak ürünün ID'si
      #         required: true
      #         schema:
      #           type: string
    

Bu şekilde, ajanın S3'teki dinamik veya yapılandırılmış verilere erişimini genişletebilirsiniz. Bu, agent'ı çok daha yetenekli ve kullanışlı hale getirir.

3. İstem Optimizasyonu ve Prompt Mühendisliği

Ajanınızın performansını artırmanın en etkili yollarından biri, istem mühendisliğine yatırım yapmaktır. Bu, sadece kullanıcıya sorduğunuz soruları değil, aynı zamanda ajana verdiğiniz talimatları (instruction) ve Bilgi Tabanından çekilen bilgiyi nasıl kullanacağını da içerir. Şunları deneyin:

  • Açık ve Kapsamlı Talimatlar: Ajanın görevini, beklentilerini ve Bilgi Tabanı ile nasıl etkileşime gireceğini net bir şekilde tanımlayın.
  • Örnekler (Few-shot prompting): Ajana başarılı etkileşim örnekleri sunarak, belirli senaryolarda nasıl davranması gerektiğini öğretin.
  • XML etiketleri veya JSON formatları: Ajanın yanıtlarını belirli bir formatta döndürmesini isteyerek, çıktının işlenebilirliğini artırın.

Uzman İpucu: Ajanınızın performansını sürekli olarak izleyin ve kullanıcı geri bildirimlerini toplayın. Bu geri bildirimler, istemlerinizi ve veri kaynağı stratejilerinizi iyileştirmeniz için değerli bilgiler sağlar.

4. Güvenlik ve Erişim Yönetimini Sağlamlaştırın

IAM izinlerini sürekli olarak en az ayrıcalık (Least Privilege) prensibine göre ayarlayın. Sadece gerekli olan izinleri verin ve düzenli olarak güvenlik denetimleri yapın. S3 kovalarınızı doğru bir şekilde şifreleyin ve erişim günlüklerini (Access Logs) etkinleştirerek kimlerin ne zaman verilere eriştiğini takip edin.

5. Mobil Uyumluluk ve Kullanıcı Deneyimi

Eğer Bedrock Agent'ınız bir web uygulaması veya mobil arayüz aracılığıyla kullanılıyorsa, kullanıcı deneyimini optimize etmek önemlidir. Duyarlı (responsive) tasarımlar kullanarak, farklı ekran boyutlarında sorunsuz bir deneyim sağlayın. CSS media query'ler bu konuda size yardımcı olabilir:


      /* Genel stiller */
      body {
          font-family: Arial, sans-serif;
          margin: 0;
          padding: 15px;
      }

      .chat-container {
          max-width: 800px;
          margin: 20px auto;
          background-color: #f9f9f9;
          border-radius: 8px;
          box-shadow: 0 2px 10px rgba(0,0,0,0.1);
          padding: 15px;
      }

      /* Mobil cihazlar için özel stiller */
      @media (max-width: 768px) {
          .chat-container {
              margin: 10px;
              border-radius: 0; /* Köşeleri kaldırarak tam ekran görünümü */
              box-shadow: none;
              padding: 10px;
          }

          input[type="text"], button {
              width: 100%;
              margin-bottom: 10px;
          }
      }
    

Bu örnek, bir sohbet arayüzünün mobil cihazlarda daha iyi görünmesini sağlayacak temel bir medya sorgusunu göstermektedir. Ajanınızın çıktılarının da (eğer görsel veya tablo içeriyorsa) mobil cihazlarda düzgün bir şekilde görüntülendiğinden emin olun.

Bu gelişmiş stratejileri ve en iyi uygulamaları benimseyerek, sadece '[retrieved information]' hatasından kurtulmakla kalmayacak, aynı zamanda işletmenizin ihtiyaçlarına uygun, güvenilir ve yüksek performanslı Bedrock Agent'ları oluşturacaksınız. Unutmayın, yapay zeka ajanları dinamik sistemlerdir ve sürekli izleme, ayarlama ve iyileştirme gerektirirler.

Sonuç: Ajanınızı Tekrar Yola Getirmek ve Geleceğe Bakmak

AWS Bedrock Agent'ları ve S3 entegrasyonu, Büyük Dil Modellerinin gücünü kurumsal verilerle birleştirerek işletmeler için devrim niteliğinde çözümler sunma potansiyeli taşır. Ancak, bu potansiyeli tam olarak gerçekleştirmek, '[retrieved information]' gibi sinir bozucu hataları anlamayı ve çözmeyi gerektirir. Bu makale boyunca, bu hatanın arkasındaki temel nedenleri—yetkilendirme eksiklikleri, veri formatı sorunları, senkronizasyon hataları, vektör veritabanı problemleri ve istem kalitesi—detaylı bir şekilde inceledik. Ayrıca, adım adım sorun giderme yaklaşımları ve ajanınızın performansını artırmak için gelişmiş stratejiler sunduk.

Unutmamalısınız ki, bu tür sorun giderme süreçleri genellikle bir dedektiflik hikayesine benzer. Her bir ipucu, CloudWatch günlükleri olsun, IAM politikaları olsun ya da S3'teki veri formatları olsun, sizi sorunun kök nedenine bir adım daha yaklaştırır. Sabır, metodik bir yaklaşım ve sürekli öğrenme, yapay zeka sistemleriyle çalışırken başarının anahtarıdır. Ajanınızı "isyanından" vazgeçirip tekrar göreve odaklanmasını sağlamak, sadece mevcut sorunu çözmekle kalmaz, aynı zamanda gelecekte daha sağlam ve güvenilir AI çözümleri inşa etme yeteneğinizi de artırır.

Yapay zeka teknolojileri hızla gelişmeye devam ederken, Bedrock Agent'ları gibi hizmetler, işletmelerin karmaşık iş akışlarını otomatikleştirmeleri ve müşteri deneyimlerini kişiselleştirmeleri için yeni kapılar açmaktadır. Doğru entegrasyon ve sorun giderme bilgisine sahip olarak, bu yeni nesil akıllı ajanların tüm potansiyelini serbest bırakmaya hazırsınız.

Sıkça Sorulan Sorular

Bedrock Agent'lar ve S3 entegrasyonu hakkında sıkça karşılaşılan bazı sorular ve cevapları:

Soru Cevap
Bedrock Agent neden '[retrieved information]' hatası verir? Bu hata, ajanın bir bilgi alma girişiminde başarısız olduğunu gösterir. En yaygın nedenler arasında eksik IAM izinleri, S3'teki veri formatı sorunları, Bilgi Tabanı senkronizasyon hataları, vektör veritabanı problemleri veya ajanın isteği doğru anlamaması yer alır.
IAM izinlerini nasıl kontrol edebilirim? AWS IAM konsolundan Bedrock Agent'ınızın yürütme rolü ve Bilgi Tabanınızın hizmet rolü için tanımlanmış politikaları ve güven ilişkilerini gözden geçirin. Gerekli S3 (s3:GetObject, s3:ListBucket) ve Bedrock (bedrock:Retrieve) izinlerinin mevcut olduğundan emin olun.
S3'e yüklediğim dosya türleri önemli mi? Evet, Bedrock Knowledge Bases şu anda TXT, CSV, JSON, XML, PDF, DOCX ve HTML dosyalarını destekler. Özellikle PDF'ler için metin seçilebilir olmasına dikkat edin; taranmış görüntülerden oluşan PDF'ler işlenemeyebilir.
Bilgi Tabanımı ne sıklıkla senkronize etmeliyim? S3'teki veri kaynağınızda herhangi bir değişiklik (yeni belge ekleme, mevcut belgeyi güncelleme veya silme) yaptığınızda Bilgi Tabanınızı senkronize etmeniz gerekir. Bu işlemi manuel olarak tetikleyebilir veya bir otomasyonla (örneğin, S3 olay tetikleyicileri ile bir Lambda fonksiyonu kullanarak) periyodik olarak çalıştırabilirsiniz.
Prompt mühendisliği 'retrieved information' hatasını çözmeye yardımcı olur mu? Evet, dolaylı olarak yardımcı olabilir. Eğer kullanıcının istemi (prompt) çok belirsizse veya bilgi tabanınızdaki verilerle zayıf bir şekilde ilişkiliyse, ajan doğru bilgiyi çekmekte zorlanabilir. Daha açık, hedefe yönelik istemler ve ajanın talimatlarını (instructions) iyileştirmek, arama alaka düzeyini artırabilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version