AutoGen je pokročilý framework od Microsoftu pro vytváření konverzačních AI agentů, kteří dokážou spolupracovat na řešení komplexních problémů. V tomto tutorialu si ukážeme, jak nastavit multi-agentní systémy a využít jejich potenciál pro automatizaci různých úloh.
AutoGen: Multi-Agent Framework pro pokročilé AI aplikace¶
AutoGen je open-source framework od Microsoftu, který umožňuje vytváření složitých multi-agent systémů s využitím velkých jazykových modelů (LLM). Na rozdíl od jednoduchých chatbotů AutoGen přináší možnost orchestrace více AI agentů, kteří mezi sebou komunikují a spolupracují na řešení komplexních úkolů.
Klíčové koncepty a architektura¶
AutoGen je postavený na koncepci konverzačních agentů, kde každý agent má svou roli, instrukce a schopnosti. Základním stavebním kamenem je třída ConversableAgent, ze které dědí všechny specializované typy agentů:
- UserProxyAgent - reprezentuje člověka nebo systém, který iniciuje konverzace
- AssistantAgent - AI agent s přístupem k LLM pro generování odpovědí
- GroupChat - orchestruje komunikaci mezi více agenty
Instalace a základní nastavení¶
Pro začátek s AutoGen je potřeba nainstalovat základní závislosti:
pip install pyautogen
# Nebo s extra dependencies
pip install "pyautogen[teachable]"
Následně je nutné nakonfigurovat přístup k LLM. AutoGen podporuje různé providery včetně OpenAI, Azure OpenAI, nebo lokální modely:
import autogen
config_list = [
{
"model": "gpt-4-turbo",
"api_key": "your-api-key",
"api_type": "openai"
}
]
llm_config = {
"config_list": config_list,
"temperature": 0.7,
"timeout": 120
}
Vytvoření prvního multi-agent systému¶
Pojďme si ukázat praktický příklad dvou agentů - programátora a code reviewera, kteří spolupracují na vytvoření a kontrole kódu:
# Vytvoření User Proxy agenta
user_proxy = autogen.UserProxyAgent(
name="user_proxy",
system_message="Iniciuji úkoly a spouštím kód.",
code_execution_config={
"work_dir": "coding",
"use_docker": False
},
human_input_mode="NEVER"
)
# Vytvoření Assistant agenta - Programátor
programmer = autogen.AssistantAgent(
name="programmer",
system_message="""Jsi expert programátor v Pythonu.
Píšeš čistý, dobře dokumentovaný kód podle zadání.
Vždy přidej komentáře a docstring.""",
llm_config=llm_config
)
# Vytvoření Assistant agenta - Code Reviewer
reviewer = autogen.AssistantAgent(
name="code_reviewer",
system_message="""Jsi senior code reviewer.
Kontroluješ kód na chyby, best practices a optimalizace.
Poskytni konstruktivní feedback.""",
llm_config=llm_config
)
GroupChat pro orchestraci více agentů¶
Když máme více než dva agenty, využijeme GroupChat pro řízení konverzace:
# Vytvoření GroupChat s více agenty
groupchat = autogen.GroupChat(
agents=[user_proxy, programmer, reviewer],
messages=[],
max_round=10,
speaker_selection_method="round_robin"
)
# Vytvoření Group Chat Managera
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config=llm_config
)
# Spuštění konverzace
user_proxy.initiate_chat(
manager,
message="Vytvoř Python funkci pro validaci emailové adresy pomocí regex. Poté proveď code review."
)
Pokročilé funkce: Custom Tools a Function Calling¶
AutoGen podporuje integraci externích nástrojů a API prostřednictvím function calling. Agenti tak mohou volat specifické funkce podle potřeby:
import requests
from typing import Annotated
def get_weather(city: Annotated[str, "Název města"]) -> str:
"""Získá aktuální počasí pro zadané město."""
# Simulace API volání
return f"V městě {city} je 22°C, slunečno"
def search_web(query: Annotated[str, "Vyhledávací dotaz"]) -> str:
"""Vyhledá informace na webu."""
return f"Výsledky pro: {query}"
# Registrace funkcí u agenta
assistant_with_tools = autogen.AssistantAgent(
name="assistant_with_tools",
system_message="Jsi asistent s přístupem k externím nástrojům.",
llm_config={
**llm_config,
"functions": [
{
"name": "get_weather",
"description": "Získá počasí pro město",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "Název města"}
},
"required": ["city"]
}
}
]
}
)
# Registrace implementací funkcí
user_proxy.register_function(
function_map={
"get_weather": get_weather,
"search_web": search_web
}
)
Teachable Agents - učící se agenti¶
AutoGen nabízí také TeachableAgent, který si dokáže zapamatovat a učit se z předchozích interakcí:
from autogen.agentchat.contrib.teachable_agent import TeachableAgent
teachable_agent = TeachableAgent(
name="teachable_assistant",
system_message="Jsem učící se asistent, zapamatuji si nové informace.",
llm_config=llm_config,
teach_config={
"verbosity": 0, # 0 pro tichý režim
"reset_db": False, # nezrušit databázi při restartu
"path_to_db_dir": "./tmp/notebook",
"use_analyzer": True
}
)
# Agent si zapamatuje nové informace
user_proxy.initiate_chat(
teachable_agent,
message="Zapamatuj si: Náš hlavní server běží na portu 8080"
)
# Později agent použije naučené informace
user_proxy.initiate_chat(
teachable_agent,
message="Na jakém portu běží náš hlavní server?"
)
Best Practices a tipy pro produkci¶
Při nasazování AutoGen v produkčním prostředí je důležité dodržovat několik klíčových principů:
- Bezpečnost kódu - vždy používejte Docker kontejnery pro spouštění generovaného kódu
- Rate limiting - implementujte omezení na počet API volání
- Error handling - připravte se na selhání LLM a network chyby
- Logging - logujte všechny konverzace pro debugging a analýzu
- Cost monitoring - sledujte náklady na API volání
# Příklad robustní konfigurace pro produkci
llm_config_production = {
"config_list": config_list,
"temperature": 0.1, # nižší teplota pro konzistentnější výsledky
"timeout": 60,
"retry_wait_time": 10,
"max_retries": 3,
"cache_seed": 42 # pro reprodukovatelnost
}
# Bezpečná konfigurace spouštění kódu
safe_execution_config = {
"work_dir": "sandbox",
"use_docker": True,
"timeout": 30,
"last_n_messages": 5 # omezit kontext
}
Integrace s existującími systémy¶
AutoGen lze snadno integrovat do existujících aplikací prostřednictvím callback funkcí a custom message handlerů:
class CustomAgent(autogen.AssistantAgent):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.message_history = []
def receive(self, message, sender, request_reply=None, silent=False):
# Custom logika pro zpracování zpráv
self.message_history.append({
"from": sender.name,
"content": message.get("content", ""),
"timestamp": time.time()
})
# Volání parent metody
return super().receive(message, sender, request_reply, silent)
Shrnutí¶
AutoGen představuje významný krok vpřed v oblasti multi-agent AI systémů. Umožňuje vytváření sofistikovaných aplikací, kde různí specializovaní agenti spolupracují na řešení komplexních úkolů. Framework je ideální pro automatizaci code review, generování dokumentace, data analýzu nebo vytváření inteligentních asistentů. Díky flexibilní architektuře a podpoře různých LLM providerů je AutoGen vhodný jak pro experimentování, tak pro produkční nasazení v enterprise prostředí.