Çoklu Temsilci Sistemi Oluşturma

1. Giriş

Bu laboratuvarda, basit chatbot'ların ötesine geçerek dağıtılmış çok agent'lı bir sistem oluşturacaksınız.

Tek bir LLM soruları yanıtlayabilir ancak gerçek dünyadaki karmaşıklık genellikle uzmanlaşmış roller gerektirir. Arka uç mühendisinize kullanıcı arayüzü tasarlamasını veya tasarımcınıza veritabanı sorgularını optimize etmesini istemezsiniz. Benzer şekilde, tek bir göreve odaklanan ve karmaşık sorunları çözmek için birbirleriyle koordineli çalışan uzmanlaşmış yapay zeka aracıları oluşturabiliriz.

Aşağıdakilerden oluşan bir Kurs Oluşturma Sistemi oluşturacaksınız:

  • Araştırmacı Temsilci: Güncel bilgileri bulmak için google_search'ü kullanır.
  • Değerlendirme Ajanı: Araştırmayı kalite ve eksiksizlik açısından eleştirir.
  • İçerik Oluşturma Aracısı: Araştırmayı yapılandırılmış bir kursa dönüştürme.
  • Orchestrator Agent: İş akışını ve bu uzmanlar arasındaki iletişimi yönetir.

Neler öğreneceksiniz?

  • Web'de arama yapabilen bir araç kullanma aracısı (araştırmacı) tanımlayın.
  • Hakim için Pydantic ile yapılandırılmış çıkış uygulayın.
  • Agent-to-Agent (A2A) protokolünü kullanarak uzak temsilcilere bağlanın.
  • Araştırmacı ile yargıç arasında geri bildirim döngüsü oluşturmak için LoopAgent'ı oluşturun.
  • ADK'yı kullanarak dağıtılmış sistemi yerel olarak çalıştırın.
  • Çoklu aracı sistemini Google Cloud Run'a dağıtın.
  • İçerik oluşturucu aracısı için Cloud Run GPU'da Gemma modeli kullanın.

İhtiyacınız olanlar

  • Chrome gibi bir web tarayıcısı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi

2. Mimari ve Düzenleme İlkeleri

Öncelikle bu aracıların birlikte nasıl çalıştığını anlayalım. Kurs Oluşturma Ardışık Düzeni geliştiriyoruz.

Sistem Tasarımı

Mimari Diyagramı

Temsilcilerle düzenleme

Standart temsilciler (ör. Araştırmacı) çalışır. Orkestrasyon aracıları (ör. LoopAgent veya SequentialAgent) diğer aracıları yönetir. Kendi araçları yoktur; "araçları" yetki devridir.

  1. LoopAgent: Bu, kodda while döngüsü gibi çalışır. Bir koşul karşılanana (veya maksimum yineleme sayısına ulaşılana) kadar bir dizi aracı tekrar tekrar çalıştırır. Bu özelliği Araştırma Döngüsü için kullanırız:
    • Araştırmacı bilgi bulur.
    • Hakem, yanıtı eleştirir.
    • Judge "Başarısız" derse EscalationChecker döngünün devam etmesine izin verir.
    • Judge (Yargıç) "Geç" derse EscalationChecker (Yükseltme Kontrolü) döngüyü sonlandırır.
  2. SequentialAgent: Bu, standart bir komut dosyası yürütme işlemi gibi çalışır. Aracıları birbiri ardına çalıştırır. Bu bilgiyi üst düzey ardışık düzen için kullanırız:
    • Öncelikle Araştırma Döngüsü'nü (iyi verilerle tamamlanana kadar) çalıştırın.
    • Ardından, Content Builder'ı (içerik oluşturucu) çalıştırın.

Bunları birleştirerek nihai çıkışı oluşturmadan önce kendini düzeltebilen güçlü bir sistem oluştururuz.

3. Kurulum

Proje ayarlama

