Program
Ajanik yapay zekâ alanında neredeyse her hafta yeni bir şey çıkıyor. AWS Multi-Agent Orchestrator, birden fazla yapay zekâ ajanını yönetmek için kullanabileceğimiz yeni bir çerçeve. İster bir müşteri destek sistemi ister uzmanlaşmış çoklu ajan uygulaması geliştiriyor olalım, bu çerçeve değerlendirilmeye değer.
Bu eğitimde, AWS Multi-Agent Orchestrator’ı benzersiz kılan özellikleri açıklayacak, ortam kurulumunu adım adım anlatacak ve çerçeveyi çalışırken görmek için bir demo proje geliştireceğim.
AWS Multi-Agent Orchestrator Nedir?
AWS Multi-Agent Orchestrator, yapay zekâ ajanlarını yönetmek ve karmaşık çok turlu konuşmaları kolaylaştırmak için tasarlanmış, araçlarla donatılmış esnek bir çerçevedir. Önceden oluşturulmuş bileşenleri sayesinde hızlı geliştirme ve dağıtım sağlar; böylece bu bileşenleri sıfırdan inşa etmek yerine uygulamamıza odaklanabiliriz.
AWS Multi-Agent Orchestrator aşağıdaki özellikleri sunar:
- Akıllı yönlendirme: Her sorgu için en uygun ajanı dinamik olarak belirler.
- Yayınlı ve yayınsız yanıtlar: Her iki ajan yanıt biçimini de destekler.
- Bağlam yönetimi: Çok turlu konuşmalarda tutarlılığı ve geçmişi yönetir.
- Genişletilebilirlik: Yeni ajanlar oluşturun veya mevcut olanları değiştirin.
- Evrensel dağıtım: AWS Lambda, yerel ortamlar ve bulut platformlarında çalışır.
Çerçeve hem Python hem de TypeScript’i destekleyecek şekilde uygulanmıştır.

Multi-Agent Orchestrator’ın nasıl çalıştığına genel bakış. (Kaynak)
Yukarıdaki diyagramda, sınıflandırıcının, mevcut ajanları, kullanıcı istemini ve önceki konuşma geçmişini değerlendirerek kullanıcı girdisi için en uygun ajanı seçtiğini görüyoruz. Ardından ajan isteği işler. İş akışı basit ama etkilidir.
AWS Multi-Agent Orchestrator’ı Kurma
Hızlı bir kurulum için dokümandaki talimatları takip edebilirsiniz.
İlk olarak, gerekli kütüphaneleri kurmak için yeni bir klasör ve yeni bir Python ortamı oluşturuyoruz.
mkdir test_multi_agent_orchestrator
cd test_multi_agent_orchestrator
python -m venv venv
source venv/bin/activate # On Windows use venv\\Scripts\\activate
Yeni sanal ortam etkinleştirildikten sonra kütüphaneyi kurun
pip install multi-agent-orchestrator
Sırada AWS hesabımızı yapılandırmak var. Bir AWS hesabınız yoksa, ücretsiz free tier hesabı oluşturun. Kaydolduktan sonra AWS CLI’ı indirin.
AWS CLI’ın da yapılandırılması gerekir. Ayrıntılı talimatlar için AWS CLI’ı kurma bölümünü izleyin; ancak daha kolay bir yaklaşım olarak aws configure komutunu kullanıp AWS erişim anahtarı kimliği ve gizli erişim anahtarını sağlayabilirsiniz. Bu anahtarları, kontrol panelinizde yeni bir kullanıcı oluşturduktan sonra alabilirsiniz.

Yeni bir kullanıcı oluşturulurken sağlanan erişim anahtarları.
Erişim anahtarları elinizdeyken aws configure komutunu çalıştırın, anahtarları girin, bölge adını seçin (tam listeye buradan ulaşabilirsiniz) size en yakın olanı seçin ve varsayılan çıktı biçimini json olarak ayarlayın.

