Temukan informasi mendetail tentang setiap komponen Framework Agen dengan cepat dalam referensi komprehensif ini.
Struktur Folder
Untuk mem-build agen, Anda membuat folder untuk agen tersebut, yang diberi nama sesuai agen dan berisi setidaknya file berikut:
agent.py
: File utama untuk agen. Anda harus menentukan agen root di bawah variabel globalroot_agent
.__init__.py
: File modul python. File ini setidaknya harus berisi barisfrom agents import Agent
untuk mengimpor classAgent
.
Secara opsional, sebaiknya tambahkan file berikut:
requirements.txt
: File persyaratan python untuk agen.README.md
: File README untuk agen. File ini harus berisi petunjuk untuk menyiapkan agen dan menjalankannya.
agent.py Minimum Dasar
Mem-build agen dimulai dengan membuat instance class Agent
. Agen
minimum harus memiliki atribut berikut:
name
: Nama agen.model
: Nama model LLM yang akan digunakan.instruction
: Petunjuk bahasa alami untuk agen.
Contoh:
from agents import Agent
root_agent = Agent(
model='gemini-1.5-flash',
name='root_agent',
instruction="Be polite and answer all users' questions.",
)
Untuk membuat agen minimum, Anda dapat menyalin folder _empty_agent
dan
mengubah file agent.py
.
Atribut
nama
name: str
Nama agen.
ID
- Nama harus mengikuti konvensi penamaan ID.
- String dianggap sebagai ID yang valid jika hanya berisi huruf alfanumerik (a-z) dan (0-9), atau garis bawah (_). ID yang valid tidak boleh diawali dengan angka, atau berisi spasi.
Unik
- Nama harus unik dalam seluruh hierarki agen.
Agen Root
- Meskipun variabel agen root harus diberi nama
root_agent
, Anda dapat menetapkan atribut nama agen root yang lebih bermakna.
- Meskipun variabel agen root harus diberi nama
model
model: str
Nama model LLM yang akan digunakan.
Wajib untuk Agen LLM
- model attribute hanya diperlukan untuk Agen LLM.
- Anda tidak perlu menetapkan atribut model untuk agen Sequential, Loop, atau non-LLM lainnya.
Agen Induk
- Anda dapat menghilangkan atribut model. Dalam hal ini, agen akan menggunakan atribut model agen induk / ancestor.
Format
- Format nama model bervariasi menurut vendor LLM.
- Untuk Gemini, tampilannya seperti
gemini-1.5-flash
, ataugemini-2.0-flash-exp
. - Untuk Anthropic di Vertex, tampilannya seperti
claude-3-5-sonnet-v2@20241022
- Meskipun desain framework memungkinkan vendor model apa pun, saat ini kami hanya mendukung Gemini dan Anthropic di Vertex.
petunjuk
instruction: str | InstructionProvider
Petunjuk natural language untuk agen.
Wajib untuk Agen LLM
- Petunjuk ini hanya diperlukan untuk Agen LLM.
- Anda tidak perlu menetapkan atribut petunjuk untuk agen Sequential, Loop, atau non-LLM lainnya.
Data Type
- Petunjuk dapat berupa string.
- Petunjuk juga dapat berupa InstructionProvider yang dapat dipanggil
InstructionProvider
- InstructionProvider ditentukan sebagai
Callable[[InvocationContext], str]
- Hal ini memungkinkan Anda menyediakan fungsi untuk membuat petunjuk secara dinamis berdasarkan konteks pemanggilan.
- InstructionProvider ditentukan sebagai
Status
- Petunjuk adalah template string, Anda dapat menggunakan sintaksis {var} untuk menyisipkan nilai dinamis ke dalam petunjuk.
var
digunakan untuk menyisipkan nilai variabel status bernama var.artifact.var
digunakan untuk menyisipkan konten teks artefak bernama var.- Jika variabel status atau artefak tidak ada, agen akan menampilkan
error. Jika ingin mengabaikan error, Anda dapat menambahkan
?
ke nama variabel, misalnya{var?}
.
Panduan
- Mulailah dengan menyatakan siapa agen tersebut, apa yang dapat dilakukannya, dan apa yang tidak dapat dilakukannya.
- Anda dapat menggunakan format markdown untuk membuat panduan lebih mudah dibaca, baik untuk manusia maupun model.
- Jika agen dapat melakukan beberapa tugas, berikan daftar tugas dan buat bagian terpisah untuk setiap tugas.
- Jika tugas memiliki beberapa langkah, berikan daftar langkah, dan petunjuk terperinci untuk setiap langkah.
- Jika agen dapat menggunakan alat, cantumkan alat tersebut di bagian atribut
tools
. Definisi alat memiliki petunjuk tentang cara menggunakannya, tetapi petunjuk mendetail tentang kapan harus menggunakannya dapat ditambahkan ke petunjuk agen untuk meningkatkan performa. - Untuk sistem multi-agen, jelaskan kapan sistem harus menyerahkannya ke agen lain.
- Anda dapat menyertakan contoh input dan output yang diharapkan dalam
petunjuk, Anda juga dapat menggunakan atribut
examples
untuk memberikan contoh. - Berikan petunjuk yang menyeluruh dan spesifik. Perlakukan agen sebagai karyawan baru yang sedang menjalani proses pelatihan.
- Jangan mengandalkan petunjuk tentang aturan yang harus diikuti 100% sepanjang waktu. Model secara inheren memiliki beberapa derajat kebebasan dan dapat membuat kesalahan. Andalkan alat dan callback untuk menerapkan aturan ketat.
deskripsi
description: str
Menjelaskan apa yang dapat dilakukan agen ini. Deskripsi ini dikirim ke model sebagai bagian dari petunjuk sistem sehingga:
Agen itu sendiri memahami kemampuannya sendiri berdasarkan deskripsi.
Agen memahami apa yang dapat dilakukan agen lain dan memutuskan apakah akan mentransfer berdasarkan deskripsinya.
global_instruction
global_instruction: str | InstructionProvider
Petunjuk global untuk seluruh hierarki agen.
Meskipun petunjuk memberi tahu agen tertentu apa yang harus dilakukan dan cara melakukannya, petunjuk global berlaku untuk semua agen di seluruh hierarki agen.
Penggunaan petunjuk global mirip dengan atribut petunjuk, termasuk jenis data, dukungan InstructionProvider, dan kemampuan untuk mengakses variabel dan artefak status.
- Identitas dan Perilaku
- Anda menggunakan petunjuk global untuk menetapkan identitas dan perilaku/ standar untuk seluruh hierarki agen, bukan cara melakukan tugas tertentu untuk agen tertentu.
generate_content_config
generate_content_config: google.genai.types.GenerateContentConfig
Konfigurasi model tambahan untuk agen. Nilai ini akan digabungkan ke dalam permintaan ke model.
Ada beberapa atribut yang tidak boleh Anda tetapkan di kolom ini karena
dikelola oleh framework: - tools
- system_instruction
-
response_schema
contoh
examples: list[Example] | BaseExampleProvider
Contoh few-shot untuk agen. Riset menunjukkan bahwa memberikan contoh sedikit dapat meningkatkan performa agen.
- Contoh Statis
- Anda dapat memberikan daftar contoh statis. Contohnya ditentukan sebagai
berikut, dengan
input
adalah konten input, danoutput
adalah konten output yang diharapkan.
- Anda dapat memberikan daftar contoh statis. Contohnya ditentukan sebagai
berikut, dengan
class Example(BaseModel):
input: types.Content
output: list[types.Content]
Daftar Output
- Output-nya dapat berupa daftar
Content
. - Jadi, Anda dapat menentukan urutan konten sebagai output yang diharapkan. Misalnya, model harus membuat panggilan fungsi terlebih dahulu, lalu membuat beberapa teks.
- Output-nya dapat berupa daftar
BaseExampleProvider
- Anda juga dapat memberikan instance class
BaseExampleProvider
. - Class
BaseExampleProvider
memiliki metodeget_examples(query: str)
dan menampilkan daftarExample
. - Dengan
BaseExampleProvider
, Anda dapat membuat contoh secara dinamis berdasarkan kueri.
- Anda juga dapat memberikan instance class
greeting_prompt
greeting_prompt: str
Anda dapat menetapkan perintah yang akan dikirim ke model untuk membuat pesan salam. Perintah salam akan digunakan saat Anda memanggil agen dengan sesi kosong dan input pengguna kosong.
penerapan
planning: bool
Menetapkan planning
ke Benar (True) akan mengaktifkan mode perencanaan untuk agen. Dalam
mode perencanaan, agen akan membuat rencana terlebih dahulu untuk menangani kueri pengguna,
lalu menjalankan rencana tersebut langkah demi langkah.
code_executor
code_executor: BaseCodeExecutor
Agen yang Anda buat memiliki kemampuan untuk memecahkan masalah dengan menulis kode dan menjalankan kode.
Ada dua cara untuk mengaktifkan eksekusi kode:
Beberapa model memiliki kemampuan untuk mengeksekusi kode secara langsung. Misalnya, model Gemini 2.0 dalam mode aktif menghasilkan dan mengeksekusi kode secara otomatis, tanpa memerlukan alat eksekusi kode terpisah.
Anda dapat menetapkan atribut
code_executor
ke instance classBaseCodeExecutor
untuk mengaktifkan eksekusi kode. Saat ini, kami memiliki classVertexCodeExecutor
danUnsafeLocalCodeExecutor
(Karena kode yang dihasilkan oleh LLM dapat merusak, hanya gunakanUnsafeLocalCodeExecutor
untuk membuat prototipe.) yang dapat Anda gunakan untuk mengeksekusi kode di Vertex AI. Eksekutor kode lainnya akan ditambahkan di masa mendatang.
input_schema
input_schema: type[BaseModel]
Agen akan menerapkan skema input saat Anda menentukan model Pydantic sebagai
input_schema
. Konten input harus berupa string JSON yang sesuai dengan skema.
output_schema
output_schema: type[BaseModel]
Agen akan menerapkan skema output saat Anda menentukan model Pydantic sebagai
output_schema
. Konten output akan selalu berupa string JSON yang sesuai
dengan skema.
output_key
output_key: str
Agen akan menyimpan outputnya ke variabel status dengan nama yang ditentukan
oleh atribut output_key
.
include_contents
include_contents: Literal['default', 'none']
Agen akan menyertakan konten histori sesi (histori chat) secara default. Anda dapat menetapkan atribut include_contents
ke none
untuk menonaktifkan perilaku ini, dan dalam hal ini agen tertentu tidak akan melihat histori chat. Hal ini
berguna jika agen tidak perlu mengetahui histori chat.
Alat
Kemampuan untuk menggunakan alat memisahkan agen dari model saja. Sama seperti kemampuan untuk menggunakan alat dengan cara yang kompleks dan serbaguna dianggap sebagai karakteristik penentu manusia.
Dalam framework agen, Anda memberikan alat kepada agen melalui atribut tools
.
Atribut tools
adalah daftar alat, setiap alat dapat berupa:
- Fungsi python.
- Class yang mengimplementasikan class
BaseTool
.
Alat Fungsi Python
Anda dapat menentukan fungsi python sebagai alat.
Parameter
- Fungsi Anda dapat memiliki sejumlah parameter.
- Setiap parameter dapat berupa jenis apa pun, selama jenisnya dapat diserialisasi JSON.
- Jangan menetapkan nilai default untuk parameter Anda, karena tidak didukung oleh model.
Jenis Nilai yang Ditampilkan
- Jenis nilai yang ditampilkan harus berupa dict.
- Jika Anda menampilkan apa pun yang bukan merupakan dict, framework akan menggabungkannya
ke dalam dict dengan satu kunci
result
. - Coba buat nilai yang ditampilkan bersifat deskriptif. Misalnya, alih-alih menampilkan
kode error angka, tampilkan
error_message: str
dengan pesan error yang dapat dibaca manusia. Ingat bahwa nilai yang ditampilkan ini ditujukan untuk dibaca dan dipahami model, bukan untuk dieksekusi oleh potongan kode. - Sebaiknya gunakan kunci
status
untuk menunjukkansuccess
,error
,pending
, dll., sehingga model memahami status umum operasi.
Docstring
- Docstring fungsi akan digunakan sebagai deskripsi alat dan dikirim ke model. Jadi, semakin baik docstring, semakin baik model dapat menggunakan alat tersebut.
Kemudahan
- Meskipun Anda memiliki banyak kebebasan dalam menentukan fungsi, Anda harus menjaganya tetap sederhana dan mudah sehingga model dapat menggunakannya dengan lebih akurat.
- Memiliki lebih sedikit parameter lebih baik daripada memiliki banyak parameter.
- Gunakan jenis data sederhana sebanyak mungkin, misalnya
str
,int
, bukan class kustom. - Nama fungsi dan parameter sangat penting. Jika Anda memiliki
fungsi yang disebut
do_stuff()
, meskipun Anda memberi tahu model bahwa fungsi tersebut digunakan untuk membatalkan penerbangan, model mungkin masih menolak untuk menggunakannya. - Pisahkan fungsi kompleks menjadi beberapa fungsi yang lebih kecil. Misalnya, pisahkan
update_profile(profile: Profile)
menjadiupdate_name(name: str)
,update_age(age: int)
, dll.
Referensi dalam Petunjuk
- Anda dapat mereferensikan alat dalam petunjuk menggunakan namanya.
- Jika nama dan docstring fungsi cukup mendetail, Anda hanya dapat berfokus pada kapan harus menggunakan alat dalam petunjuk.
- Beri tahu agen cara menangani nilai return yang berbeda. Misalnya, jika alat menampilkan pesan error, apakah agen harus menyerah, mencoba lagi, atau meminta informasi selengkapnya?
- Alat dapat digunakan secara berurutan, satu alat dapat bergantung pada output alat lain. Jelaskan urutan dalam petunjuk.
Konteks Alat
Dalam fungsi alat, Anda dapat menambahkan parameter khusus tool_context:
ToolContext
untuk mendapatkan informasi tambahan tentang konteks tempat alat tersebut
dipanggil.
Class ToolContext
berada dalam modul agents.types
, dan memiliki atribut
berikut:
function_call_event_id: str
- ID peristiwa tempat panggilan alat dipicu.
function_call_id: str
- ID panggilan fungsi.
state: State
- Objek seperti dict untuk membaca dan memperbarui variabel status.
actions: EventActions
- Tindakan tambahan yang dapat dilakukan alat ini.
Class EventActions
berada dalam modul agents.events
, dan memiliki atribut
berikut untuk memungkinkan alat melakukan tindakan tambahan:
skip_summarization: bool
- Jika disetel ke True, framework akan melewati langkah ringkasan untuk peristiwa tempat alat dipanggil.
transfer_to_agent: str
- Jika ditetapkan, framework akan ditransfer ke agen dengan nama yang ditentukan
oleh atribut
transfer_to_agent
.
- Jika ditetapkan, framework akan ditransfer ke agen dengan nama yang ditentukan
oleh atribut
escalate: bool
- Jika disetel ke True, agen akan mengeskalasikan kueri ke agen induknya. Eskalasi dari agen turunan dalam LoopFlow berarti akhir loop.
AsyncFunctionTool
AsyncFunctionTool adalah subclass dari FunctionTool. Fitur ini dirancang untuk alat yang memerlukan waktu lama untuk diselesaikan.
Untuk membuat AsyncFunctionTool, Anda perlu menentukan fungsi python reguler, dan menggabungkannya ke dalam class AsyncFunctionTool
. Seperti ini:
AsyncFunctionTool(func=your_function)
AsyncFunctionTool akan tetap memanggil fungsi python Anda, tempat Anda dapat memulai
tugas yang mungkin memerlukan waktu lama. Anda dapat menampilkan hasil perantara ke
model untuk memberi tahu model bahwa tugas belum selesai. Menambahkan
informasi seperti status: 'pending'
, progress: 20
,
estimated_completion_time: '...'
, dll., akan membantu model memberikan
respons yang bermakna kepada pengguna.
Kemudian, saat operasi selesai, Anda dapat memanggil agen dengan FunctionResponse baru untuk memberikan hasil akhir. Pada saat itu, agen akan membuat respons akhir kepada pengguna.
AgentTool
AgentTool memungkinkan Anda memanggil agen lain untuk melakukan tugas. Hal ini setara dengan membuat fungsi python, memanggil agen lain dengan argumen fungsi, dan menggunakan respons agen tersebut sebagai nilai yang ditampilkan dari fungsi.
AgentTool berbeda dengan agen turunan:
- Saat Agen A memanggil Agen B sebagai AgentTool, jawaban Agen B akan diteruskan ke Agen A, dan Agen A akan meringkas jawaban dan membuat respons kepada pengguna. Input pengguna mendatang akan terus dijawab oleh Agen A.
- Saat Agen A memanggil Agen B sebagai agen turunan, tanggung jawab untuk menjawab pengguna sepenuhnya dialihkan ke Agen B. Agen A akan keluar dari gambar. Dalam hal ini, input pengguna mendatang akan dijawab oleh Agen B.
Untuk menggunakan agen sebagai alat, Anda dapat menggunakan class AgentTool
untuk menggabungkan agen.
Contoh: tools=[AgentTool(agent=agent_b)]
AgentTool memiliki atribut berikut untuk menyesuaikan perilakunya:
skip_summarization
- Jika disetel ke True, framework akan melewati panggilan LLM untuk meringkas respons agen alat.
Callbacks
Jenis Callback
Anda dapat menyesuaikan perilaku agen lebih lanjut dengan menentukan callback. Kami mendukung dua jenis callback:
- BeforeCallbacks dipanggil sebelum agen melakukan tindakan. Anda dapat mengubah tindakan, melewati tindakan, atau melakukan tindakan tambahan.
- AfterCallbacks dipanggil setelah agen melakukan tindakan. Anda dapat menggunakan callback ini untuk mengubah hasil tindakan, atau melakukan tindakan tambahan.
Tindakan yang Didukung
Kita memiliki BeforeCallbacks dan AfterCallbacks untuk tindakan berikut:
- Memanggil agen.
- Memanggil LLM.
- Memanggil alat.
Daftar Callback
Akibatnya, kita memiliki 6 callback berikut, semuanya adalah atribut dari
class Agent
:
before_agent_callback
def before_agent_callback(invocation_context: InvocationContext) -> Content | None
- Pemanggilan dapat menyertakan beberapa panggilan agen. Jadi, callback ini dapat dipanggil beberapa kali.
- Jika Anda menampilkan
Content
dari callback ini, agen akan melewati panggilan agen saat ini dan menggunakanContent
yang ditampilkan sebagai respons.
after_agent_callback
def after_agent_callback(invocation_context: InvocationContext) -> Content | None
- Pemanggilan dapat menyertakan beberapa panggilan agen. Jadi, callback ini dapat dipanggil beberapa kali.
- Jika Anda menampilkan
Content
dari callback ini, agen akan menambahkanContent
yang ditampilkan setelah responsnya sendiri.
before_model_callback
def before_model_callback(
invocation_context: InvocationContext,
llm_request: LlmRequest) -> LlmResponse | None
- Panggilan agen dapat menyertakan beberapa panggilan LLM. Jadi, callback ini dapat dipanggil beberapa kali.
- Jika Anda menampilkan
LlmResponse
dari callback ini, agen akan menggunakanLlmResponse
yang ditampilkan sebagai respons dan melewati pemanggilan model.
before_model_callback
def after_model_callback(
invocation_context: InvocationContext,
llm_response: LlmResponse) -> LlmResponse | None
- Panggilan agen dapat menyertakan beberapa panggilan LLM. Jadi, callback ini dapat dipanggil beberapa kali.
- Jika Anda menampilkan
LlmResponse
dari callback ini, agen akan menggunakanLlmResponse
yang ditampilkan sebagai respons, bukan respons yang dihasilkan oleh model.
before_tool_callback
def before_tool_callback(
invocation_context: InvocationContext,
tool: BaseTool,
args: dict[str, Any],
tool_context: ToolContext) -> dict | None
- Panggilan model dapat menyertakan beberapa panggilan alat. Jadi, callback ini dapat dipanggil beberapa kali.
- Jika Anda menampilkan
dict
dari callback ini, agen akan menggunakandict
yang ditampilkan sebagai respons dan melewati panggilan alat.
after_tool_callback
def after_tool_callback(
invocation_context: InvocationContext,
tool: BaseTool,
args: dict[str, Any],
tool_context: ToolContext,
response: dict) -> dict | None
- Panggilan model dapat menyertakan beberapa panggilan alat. Jadi, callback ini dapat dipanggil beberapa kali.
- Jika Anda menampilkan
dict
dari callback ini, agen akan menggunakandict
yang ditampilkan sebagai respons, bukan respons yang dihasilkan oleh alat.
Sesi
Anda tidak perlu langsung memanipulasi objek sesi saat mem-build agen. Framework akan mengelola objek sesi untuk Anda. Namun, Anda tetap perlu memahami apa itu dan cara kerja sesi.
Sesi di Framework Agen memiliki dua komponen utama:
- Peristiwa: Daftar peristiwa.
- Status: Objek variabel status seperti dict.
Acara
Peristiwa hanyalah daftar sederhana objek peristiwa. Anda dapat menganggapnya sebagai histori chat, baik antara pengguna dan agen, maupun antara agen yang berbeda. Fitur ini tidak hanya merekam kata-kata dari pengguna atau model, tetapi juga semua tindakan yang dilakukan agen, termasuk memanggil alat, respons alat, memanggil agen lain, dll.
Daftar peristiwa adalah daftar yang hanya dapat ditambahkan. Anda hanya dapat menambahkan peristiwa ke daftar, tetapi tidak dapat menghapus atau mengubah peristiwa apa pun. Jika peristiwa terjadi, peristiwa tersebut akan terjadi, dan tidak ada cara untuk mengubahnya. Kami mendesainnya dengan cara ini agar sistemnya sederhana, dan kita selalu dapat kembali ke waktu tertentu untuk melihat snapshot sistem yang tepat.
Negara bagian/Provinsi
Status adalah objek seperti dict yang berisi semua variabel status. Anda dapat mengaksesnya dari tempat berikut:
- Dari petunjuk, Anda dapat menggunakan sintaksis
{var}
untuk menyisipkan nilai variabel status bernama var. - Dari callback, Anda dapat mengakses variabel status dengan
invocation_context.state['key']
. Anda juga dapat memperbarui variabel status denganinvocation_context.state['key'] = value
. - Dari alat ini, Anda dapat mengakses variabel status dengan
tool_context.state['key']
. Anda juga dapat memperbarui variabel status dengantool_context.state['key'] = value
.
Status dikaitkan dengan sesi tertentu. Jadi, ini adalah tempat yang ideal untuk menyimpan informasi yang berguna dalam konteks sesi ini.
Status dapat diakses oleh semua agen dalam hierarki agen, sehingga menjadi tempat yang ideal untuk berkomunikasi antar-agen. Satu agen dapat melakukan tindakan, dan menyimpan hasilnya dalam status, agen lain kemudian dapat membaca hasilnya dari status dan melanjutkan pekerjaan.
Artefak
Saat model atau alat Anda membuat file, baik gambar, video, dokumen, atau format lainnya, Anda dapat menyimpannya sebagai artefak. Artefak adalah file yang dikaitkan dengan sesi tertentu, dan dapat diakses oleh agen atau kode Anda sendiri.
Kasus Penggunaan
- Saat agen Anda bekerja sama dengan pengguna untuk membuat / mengubah file. Misalnya, agen yang membantu pengguna membuat dan mengedit gambar.
- Saat Anda ingin agen menjawab pertanyaan tentang file, atau mengedit file berdasarkan petunjuk pengguna.
Manfaat Performa
Cara lain untuk menangani file berukuran besar adalah dengan menyimpannya sebagai byte dalam histori chat. Namun, pendekatan ini memiliki beberapa kelemahan:
- Hal ini membuat histori sesi menjadi lambat.
- Sulit mengambil file dari histori chat.
- Byte akan dikirim ke model untuk semua permintaan, meskipun percakapan tidak ada hubungannya dengan file tersebut.
Mengakses Artefak
Ada beberapa cara untuk mengakses artefak:
- Dalam petunjuk, Anda dapat menggunakan sintaksis
{artifact.var}
untuk menyisipkan konten teks artefak bernama var. Artefak biner belum didukung. - Dalam callback, Anda dapat mengakses artefak dengan
invocation_context.get_artifact('key')
. Anda dapat memperbarui artefak denganinvocation_context.set_artifact('key', value)
. - Di alat, Anda dapat mengakses artefak dengan
tool_context.get_artifact('key')
. Anda dapat memperbarui artefak dengantool_context.set_artifact('key', value)
.
Sistem multi-agen
Satu agen dan alat daftar dapat membantu Anda membangun sistem yang kompleks. Namun, terkadang, memisahkan logika menjadi beberapa agen dapat meningkatkan performa dan kemampuan pemeliharaan sistem secara keseluruhan.
Berikut adalah waktu yang tepat untuk mempertimbangkan penggunaan beberapa agen:
- Saat petunjuk agen menjadi terlalu panjang, dengan beberapa tugas dan langkah untuk setiap tugas.
- Jika Anda memiliki alur kerja yang lebih deterministik untuk dijalankan. Misalnya, untuk agen riset, agen ini selalu membuat rencana, lalu menjalankan rencana, lalu meringkas temuan.
Hierarki Agen
children: list[BaseAgent]
Anda membuat sistem multi-agen dengan membuat hierarki agen. Agen root adalah titik entri sistem, dan dapat memanggil agen lain berdasarkan cara konfigurasinya.
Agen dapat memiliki beberapa agen turunan. Agen turunan juga dapat memiliki agen turunan sendiri. Hierarki agen dapat memiliki kedalaman yang tidak ditentukan, tetapi untuk alasan performa, sebaiknya gunakan hierarki yang lebih dangkal.
Untuk membentuk hierarki agen, Anda menempatkan agen lain sebagai turunan dari agen induk.
Flows
flow: str | BaseFlow | FlowCallable
Saat mendapatkan kueri pengguna, agen dapat memilih untuk menangani kueri itu sendiri atau menyerahkan kueri tersebut kepada agen lain. Hal ini ditentukan oleh atribut
flow
.
Ada beberapa alur yang telah ditentukan, dan Anda juga dapat menentukan alur Anda sendiri.
sequential
: Agen akan memanggil agen turunannya satu per satu secara berurutan.loop
: Agen akan memanggil agen turunannya dalam loop. Hingga salah satu agen turunan menetapkantool_context.actions.escalate
ke Benar.single
: Ini adalah alur berbasis LLM. Agen akan memanggil LLM untuk menjawab kueri pengguna, dan memanggil alat-alatnya saat diperlukan.auto
: Ini adalah alur berbasis LLM. Agen akan memanggil LLM untuk menjawab kueri pengguna, dan memanggil alat-alatnya jika diperlukan. Fungsi ini juga dapat mentransfer kueri ke turunan, saudara, atau induknya.- Alur kustom: Anda dapat menentukan alur Anda sendiri dengan menerapkan class
BaseFlow
, atau cukup menentukan fungsi python yang mengikuti antarmuka.