Google Cloud projesi oluşturma

  1. Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
  2. Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin.

Cloud Shell'i Başlatma

Cloud Shell, Google Cloud'da çalışan ve gerekli araçların önceden yüklendiği bir komut satırı ortamıdır.

  1. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir'i tıklayın.
  2. Cloud Shell'e bağlandıktan sonra kimlik doğrulamanızı onaylayın:
    gcloud auth list
    
  3. Projenizin yapılandırıldığını onaylayın:
    gcloud config get project
    
  4. Projeniz beklendiği gibi ayarlanmamışsa şu şekilde ayarlayın:
    export PROJECT_ID=<YOUR_PROJECT_ID>
    gcloud config set project $PROJECT_ID
    

Ortam Kurulumu

  1. Cloud Shell'i açın: Google Cloud Console'un sağ üst kısmındaki Cloud Shell'i etkinleştir simgesini tıklayın.

Başlangıç kodunu alma

  1. Başlangıç deposunu ana dizininize klonlayın:Ana dizininize gidin.
      cd ~
    
    Google Cloud DevRel Demos klasöründen bu codelab için gereken kodu klonlayın.
    git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git temp-repo && cd temp-repo && git sparse-checkout set agents/multi-agent-system && cd .. && mv temp-repo/agents/multi-agent-system . && rm -rf temp-repo
    
    Bu Codelab'in kodunu içeren klasöre gidin.
    cd multi-agent-system
    
  2. API'leri etkinleştirin: Gerekli Google Cloud hizmetlerini etkinleştirmek için aşağıdaki komutu çalıştırın:
    gcloud services enable \
        run.googleapis.com \
        artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        aiplatform.googleapis.com \
        compute.googleapis.com
    
  3. Bu klasörü düzenleyicinizde açın.
    cloudshell edit .
    

Ortamı ayarlama

  1. Ortam değişkenlerini ayarlayın. Bu değişkenleri depolamak için bir .env dosyası oluşturacağız. Böylece oturumunuzun bağlantısı kesilirse bu değişkenleri kolayca yeniden yükleyebilirsiniz.
    cat <<EOF > .env
    export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
    export GOOGLE_CLOUD_LOCATION=europe-west4
    export GOOGLE_GENAI_USE_VERTEXAI=true
    EOF
    
  2. Ortam değişkenlerini kaynaklandırma:
    source .env
    

4. 🕵️ Araştırmacı Ajan

Araştırma Ajanı

Araştırmacı bir uzmandır. Tek görevi bilgi bulmaktır. Bunun için Google Arama aracına erişmesi gerekir.

Araştırmacı neden ayrılmalıdır?

Ayrıntılı İnceleme: Neden her şeyi tek bir temsilci yapmıyor?

Küçük ve odaklanmış aracıların değerlendirilmesi ve hata ayıklaması daha kolaydır. Araştırma kötüyse Araştırmacı istemini yineleyin. Kurs biçimlendirmesi kötüyse İçerik Oluşturucu'da yineleme yaparsınız. Tek bir "her şeyi yap" isteminde bir şeyi düzeltmek genellikle başka bir şeyi bozar.

  1. Cloud Shell'de çalışıyorsanız Cloud Shell düzenleyiciyi açmak için aşağıdaki komutu çalıştırın:
    cloudshell workspace .
    
  2. agents/researcher/agent.py adlı kişiyi aç.
  3. researcher aracısını tanımlayan aşağıdaki kodu inceleyin:
    # ... existing imports ...
    
    # Define the Researcher Agent
    researcher = Agent(
        name="researcher",
        model=MODEL,
        description="Gathers information on a topic using Google Search.",
        instruction="""
        You are an expert researcher. Your goal is to find comprehensive and accurate information on the user's topic.
        Use the `google_search` tool to find relevant information.
        Summarize your findings clearly.
        If you receive feedback that your research is insufficient, use the feedback to refine your next search.
        """,
        tools=[google_search],
    )
    
    root_agent = researcher
    