CLI’nız doğru yapılandırıldıysa, aws sts get-caller-identity komutunu çalıştırmak AWS hesap kimliğinizi, kullanıcı kimliğinizi ve ARN’nizi göstermelidir.
Artık AWS CLI hazır olduğuna göre, ihtiyaç duyacağımız LLM’lere erişim vermek için AWS Bedrock’u yapılandırmamız gerekiyor. Amazon Bedrock, temel modelleri (örneğin Llama 3.2 veya Claude 3.5 Sonnet) bir API üzerinden test etmenizi ve çağırmanızı sağlayan bir hizmettir. Multi-Agent Orchestrator bu hizmeti varsayılan olarak iki modeli çağırmak için kullanır:
- Sınıflandırıcı olarak Claude 3.5 Sonnet
- Ajan olarak Claude 3 Haiku
Elbette bu modeller değiştirilebilir, ancak varsayılan seçimle devam edelim.
Bu iki modele erişim vermek için Amazon Bedrock > Model Access bölümüne gidin ve “Modify model access” seçeneğini tıklayın. İki modeli (isterseniz diğerlerini de) seçin ve gerekli bilgileri doldurun. Bu bölüm aşağıdaki gibi görünecektir:

İsteği tamamladıktan sonra modeller 1-2 dakika içinde kullanılabilir olacaktır. İstenen modeller için erişim verildiğinde, karşılarında “Access granted” görmelisiniz.

Not: Oluşturduğunuz kullanıcıya bir ilke atamanız gerekebilir. Bunu, makalemizin bir sonraki alt bölümünde (Kurulumunuzu test edin) sorunla karşılaşırsanız test edebilirsiniz. Öyleyse, bu sayfaya göz atın. Özetle, tanımladığınız kullanıcıya AmazonBedrockFullAccess erişimi vermeniz gerekir.

