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:
- Menentukan dan mengonfigurasi runnable
- Menentukan dan menggunakan alat
- (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,
)