Temel Kavram: Araç Kullanımı

tools=[google_search] değerini ilettiğimize dikkat edin. ADK, bu aracı LLM'ye açıklama karmaşıklığını yönetir. Model bilgiye ihtiyaç duyduğuna karar verdiğinde yapılandırılmış bir araç çağrısı oluşturur, ADK google_search Python işlevini yürütür ve sonucu modele geri gönderir.

5. ⚖️ The Judge Agent

Judge Agent

Araştırmacı çok çalışır ancak LLM'ler tembel olabilir. Çalışmayı incelemek için bir Yargıcı'ya ihtiyacımız var. Hakim, araştırmayı kabul eder ve yapılandırılmış bir Geçti/Kaldı değerlendirmesi döndürür.

Yapılandırılmış Çıkış

Ayrıntılı İnceleme: İş akışlarını otomatikleştirmek için tahmin edilebilir çıktılara ihtiyacımız vardır. Dağınık bir metin yorumunun programatik olarak ayrıştırılması zordur. JSON şeması (Pydantic kullanılarak) zorunlu kılınarak, Hakim'in kodumuzun güvenilir bir şekilde işlem yapabileceği bir boolean pass veya fail döndürmesi sağlanır.

  1. agents/judge/agent.py adlı kişiyi aç.
  2. JudgeFeedback şemasını ve judge aracısını tanımlayan aşağıdaki kodu inceleyin.
    # 1. Define the Schema
    class JudgeFeedback(BaseModel):
        """Structured feedback from the Judge agent."""
        status: Literal["pass", "fail"] = Field(
            description="Whether the research is sufficient ('pass') or needs more work ('fail')."
        )
        feedback: str = Field(
            description="Detailed feedback on what is missing. If 'pass', a brief confirmation."
        )
    
    # 2. Define the Agent
    judge = Agent(
        name="judge",
        model=MODEL,
        description="Evaluates research findings for completeness and accuracy.",
        instruction="""
        You are a strict editor.
        Evaluate the 'research_findings' against the user's original request.
        If the findings are missing key info, return status='fail'.
        If they are comprehensive, return status='pass'.
        """,
        output_schema=JudgeFeedback,
        # Disallow delegation because it should only output the schema
        disallow_transfer_to_parent=True,
        disallow_transfer_to_peers=True,
    )
    
    root_agent = judge
    

Temel Kavram: Aracı Davranışını Kısıtlama

disallow_transfer_to_parent=True ve disallow_transfer_to_peers=True değerlerini ayarladık. Bu, Hakim'i yalnızca yapılandırılmış JudgeFeedback döndürmeye zorlar. Kullanıcıyla "sohbet etmeye" veya başka bir temsilciye yetki vermeye karar veremez. Bu, mantık akışımızda belirleyici bir bileşen olmasını sağlar.

6. ✍️ İçerik Oluşturucu Temsilcisi

İçerik Oluşturucu

İçerik Oluşturucu, yaratıcı yazardır. Onaylanan araştırmayı alıp kursa dönüştürür. Cloud Run tarafından sunulan bir Gemma modeli kullanır.

Öncelikle modeli barındıran Cloud Run hizmetine bakalım.

  1. ollama_backend/Dockerfile uygulamasını aç
  2. Burada, Dockerfile'ın nasıl bir Ollama görüntüsü kullandığını, 8080 bağlantı noktasındaki istekleri nasıl dinlediğini ve istenen modeli nasıl /model klasöründe sakladığını görebilirsiniz.
FROM ollama/ollama:latest

# Listen on all interfaces, port 8080 (Cloud Run default)
ENV OLLAMA_HOST 0.0.0.0:8080

# Store model weight files in /models
ENV OLLAMA_MODELS /models

