Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

AutoGen tutorial

01. 01. 2024 4 min čtení intermediate

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í.

autogenmulti-agentmicrosoft