Menambah tool#
Tool baru memberi agent kemampuan mengambil data atau melakukan aksi yang sebelumnya tidak bisa.
Sebelum mulai: kamu punya proyek hasil zul build hexa yang berjalan. Contoh di halaman ini menambah tool pengambil status pesanan ke agent ReAct.
Langkah-langkah#
-
Buat file tool di
src/infrastructure/AI/tools/. Tool adalah fungsi dengan dekorator@tool:src/infrastructure/AI/tools/order_tool.pyfrom langchain.tools import tool @tool def get_order_status(order_id: str) -> str: """Get the current status of a customer order. Args: order_id: The order number, for example "ORD-1042" """ orders = {"ORD-1042": "shipped", "ORD-1043": "processing"} status = orders.get(order_id) if status is None: return f"No order found with id {order_id}" return f"Order {order_id} is {status}" -
Kembalikan teks yang bisa dibaca model di setiap cabang, termasuk saat data tidak ditemukan. Model memakai teks itu untuk menyusun jawabannya.
-
Berikan tool ke agent di controller yang merakitnya. Untuk agent ReAct, impor tool-nya dan ubah
get_react_agent:src/interface/http/controllers/chat_controller.pyfrom src.infrastructure.AI.tools.order_tool import get_order_status from src.infrastructure.AI.tools.weather_tool import get_weather @lru_cache def get_react_agent(): """Agent ReAct yang dilayani `POST /chat` dan dicoba di playground.""" return build_react_agent( llm=get_llm_model(), tools=[get_weather, get_order_status], checkpointer=get_checkpointer(), ) -
Mulai ulang server. Dengan
--reload, server memulai ulang sendiri saat file disimpan.
Kamu tidak perlu mengubah prompt. Nama, deskripsi, dan skema argumen setiap tool dikirim ke model secara otomatis.
Mendaftarkan tool ke agent lain#
Tempat mendaftarkan tool berbeda untuk setiap agent di template:
| Agent | Tempat mendaftarkan |
|---|---|
| ReAct | Argumen tools di get_react_agent, file chat_controller.py |
| Human-in-the-loop | Konstanta TOOLS di hitl_controller.py. Tool yang berisiko dibahas di Mewajibkan persetujuan untuk sebuah tool. |
| Subagents | Field tools pada SubagentSpec di subagents_controller.py. Rinciannya ada di Menambah subagent. |
Menulis deskripsi yang dipahami model#
Model memilih tool hanya dari nama fungsi, docstring, dan skema argumennya. Deskripsi yang kabur membuat tool jarang dipakai, atau dipakai di saat yang salah.
- Awali docstring dengan kata kerja yang menyebut hasilnya: "Get the current status of a customer order."
- Jelaskan setiap argumen di bagian
Args, dengan contoh nilai jika formatnya tidak jelas. - Beri nama argumen yang bermakna:
order_id, bukanidataux. - Pakai type hint yang tepat.
location: strdanlimit: intmenghasilkan skema yang berbeda. - Tulis dalam bahasa yang paling dikuasai modelmu. Untuk sebagian besar model, itu bahasa Inggris.
Menangani kegagalan di dalam tool#
Jika fungsi tool melempar exception, request berhenti dan client menerima HTTP 500. Tangani kegagalan yang bisa diperkirakan di dalam tool, lalu kembalikan sebagai teks:
@tool
def get_order_status(order_id: str) -> str:
"""Get the current status of a customer order."""
try:
order = order_api.fetch(order_id)
except OrderApiTimeout:
return "The order service did not respond. Ask the user to try again later."
return f"Order {order_id} is {order.status}"
Di contoh ini order_api dan OrderApiTimeout mewakili client layanan pesananmu sendiri. Dengan mengembalikan teks, model bisa menjelaskan masalahnya ke user.
Memeriksa hasilnya#
Tool bisa dipanggil langsung, tanpa agent dan tanpa model. Kirim argumennya sebagai dict ke invoke:
from src.infrastructure.AI.tools.order_tool import get_order_status
print(get_order_status.invoke({"order_id": "ORD-1042"}))
Keluarannya:
Untuk melihat agent memakai tool itu, kirim pesan lewat panel di bawah ini, lalu lihat jejaknya:
Halaman terkait#
- Cara kerja agent ReAct untuk apa yang terjadi saat model meminta tool, termasuk saat argumennya salah.
- Menguji agent untuk menguji pemanggilan tool dengan model palsu.
- API agent untuk parameter
build_react_agent.