⚙️ Dağıtım yaparken aşağıdaki yapılandırmaları ayarlarsınız:

  • GPU: Çıkarım iş yükleri için mükemmel fiyat-performans oranı nedeniyle NVIDIA L4 seçilmiştir. L4, 24 GB GPU belleği ve optimize edilmiş tensör işlemleri sunar. Bu nedenle Gemma gibi 270 milyon parametreli modeller için idealdir.
  • Bellek: Model yükleme, CUDA işlemleri ve Ollama'nın bellek yönetimini gerçekleştirmek için 16 GB sistem belleği
  • CPU: Optimum G/Ç işleme ve ön işleme görevleri için 8 çekirdek
  • Eşzamanlılık: Örnek başına 4 istek, GPU bellek kullanımıyla işleme hızını dengeler.
  • Zaman aşımı: 600 saniye, ilk model yükleme ve kapsayıcı başlatma işlemlerini karşılar.

Şimdi de Gemma modelini kullanan İçerik Oluşturucu temsilcisine göz atalım.

  1. agents/content_builder/agent.py adlı kişiyi aç.
  2. content_builder aracısını tanımlayan aşağıdaki kodu inceleyin.
# the `ollama-gemma-gpu` Cloud Run service URL which hosts the Gemma model
target_url = os.environ.get("OLLAMA_API_BASE")

# ... existing code ...

# (Note: We use 'ollama/gemma3:270m' to align with ADK's expected prefix)
gemma_model_name = os.environ.get("GEMMA_MODEL_NAME", "gemma3:270m")
model = LiteLlm(
    model=f"ollama_chat/{gemma_model_name}",
    api_base=target_url
)

# 5. Define the Agent
content_builder = Agent(
    name="content_builder",
    model=model,
    description="Transforms research findings into a structured course.",
    instruction="""
    You are an expert course creator.
    Take the approved 'research_findings' and transform them into a well-structured, engaging course module.

    **Formatting Rules:**
    1. Start with a main title using a single `#` (H1).
    2. Use `##` (H2) for main section headings. These will be used for the Table of Contents.
    3. Use `###` (H3) for sub-sections within main sections.
    4. Use bullet points and clear paragraphs.
    5. Maintain a professional but engaging tone.

    **Structure Requirements:**
    - Begin with a brief Introduction section explaining what the learner will gain.
    - Organize content into 3-5 main sections with clear headings.
    - Include Key Takeaways at the end as a bulleted summary.
    - Keep each section focused and concise.

    Ensure the content directly addresses the user's original request.
    Do not include any preamble or explanation outside the course content itself.
    """,
)

root_agent = content_builder

Temel Kavram: Bağlam Yayılımı

"İçerik Oluşturucu, Araştırmacı'nın bulduklarını nasıl biliyor?" diye merak edebilirsiniz. ADK'da, bir işlem hattındaki aracılar session.state paylaşır. Daha sonra Orchestrator'da, Researcher ve Judge'in çıkışlarını bu paylaşılan duruma kaydedecek şekilde yapılandıracağız. İçerik Oluşturucu'nun istemi, bu geçmişe etkili bir şekilde erişebilir.

7. 🎻 Orkestra Şefi

Orchestrator Agent

Orchestrator, çoklu aracı ekibimizin yöneticisidir. Belirli görevleri yerine getiren uzman temsilcilerin (Araştırmacı, Yargıç, İçerik Oluşturucu) aksine, Düzenleyicinin görevi iş akışını koordine etmek ve bilgilerin aralarında doğru şekilde akmasını sağlamaktır.

🌐 Mimari: Temsilciden Temsilciye (A2A)

A2A Mimarisi

Bu laboratuvarda dağıtılmış bir sistem oluşturacağız. Tüm aracıları tek bir Python sürecinde çalıştırmak yerine bağımsız mikro hizmetler olarak dağıtırız. Bu sayede her aracı bağımsız olarak ölçeklenebilir ve tüm sistemin çökmesine neden olmadan başarısız olabilir.

