Mengembangkan agen AG2

AG2, fork AutoGen asli yang didorong oleh komunitas, adalah framework open source untuk membuat agen yang didukung AI. Halaman ini menunjukkan cara mengembangkan agen menggunakan template AG2 khusus framework (class AG2Agent di Vertex AI SDK untuk Python). Agen menampilkan kurs antara dua mata uang pada tanggal yang ditentukan. Berikut langkah-langkahnya:

  1. Menentukan dan mengonfigurasi runnable
  2. Menentukan dan menggunakan alat
  3. (Opsional) Menyesuaikan orkestrasi

Sebelum memulai

Pastikan lingkungan Anda sudah disiapkan dengan mengikuti langkah-langkah di Menyiapkan lingkungan.

Langkah 1. Menentukan dan mengonfigurasi runnable

Tentukan Versi model yang akan digunakan.

model = "gemini-1.5-flash-001"

Tentukan nama yang dapat dijalankan untuk digunakan.

runnable_name = "Get Exchange Rate Agent"

(Opsional) Konfigurasikan model.

from google.cloud.aiplatform.aiplatform import initializer

llm_config = {
    "config_list": [{
        "project_id":       initializer.global_config.project,
        "location":         initializer.global_config.location,
        "model":            "gemini-1.5-flash-001",
        "api_type":         "google",
    }]
}

Untuk mempelajari lebih lanjut cara mengonfigurasi model di AG2, lihat Penjelasan Mendalam Konfigurasi Model.

(Opsional) Konfigurasikan setelan keamanan model. Berikut adalah contoh cara mengonfigurasi setelan keamanan:

from vertexai.generative_models import HarmBlockThreshold, HarmCategory

safety_settings = {
    HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
}

for config_item in llm_config["config_list"]:
    config_item["safety_settings"] = safety_settings

Untuk mempelajari lebih lanjut opsi yang tersedia untuk setelan keamanan di Gemini, lihat Mengonfigurasi atribut keamanan.

Buat AG2Agent menggunakan konfigurasi model:

agent = agent_engines.AG2Agent(
    model=model,                  # Required.
    runnable_name=runnable_name,  # Required.
    llm_config=llm_config,        # Optional.
)

Jika Anda menjalankan di lingkungan interaktif (misalnya, terminal atau notebook Colab), Anda dapat menjalankan kueri sebagai langkah pengujian perantara:

response = agent.query(input="What is the exchange rate from US dollars to Swedish currency?", max_turns=1)

print(response)

Responsnya adalah kamus Python yang mirip dengan contoh berikut:

{'chat_id': None,
 'chat_history': [{'content': 'What is the exchange rate from US dollars to Swedish currency?',
   'role': 'assistant',
   'name': 'user'},
  {'content': 'I do not have access to real-time information, including currency exchange rates. To get the most up-to-date exchange rate from US dollars to Swedish Krona (SEK), I recommend using a reliable online currency converter or checking with your bank. \n',
   'role': 'user',
   'name': 'Exchange Rate Agent'}],
 'summary': 'I do not have access to real-time information, including currency exchange rates. To get the most up-to-date exchange rate from US dollars to Swedish Krona (SEK), I recommend using a reliable online currency converter or checking with your bank. \n',
 'cost': {'usage_including_cached_inference': {'total_cost': 5.2875e-06,
   'gemini-1.5-flash-001': {'cost': 5.2875e-06,
    'prompt_tokens': 34,
    'completion_tokens': 62,
    'total_tokens': 96}},
  'usage_excluding_cached_inference': {'total_cost': 5.2875e-06,
   'gemini-1.5-flash-001': {'cost': 5.2875e-06,
    'prompt_tokens': 34,
    'completion_tokens': 62,
    'total_tokens': 96}}},
 'human_input': []}

(Opsional) Penyesuaian lanjutan

Template AG2Agent menggunakan api_type=="google" secara default, karena template ini memberikan akses ke semua model dasar yang tersedia di Google Cloud. Untuk menggunakan model yang tidak tersedia melalui api_type=="google", Anda dapat menyesuaikan parameter llm_config.

Untuk mengetahui daftar model yang didukung di AG2 dan kemampuannya, lihat Penyedia Model. Kumpulan nilai yang didukung untuk llm_config= bersifat khusus untuk setiap model chat, jadi Anda harus melihat dokumentasi yang sesuai untuk mengetahui detailnya.

Gemini

Diinstal secara default.

Ini digunakan dalam template AG2Agent saat Anda menghilangkan argumen llm_config, misalnya

