Menambah node ke graph#
Langkah baru disisipkan ke graph agent ReAct sebagai node. Contohnya node yang mencatat setiap permintaan tool ke log sebelum tool dijalankan.
Sebelum mulai: kamu mengenal bentuk graph ReAct: llm_call, lalu tool_node, lalu kembali ke llm_call. Penjelasannya ada di Cara kerja agent ReAct.
Langkah-langkah#
-
Tulis node di file node agent ReAct. Node adalah fungsi yang menerima state dan mengembalikan perubahan untuk state itu. Node yang hanya mengamati mengembalikan dict kosong:
src/application/AI/agents/react/nodes/react_nodes.pyimport logging logger = logging.getLogger(__name__) def log_tool_calls(state: AgentState) -> dict: """Catat setiap permintaan tool sebelum tool dijalankan.""" for tool_call in state["messages"][-1].tool_calls: logger.info("tool=%s args=%s", tool_call["name"], tool_call["args"]) return {} -
Di file yang sama, ubah
should_continuesupaya mengarah ke node baru: -
Di file yang sama, naikkan
STEPS_PER_TOOL_ROUNDdari2menjadi3, karena satu putaran tool sekarang melewati tiga node: -
Daftarkan node dan sambungannya di perakit graph. Impor
log_tool_calls, tambahkan node-nya, lalu ganti tujuan sambungan bersyarat:src/application/AI/agents/react/react.pyagent_builder.add_node("llm_call", make_llm_call(model_with_tools, system_prompt)) agent_builder.add_node("log_tool_calls", log_tool_calls) agent_builder.add_node("tool_node", ToolNode(tools)) agent_builder.add_edge(START, "llm_call") agent_builder.add_conditional_edges( "llm_call", should_continue, ["log_tool_calls", END] ) agent_builder.add_edge("log_tool_calls", "tool_node") agent_builder.add_edge("tool_node", "llm_call")
Warning
Jangan melewatkan langkah 3. Jika putaran tool bertambah panjang tetapi STEPS_PER_TOOL_ROUND tidak dinaikkan, agent yang kehabisan langkah berakhir dengan GraphRecursionError, bukan dengan jawaban penutup.
Menambah data ke state#
Node yang perlu menyimpan data selain pesan membutuhkan field baru di state. Turunkan AgentState, lalu pakai kelas turunannya saat membuat StateGraph:
Node kemudian mengembalikan perubahan untuk field itu, misalnya {"documents": hasil_pencarian}.
Memeriksa hasilnya#
Kirim pesan yang memicu tool lewat panel di bawah ini, lalu lihat jejaknya. Node baru muncul di antara llm_call dan tool_node, dengan keterangan "meneruskan tanpa perubahan":
uv run mkdocs serve).
Terminal server juga menampilkan baris log dari node itu, misalnya tool=get_weather args={'location': 'sf'}.
Halaman terkait#
- Mengatur batas langkah untuk hubungan antara jumlah node dan batas langkah.
- API agent untuk
AgentState,make_llm_call, danshould_continue.