Bunu mümkün kılmak için Agent-to-Agent (A2A) protokolünü kullanırız.

A2A Protokolü

Ayrıntılı Bilgi: Bir üretim sisteminde aracıların farklı sunucularda (hatta farklı bulutlarda) çalıştırılması gerekir. A2A protokolü, bu cihazların HTTP üzerinden birbirini keşfetmesi ve birbirleriyle konuşması için standart bir yol oluşturur. RemoteA2aAgent, bu protokolün ADK istemcisidir.

  1. agents/orchestrator/agent.py adlı kişiyi aç.
  2. Bağlantıları tanımlayan aşağıdaki kodu inceleyin.
    # ... existing code ...
    
    # Connect to the Researcher (Localhost port 8001)
    researcher_url = os.environ.get("RESEARCHER_AGENT_CARD_URL", "http://localhost:8001/a2a/agent/.well-known/agent-card.json")
    researcher = RemoteA2aAgent(
        name="researcher",
        agent_card=researcher_url,
        description="Gathers information using Google Search.",
        # IMPORTANT: Save the output to state for the Judge to see
        after_agent_callback=create_save_output_callback("research_findings"),
        # IMPORTANT: Use authenticated client for communication
        httpx_client=create_authenticated_client(researcher_url)
    )
    
    # Connect to the Judge (Localhost port 8002)
    judge_url = os.environ.get("JUDGE_AGENT_CARD_URL", "http://localhost:8002/a2a/agent/.well-known/agent-card.json")
    judge = RemoteA2aAgent(
        name="judge",
        agent_card=judge_url,
        description="Evaluates research.",
        after_agent_callback=create_save_output_callback("judge_feedback"),
        httpx_client=create_authenticated_client(judge_url)
    )
    
    # Content Builder (Localhost port 8003)
    content_builder_url = os.environ.get("CONTENT_BUILDER_AGENT_CARD_URL", "http://localhost:8003/a2a/agent/.well-known/agent-card.json")
    content_builder = RemoteA2aAgent(
        name="content_builder",
        agent_card=content_builder_url,
        description="Builds the course.",
        httpx_client=create_authenticated_client(content_builder_url)
    )
    

8. 🛑 Ayrıcalık Artırma Kontrolü

Bir döngünün durdurulması gerekir. Hakem "Geçti" derse döngüden hemen çıkıp İçerik Oluşturucu'ya geçmek istiyoruz.

BaseAgent ile özel mantık

Ayrıntılı Bilgi: Tüm temsilciler büyük dil modellerini kullanmaz. Bazen basit Python mantığına ihtiyacınız olur. BaseAgent, yalnızca kod çalıştıran bir aracı tanımlamanıza olanak tanır. Bu durumda, oturum durumunu kontrol ederiz ve EventActions(escalate=True) kullanarak LoopAgent'nin durmasını sağlarız.

  1. agents/orchestrator/agent.py içinde kalmaya devam ediyor.
  2. Aşağıdaki kod incelemeleri, hakimin geri bildirimini inceler ve hazır olduğunda bir sonraki adıma geçer.
    class EscalationChecker(BaseAgent):
        """Checks the judge's feedback and escalates (breaks the loop) if it passed."""
    
        async def _run_async_impl(
            self, ctx: InvocationContext
        ) -> AsyncGenerator[Event, None]:
            # Retrieve the feedback saved by the Judge
            feedback = ctx.session.state.get("judge_feedback")
            print(f"[EscalationChecker] Feedback: {feedback}")
    
            # Check for 'pass' status
            is_pass = False
            if isinstance(feedback, dict) and feedback.get("status") == "pass":
                is_pass = True
            # Handle string fallback if JSON parsing failed
            elif isinstance(feedback, str) and '"status": "pass"' in feedback:
                is_pass = True
    
            if is_pass:
                # 'escalate=True' tells the parent LoopAgent to stop looping
                yield Event(author=self.name, actions=EventActions(escalate=True))
            else:
                # Continue the loop
                yield Event(author=self.name)
    
    escalation_checker = EscalationChecker(name="escalation_checker")
    