agent = agent_engines.AG2Agent(
    model=model,                # Required.
    runnable_name=runnable_name # Required.
)

Anthropic

Pertama, ikuti dokumentasi mereka untuk menyiapkan akun dan menginstal paket.

Selanjutnya, tentukan llm_config:

llm_config = {
    "config_list": [{
        "model": "claude-3-5-sonnet-20240620",            # Required.
        "api_key": "ANTHROPIC_API_KEY",  # Required.
        "api_type": "anthropic",                          # Required.
     }]
}

Terakhir, gunakan di template AG2Agent dengan kode berikut:

agent = agent_engines.AG2Agent(
    model="claude-3-5-sonnet-20240620",             # Required.
    runnable_name=runnable_name,                    # Required.
    llm_config=llm_config,                          # Optional.
)

OpenAI

Anda dapat menggunakan OpenAI bersama dengan ChatCompletions API Gemini.

Pertama, tentukan llm_config:

import google.auth
from google.cloud.aiplatform.aiplatform import initializer

project = initializer.global_config.project
location = initializer.global_config.location
base_url = f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project}/locations/{location}/endpoints/openapi"

# Note: the credential lives for 1 hour by default.
# After expiration, it must be refreshed.
creds, _ = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)

llm_config = {
    "config_list": [{
        "model": "google/gemini-1.5-flash-001",  # Required.
        "api_type": "openai",                    # Required.
        "base_url": base_url,                    # Required.
        "api_key": creds.token,                  # Required.
    }]
}

Terakhir, gunakan di template AG2Agent dengan kode berikut:

agent = agent_engines.AG2Agent(
    model="google/gemini-1.5-flash-001",  # Or "meta/llama3-405b-instruct-maas".
    runnable_name=runnable_name,          # Required.
    llm_config=llm_config,                # Optional.
)

Langkah 2. Menentukan dan menggunakan alat

Setelah menentukan model, langkah berikutnya adalah menentukan alat yang digunakan model untuk penalaran. Alat dapat berupa alat AG2 atau fungsi Python.

Saat menentukan fungsi, Anda harus menyertakan komentar yang sepenuhnya dan jelas menjelaskan parameter fungsi, fungsi yang dilakukan, dan yang ditampilkan fungsi. Informasi ini digunakan oleh model untuk menentukan fungsi mana yang akan digunakan. Anda juga harus menguji fungsi secara lokal untuk mengonfirmasi bahwa fungsi tersebut berfungsi.

Gunakan kode berikut untuk menentukan fungsi yang menampilkan nilai tukar:

def get_exchange_rate(
    currency_from: str = "USD",
    currency_to: str = "EUR",
    currency_date: str = "latest",
):
    """Retrieves the exchange rate between two currencies on a specified date.

    Uses the Frankfurter API (https://api.frankfurter.app/) to obtain
    exchange rate data.

    Args:
        currency_from: The base currency (3-letter currency code).
            Defaults to "USD" (US Dollar).
        currency_to: The target currency (3-letter currency code).
            Defaults to "EUR" (Euro).
        currency_date: The date for which to retrieve the exchange rate.
            Defaults to "latest" for the most recent exchange rate data.
            Can be specified in YYYY-MM-DD format for historical rates.

    Returns:
        dict: A dictionary containing the exchange rate information.
            Example: {"amount": 1.0, "base": "USD", "date": "2023-11-24",
                "rates": {"EUR": 0.95534}}
    """
    import requests
    response = requests.get(
        f"https://api.frankfurter.app/{currency_date}",
        params={"from": currency_from, "to": currency_to},
    )
    return response.json()

Untuk menguji fungsi sebelum menggunakannya di agen, jalankan perintah berikut:

get_exchange_rate(currency_from="USD", currency_to="SEK")

Responsnya akan mirip dengan berikut ini:

{'amount': 1.0, 'base': 'USD', 'date': '2024-02-22', 'rates': {'SEK': 10.3043}}

Untuk menggunakan alat di dalam template AG2Agent, Anda akan menambahkannya ke daftar alat di bagian argumen tools=:

agent = agent_engines.AG2Agent(
    model=model,                 # Required.
    runnable_name=runnable_name, # Required.
    tools=[get_exchange_rate],   # Optional.
)

Anda dapat menguji agen secara lokal dengan menjalankan kueri pengujian terhadapnya. Jalankan perintah berikut untuk menguji agen secara lokal menggunakan dolar AS dan Krona Swedia:

response = agent.query(input="What is the exchange rate from US dollars to Swedish currency?", max_turns=2)

Responsnya adalah kamus yang mirip dengan berikut ini:

{'chat_id': None,
 'chat_history': [{'content': 'What is the exchange rate from US dollars to Swedish currency?',
   'role': 'assistant',
   'name': 'user'},
  {'content': '',
   'tool_calls': [{'id': '2285',
     'function': {'arguments': '{"currency_from": "USD", "currency_to": "SEK"}',
      'name': 'get_exchange_rate'},
     'type': 'function'}],
   'role': 'assistant'},
  {'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}",
   'tool_responses': [{'tool_call_id': '2285',
     'role': 'tool',
     'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}"}],
   'role': 'tool',
   'name': 'user'},
  {'content': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
   'role': 'user',
   'name': 'Get Exchange Rate Agent'},
  {'content': 'What is the exchange rate from US dollars to Swedish currency?',
   'role': 'assistant',
   'name': 'user'},
  {'content': '',
   'tool_calls': [{'id': '4270',
     'function': {'arguments': '{"currency_from": "USD", "currency_to": "SEK"}',
      'name': 'get_exchange_rate'},
     'type': 'function'}],
   'role': 'assistant'},
  {'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}",
   'tool_responses': [{'tool_call_id': '4270',
     'role': 'tool',
     'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}"}],
   'role': 'tool',
   'name': 'user'},
  {'content': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
   'role': 'user',
   'name': 'Get Exchange Rate Agent'}],
 'summary': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
 'cost': {'usage_including_cached_inference': {'total_cost': 0.0002790625,
   'gemini-1.5-flash-001': {'cost': 0.0002790625,
    'prompt_tokens': 757,
    'completion_tokens': 34,
    'total_tokens': 791}},
  'usage_excluding_cached_inference': {'total_cost': 0.0002790625,
   'gemini-1.5-flash-001': {'cost': 0.0002790625,
    'prompt_tokens': 757,
    'completion_tokens': 34,
    'total_tokens': 791}}},
 'human_input': []}

Langkah 3. Menyesuaikan orkestrasi

Semua agen AG2 menerapkan antarmuka ConversableAgent, yang menyediakan skema input dan output untuk orkestrasi. AG2Agent memerlukan runnable yang akan di-build agar dapat merespons kueri. Secara default, AG2Agent akan mem-build model yang dapat dijalankan tersebut dengan mengikat model dengan alat.

Anda mungkin ingin menyesuaikan orkestrasi jika ingin (i) menerapkan Agen Asisten yang menyelesaikan tugas dengan model, atau (ii) menerapkan Agen Proxy Pengguna yang dapat mengeksekusi kode dan memberikan masukan kepada agen lain, atau (iii) menerapkan dan Agen Penalaran yang menyelesaikan tugas dengan model dan penalaran hierarki pemikiran. Untuk melakukannya, Anda harus mengganti runnable default saat membuat AG2Agent dengan menentukan argumen runnable_builder= dengan fungsi Python dari tanda tangan berikut:


def runnable_builder(
    **runnable_kwargs,
):

Hal ini memberikan opsi yang berbeda untuk menyesuaikan logika orkestrasi.

Agen Asisten

Dalam kasus paling sederhana, untuk membuat agen asisten tanpa orkestrasi, Anda dapat mengganti runnable_builder untuk AG2Agent.

def runnable_builder(**kwargs):
    from autogen import agentchat

    return agentchat.AssistantAgent(**kwargs)

agent = agent_engines.AG2Agent(
    model=model,
    runnable_name=runnable_name,
    runnable_builder=runnable_builder,
)

Agen Proxy Pengguna

Dalam kasus paling sederhana, untuk membuat agen asisten tanpa orkestrasi, Anda dapat mengganti runnable_builder untuk AG2Agent.

def runnable_builder(**kwargs):
    from autogen import agentchat

    return agentchat.UserProxyAgent(**kwargs)

agent = agent_engines.AG2Agent(
    model=model,
    runnable_name=runnable_name,
    runnable_builder=runnable_builder,
)

Agen Penalaran

Dalam kasus paling sederhana, untuk membuat agen penalaran tanpa orkestrasi, Anda dapat mengganti runnable_builder untuk AG2Agent.

def runnable_builder(**kwargs):
    from autogen import agentchat

    return agentchat.ReasoningAgent(**kwargs)

agent = agent_engines.AG2Agent(
    model=model,
    runnable_name=runnable_name,
    runnable_builder=runnable_builder,
)

Langkah berikutnya