Kurulumunuzu test edin
Önceki adımların doğru şekilde ayarlanıp ayarlanmadığını kontrol etmek için bu kodu kullanın:
import uuid
import asyncio
import json
import sys
from typing import Optional, List, Dict, Any
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator, OrchestratorConfig
from multi_agent_orchestrator.agents import (
BedrockLLMAgent,
BedrockLLMAgentOptions,
AgentResponse,
AgentCallbacks,
)
from multi_agent_orchestrator.types import ConversationMessage, ParticipantRole
orchestrator = MultiAgentOrchestrator(
options=OrchestratorConfig(
LOG_AGENT_CHAT=True,
LOG_CLASSIFIER_CHAT=True,
LOG_CLASSIFIER_RAW_OUTPUT=True,
LOG_CLASSIFIER_OUTPUT=True,
LOG_EXECUTION_TIMES=True,
MAX_RETRIES=3,
USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED=True,
MAX_MESSAGE_PAIRS_PER_AGENT=10,
)
)
class BedrockLLMAgentCallbacks(AgentCallbacks):
def on_llm_new_token(self, token: str) -> None:
# handle response streaming here
print(token, end="", flush=True)
tech_agent = BedrockLLMAgent(
BedrockLLMAgentOptions(
name="Tech Agent",
streaming=True,
description=(
"Specializes in technology areas including software development, hardware, AI, "
"cybersecurity, blockchain, cloud computing, emerging tech innovations, and pricing/costs "
"related to technology products and services."
),
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
callbacks=BedrockLLMAgentCallbacks(),
)
)
orchestrator.add_agent(tech_agent)
async def handle_request(
_orchestrator: MultiAgentOrchestrator, _user_input: str, _user_id: str, _session_id: str
):
response: AgentResponse = await _orchestrator.route_request(
_user_input, _user_id, _session_id
)
# Print metadata
print("\nMetadata:")
print(f"Selected Agent: {response.metadata.agent_name}")
if response.streaming:
print("Response:", response.output.content[0]["text"])
else:
print("Response:", response.output.content[0]["text"])
if __name__ == "__main__":
USER_ID = "user123"
SESSION_ID = str(uuid.uuid4())
print("Welcome to the interactive Multi-Agent system. Type 'quit' to exit.")
while True:
# Get user input
user_input = input("\nYou: ").strip()
if user_input.lower() == "quit":
print("Exiting the program. Goodbye!")
sys.exit()
# Run the async function
asyncio.run(handle_request(orchestrator, user_input, USER_ID, SESSION_ID))
İstemde bulunup yanıt alabiliyorsanız her şey yolunda demektir.
AWS Multi-Agent Orchestrator ile Demo Proje
AWS Multi-Agent Orchestrator deposu, TypeScript ve Python’da birkaç örnek proje sunar. Şimdi iki ajandan oluşan basitleştirilmiş bir Python uygulaması yazacağız: Python Geliştirici Ajanı ve ML Uzmanı Ajanı.
Uygulama için basit bir arayüz oluşturmak üzere, açık kaynak bir Python paketi olan Chainlit’i de kullanacağız. Başlamak için gerekli kütüphaneleri kurun:
chainlit==1.2.0
multi_agent_orchestrator==0.0.18
Demo uygulamamız için aşağıdaki kodu kullanacağız, ancak önce açıklayalım:
- Gerekli kütüphaneleri içe aktarıyoruz.
“anthropic.claude-3-haiku-20240307-v1:0”modelini sınıflandırıcımız için kullanıyoruz. Bu sınıflandırıcı, yeni bir kullanıcı girdisi geldiğinde hangi ajanın kullanılacağını seçecek.- Oluşturduğumuz sınıflandırıcıyı bir
MultiAgentOrchestrator’a geçiriyor ve bazı yapılandırmaları tanımlıyoruz. BedrockLLMAgentsınıfı ajanlarımızı oluşturmak için kullanılır. Her ajan için birnamevedescriptionsağlanır. Bir ajan için erişilebilir modellerden herhangi birini seçebilir veya hatta modelleri yerelde çalıştırmak için Ollama kullanabilirsiniz.streaming=Trueayarlamak vecallbackolarakChainlitAgentCallbacks()’i geçirmek, ajanların yanıtları tamamı yerine akış olarak döndürmesini sağlar. Son olarak her ajanın orkestratöre eklenmesini sağlıyoruz.user_sessionayarlanır ve kullanıcı ile ajan mesajlarını ele alan ana bölüm tanımlanır.
### 1
import uuid
import chainlit as cl
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator, OrchestratorConfig
from multi_agent_orchestrator.classifiers import BedrockClassifier, BedrockClassifierOptions
from multi_agent_orchestrator.agents import AgentResponse
from multi_agent_orchestrator.agents import BedrockLLMAgent, BedrockLLMAgentOptions, AgentCallbacks
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator
from multi_agent_orchestrator.types import ConversationMessage
import asyncio
import chainlit as cl
class ChainlitAgentCallbacks(AgentCallbacks):
def on_llm_new_token(self, token: str) -> None:
asyncio.run(cl.user_session.get("current_msg").stream_token(token))
### 2
# Initialize the orchestrator & classifier
custom_bedrock_classifier = BedrockClassifier(BedrockClassifierOptions(
model_id='anthropic.claude-3-haiku-20240307-v1:0',
inference_config={
'maxTokens': 500,
'temperature': 0.7,
'topP': 0.9
}
))
### 3
orchestrator = MultiAgentOrchestrator(options=OrchestratorConfig(
LOG_AGENT_CHAT=True,
LOG_CLASSIFIER_CHAT=True,
LOG_CLASSIFIER_RAW_OUTPUT=True,
LOG_CLASSIFIER_OUTPUT=True,
LOG_EXECUTION_TIMES=True,
MAX_RETRIES=3,
USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED=False,
MAX_MESSAGE_PAIRS_PER_AGENT=10,
),
classifier=custom_bedrock_classifier
)
### 4
def create_python_dev():
return BedrockLLMAgent(BedrockLLMAgentOptions(
name="Python Developer Agent",
streaming=True,
description="Experienced Python developer specialized in writing, debugging, and evaluating only Python code.",
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
callbacks=ChainlitAgentCallbacks()
))
def create_ml_expert():
return BedrockLLMAgent(BedrockLLMAgentOptions(
name="Machine Learning Expert",
streaming=True,
description="Expert in areas related to machine learning including deep learning, pytorch, tensorflow, scikit-learn, and large language models.",
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
callbacks=ChainlitAgentCallbacks()
))
# Add agents to the orchestrator
orchestrator.add_agent(create_python_dev())
orchestrator.add_agent(create_ml_expert())
### 5
@cl.on_chat_start
async def start():
cl.user_session.set("user_id", str(uuid.uuid4()))
cl.user_session.set("session_id", str(uuid.uuid4()))
cl.user_session.set("chat_history", [])
@cl.on_message
async def main(message: cl.Message):
user_id = cl.user_session.get("user_id")
session_id = cl.user_session.get("session_id")
msg = cl.Message(content="")
await msg.send() # Send the message immediately to start streaming
cl.user_session.set("current_msg", msg)
response:AgentResponse = await orchestrator.route_request(message.content, user_id, session_id, {})
# Handle non-streaming or problematic responses
if isinstance(response, AgentResponse) and response.streaming is False:
# Handle regular response
if isinstance(response.output, str):
await msg.stream_token(response.output)
elif isinstance(response.output, ConversationMessage):
await msg.stream_token(response.output.content[0].get('text'))
await msg.update()
if __name__ == "__main__":
cl.run()
Artık uygulamayı çalıştırma zamanı. Bunun için önce chainlit run [app.py](<http://app.py/>) -w komutunu çalıştırın. Tarayıcınızda açılan yeni sekmede uygulamanızı artık test edebilirsiniz.

Ekran görüntüsünde de görebileceğiniz gibi, artık uygulamamızı test etmek ve ajanlarla sohbet etmek için bir arayüzümüz var.
İlk istem olan “Fransa’nın başkenti neresidir?” ajanlarımızdan hiçbiriyle ilgili olmadığından, sistem yanıt vermiyor. Bu, sohbetleri ilgili tutmak ve bu modelleri kullanırken gereksiz kredi harcamalarını önlemek için kritik önemdedir. Ancak ilgili bir soruyla istemde bulunulduğunda, Multi-Agent Orchestrator’ın akıllı yönlendirmesi sayesinde Machine Learning Expert ajanımız devreye girerek yanıt verir.
Sonuç
Bu blogda, yakın zamanda çıkan AWS Multi-Agent Orchestrator çerçevesini tanıttık, bazı benzersiz özelliklerini vurguladık, ortam kurulum adımlarını özetledik, Amazon Bedrock’un sunduğu temel modellere göz attık ve bir demo proje uyguladık.
Bu makalenin yazıldığı tarihte, çerçevenin kapsamlı ve detaylı bir dokümantasyonu bulunmuyor. Bellek ve araç kullanımı gibi diğer özelliklerden yararlanmak için kod tabanını okumanız ve sağlanan örnek projelere bakmanız gerekiyor.
Ajanik yapay zekâ çerçevelerini yakından takip etmek, bu hızlı tempolu alana ayak uydurmak için akıllıca bir seçimdir. AWS Multi-Agent Orchestrator, AWS hizmetlerinin altyapıları üzerine kurulu, umut vadeden bir seçenek ve gelişimini izlemeye değer.
Yapay Zeka alanında yüksek lisans öğrencisi ve yapay zeka teknik yazarı. En yeni yapay zeka teknolojilerine dair içgörüler paylaşıyorum, ML araştırmalarını erişilebilir kılıyor ve sizi ön planda tutmak için karmaşık YZ konularını sadeleştiriyorum.