Temel Kavram: Etkinlikler Aracılığıyla Kontrol Akışı

Ajanlar yalnızca metinle değil, Etkinlikler ile de iletişim kurar. Bu aracı, escalate=True ile bir etkinlik oluşturarak üst öğesine (LoopAgent) bir sinyal gönderir. LoopAgent, bu sinyali yakalayacak ve döngüyü sonlandıracak şekilde programlanmıştır.

9. 🔁 Araştırma Döngüsü

Research Loop

Geri bildirim döngüsüne ihtiyacımız var: Araştırma -> Değerlendirme -> (Başarısız) -> Araştırma -> ...

  1. agents/orchestrator/agent.py dilinde.
  2. Aşağıdaki kodun research_loop tanımını nasıl yaptığını inceleyin.
    research_loop = LoopAgent(
        name="research_loop",
        description="Iteratively researches and judges until quality standards are met.",
        sub_agents=[researcher, judge, escalation_checker],
        max_iterations=3,
    )
    

Temel Kavram: LoopAgent

LoopAgent, sub_agents öğelerini sırayla gösterir.

  1. researcher: Verileri bulur.
  2. judge: Verileri değerlendirir.
  3. escalation_checker: yield Event(escalate=True) olup olmayacağına karar verir. escalate=True gerçekleşirse döngü erken sonlanır. Aksi takdirde, araştırmacıdan (max_iterations'ya kadar) yeniden başlatılır.

10. 🔗 The Final Pipeline

Son Ardışık Düzen

Tüm bilgiler derleniyor...

  1. agents/orchestrator/agent.py dilinde.
  2. Dosyanın alt kısmında root_agent simgesinin nasıl tanımlandığını inceleyin.
    root_agent = SequentialAgent(
        name="course_creation_pipeline",
        description="A pipeline that researches a topic and then builds a course from it.",
        sub_agents=[research_loop, content_builder],
    )
    

Temel Kavram: Hiyerarşik Bileşim

research_loop'nın kendisinin de bir ajan (LoopAgent) olduğunu unutmayın. Bu ajana, SequentialAgent içindeki diğer tüm alt ajanlar gibi davranırız. Bu birleştirilebilirlik özelliği sayesinde basit kalıpları (diziler içindeki döngüler, yönlendiriciler içindeki diziler vb.) iç içe yerleştirerek karmaşık mantıklar oluşturabilirsiniz.

11. 🚀 Cloud Run'a dağıtma

Her aracı, Cloud Run'da ayrı bir hizmet olarak dağıtacağız. Buna kurs oluşturucu kullanıcı arayüzü için bir Cloud Run hizmeti ve Gemma modeli için GPU'ları kullanan bir Cloud Run hizmeti dahildir.

Dağıtım Yapılandırmasını Anlama

Aracıları Cloud Run'a dağıtırken davranışlarını ve bağlantılarını yapılandırmak için çeşitli ortam değişkenleri iletiyoruz:

  • GOOGLE_CLOUD_PROJECT: Temsilcinin, günlük kaydı ve Vertex AI çağrıları için doğru Google Cloud projesini kullanmasını sağlar.
  • GOOGLE_GENAI_USE_VERTEXAI: Aracı çerçevesine (ADK), Gemini API'lerini doğrudan çağırmak yerine model çıkarımı için Vertex AI'ı kullanmasını söyler.
  • [AGENT]_AGENT_CARD_URL: Bu, Orchestrator için çok önemlidir. Orkestratöre uzak aracıların nerede bulunacağını bildirir. Bu ayarı dağıtılan Cloud Run URL'sine (özellikle aracı kartı yolu) ayarlayarak Orchestrator'ın internet üzerinden Araştırmacı, Yargıç ve İçerik Oluşturucu ile iletişim kurmasını ve bunları bulmasını sağlarız.

Tüm aracıları Cloud Run hizmetlerine dağıtmak için aşağıdaki komut dosyasını çalıştırın.

Öncelikle komut dosyasının yürütülebilir olduğundan emin olun.

chmod u+x ~/multi-agent-system/deploy.sh

Not Her hizmet sırayla dağıtıldığından bu işlemin tamamlanması birkaç dakika sürer.

~/multi-agent-system/deploy.sh

12. Kurs oluşturma

Kurs İçerik Üreticisi web sitesini açın. Course Creator Cloud Run hizmeti, komut dosyasından dağıtılan son hizmettir. Kurs oluşturucunun URL'sini https://course-creator-..run.app olarak tanımlayabilirsiniz. Bu, dağıtım komut dosyasının nihai çıkış satırı olmalıdır.

Ardından bir kurs fikri yazın (ör. "lineer cebir").

Temsilcileriniz kursunuz üzerinde çalışmaya başlar.

Son Ardışık Düzen

13. Temizleme

Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız hizmetlerinizi ve kapsayıcı resimlerinizi silmek için aşağıdaki adımları uygulayın.

1. Cloud Run hizmetlerini silme

Temizliğin en etkili yolu, Cloud Run'a dağıttığınız hizmetleri silmektir.

# Delete the main agent and app services
gcloud run services delete researcher content-builder judge orchestrator course-creator \
    --region $REGION --quiet

# Delete the GPU backend (Ollama)
gcloud run services delete ollama-gemma-gpu \
    --region $OLLAMA_REGION --quiet

2. Artifact Registry görüntülerini silme

Dağıtım için --source işaretini kullandığınızda Google Cloud, kapsayıcı görüntülerinizi depolamak üzere Artifact Registry'de bir depo oluşturdu. Bunları kaldırmak ve depolama maliyetlerinden tasarruf etmek için depoyu silin:

gcloud artifacts repositories delete cloud-run-source-deploy --location us-east4 --quiet

3. Yerel Dosyaları ve Ortamı Kaldırma

Cloud Shell kabuk ortamınızı temiz tutmak için proje klasörünü ve yerel yapılandırmayı kaldırın:

cd ~
rm -rf multi-agent-system

4. (İsteğe bağlı) Projeyi silme

Bu Codelab için özel olarak bir proje oluşturduysanız Kaynakları Yönetme Sayfası üzerinden projeyi kapatarak başka faturalandırma yapılmamasını sağlayabilirsiniz.

14. Tebrikler!

Üretime hazır, dağıtılmış bir çoklu aracı sistemini başarıyla oluşturup dağıttınız.

Başarılarınız

  • Karmaşık bir görevi parçalara ayırma: Tek bir büyük istem yerine, çalışmayı uzmanlaşmış rollere (Araştırmacı, Yargıç, İçerik Oluşturucu) ayırdık.
  • Kalite Kontrolü Uygulandı: Yalnızca yüksek kaliteli bilgilerin son adıma ulaşmasını sağlamak için LoopAgent ve yapılandırılmış bir Judge kullandık.
  • Üretim için tasarlandı: Agent-to-Agent (A2A) protokolü ve Cloud Run'ı kullanarak her aracının bağımsız ve ölçeklenebilir bir mikro hizmet olduğu bir sistem oluşturduk. Bu yöntem, her şeyi tek bir Python komut dosyasında çalıştırmaktan çok daha sağlamdır.
  • Orkestrasyon: Net kontrol akışı kalıpları tanımlamak için SequentialAgent ve LoopAgent kullandık. *. Cloud Run GPU'ları: Cloud Run GPU'suna bir Gemma modeli dağıtıldı