RMI ADK aracıları için gelişmiş araç yakalama

Genel Bakış

Büyük veri kümeleriyle çalışırken ham verilerin doğrudan modelden geçirilmesi sorunlara neden olur: Yanıtlar yavaşlar, jeton maliyetleri artar ve akıl yürütme hataları ortaya çıkar. RMI verileri milyonlarca satır içerebilir. Bu nedenle, aracının sınırsız miktarda sorgu oluşturmasına ve analiz için tümünü kullanmasına izin vermek, jeton açısından maliyetli olur ve bağlam penceresini şişirerek aracının sonraki her dönüşteki performansını düşürür.

Örneğin, RMI historical_travel_time tablosu üzerindeki bir sorgu binlerce yol segmenti satırı döndürebilir. Tam sonuç kümesini tekrar görüşme geçmişine yerleştirmek, sonraki her dönüşü yavaşlatır, maliyeti artırır ve modeli nihai yanıtı sentezlemekten uzaklaştırır.

Yalnızca istem talimatları bu sorunları çözemez. Tek güvenilir yaklaşım, araç çağrılarını yakalamak ve büyük veri yüklerini modelin bağlam penceresinin dışına yönlendirmektir.

ADK araç geri çağırmaları

ADK, araç yürütmesini engellemek için geri çağırma kancaları sağlar. Büyük sonuç kümelerini işlemek için after_tool_callback kullanın:

  • before_tool_callback(tool, args, tool_context): Model bir araç seçtikten sonra ancak araç yürütülmeden önce çalışır.
  • after_tool_callback(tool, args, tool_context, tool_response): Araç tamamlandıktan sonra ancak sonuç modele geri dönmeden önce çalışır. Bu aracı araç yanıtını değiştirmek için kullanın.

Geri çağırma, oturum state erişimi olan bir tool_context nesnesi alır. Bu sayede, büyük veri kümelerini modelin istemine eklemeden, görüşme dönüşleri boyunca arka plan belleğinde saklayabilirsiniz.

# root_agent = llm_agent.Agent(
#     ...,
#     after_tool_callback=stash_and_truncate_results,
# )

Yürütme sonrası kesme ve saklama

Amaç: Nihai çıkış için tam veri kümesini saklarken karar verme amacıyla modele küçük bir sorgu sonuçları örneği gösterin.

RMI aracısı için after_tool_callback, execute_sql sonuçlarını yakalar, oturum durumunda satırların tam listesini kaydeder ve toplam satır sayısıyla birlikte kısa bir örnek döndürür:

def stash_and_truncate_results(tool, args, tool_context, tool_response):
  if tool.name == "execute_sql" and "rows" in tool_response:
    rows = tool_response["rows"]
    tool_context.state["last_sql_result"] = rows      # keep everything
    tool_response["total_rows_fetched"] = len(rows)
    tool_response["rows"] = rows[:SAMPLE_LIMIT]        # show a sample
    tool_response["message"] = (
        f"Showing {SAMPLE_LIMIT} of {len(rows)} rows. "
        "Full result stashed in background state."
    )
  return tool_response

Örnek döndürmek, gelecekteki tüm dönüşlerdeki giriş jetonlarını azaltarak maliyetleri ve yanıt sürelerini düşürür. Ayrıca, büyük sorgu sonuçlarının bağlam penceresini doldurmasını ve modelin talimatları uygulama yeteneğine zarar vermesini de önler.

Aracı isteminizde, araçların tasarım gereği örnek döndürdüğü açıkça belirtilmelidir. Bu bağlam olmadan model, kısmi veriler nedeniyle kafası karışabilir, eksik kayıtları uzlaştırmaya çalışırken işlem ve muhakeme jetonlarını boşa harcayabilir veya geri kalanını getirmek için gereksiz araç çağrıları başlatabilir.

Örnek: Büyük bir sonuç kümesini işleme

  1. Kullanıcı, "Şu anda 2'den fazla gecikme oranına sahip rotalar hangileri?" diye soruyor.
  2. Ajanın historical_travel_time ile ilgili sorgusu binlerce satır döndürüyor.
  3. after_tool_callback, oturum durumunda tam sonucu kaydeder ve yalnızca küçük bir örnekle birlikte toplam satır sayısını döndürür.
  4. Model, özetini oluşturmak için bu örnek üzerinde akıl yürütür.
  5. Uygulama veya aşağı akış araçları, tam tabloyu oluşturmak ya da kullanıcı için dışa aktarmak üzere tam veri kümesini doğrudan oturum durumundan okur.
RMI Agent Tool Interception

Temel çıkarımlar

  • Büyük yükleri istemlerin dışında tutun: Büyük veri kümelerini istem geçmişi üzerinden ileri geri geçirmek yerine oturum durumunda saklayın.
  • Büyük araç çıkışlarını kesme: Tam sonuçları oturum durumunda kaydederken modele küçük örnekler döndürmek için after_tool_callback kullanın.
  • Modele örnekler hakkında bilgi verin: Sonuçların, modelin kafasının karışmasını, gereksiz akıl yürütme jetonlarını ve gereksiz araç çağrılarını önlemek için örneklenmiş olduğunu açıklayan bir istem kuralı ekleyin.

Sonraki adımlar

  • ADK geri çağırma referansı: Model, aracı ve araç düzeyinde müdahale hakkında ayrıntılı bilgi için resmi ADK Geri Çağırma Kılavuzu'nu okuyun.

Katkıda bulunanlar

Nathaniel Thomas | Software Engineering Intern, Google Maps Platform