Apabila mencipta sistem ejen, adalah baik untuk mengembalikan keputusan secara automatik dengan sempurna, tetapi sukar dengan ketepatan semasa. Jika anda membiarkan Ejen memikirkan keseluruhan proses, walaupun satu kesilapan akan menghasilkan keputusan yang sangat berbeza daripada apa yang anda maksudkan.
Dan terdapat operasi yang terlalu menakutkan untuk mewakilkan sepenuhnya kuasa kepada Ejen. Terdapat panggilan API, pengubahsuaian DB, skrip Bash, dsb.
Jadi sekarang (mungkin agak lama), campur tangan manusia semasa proses pelaksanaan ejen tidak dapat dielakkan
Menyokong 5 situasi di mana manusia campur tangan.
Meninggalkan keputusan sama ada untuk meneruskan di sebelah manusia.
Menunjukkan status semasa kepada pengguna dan membenarkan pengubahsuaian.
Menentukan langkah untuk menerima input pengguna dan sebenarnya menerima nilai daripada pengguna.
Benarkan pengguna melihat dan mengubah suai nilai hasil alat.
Kembali ke keadaan sebelumnya (sebelum pelaksanaan nod) atau kembali dan teruskan semula. Seperti berbilang ayat.
Campur tangan manusia seperti ini boleh dilakukan berkat lapisan berterusan Langgraph. Adalah mungkin untuk menyelamatkan keadaan yang memerlukan campur tangan manusia dan mula semula dari titik itu setelah pengguna meluluskan atau mengubah suainya. Ia seperti pusat pemeriksaan dalam permainan.
Seperti menetapkan titik putus dalam alat nyahpepijat, titik putus ialah petunjuk untuk meneruskan hanya sehingga titik itu dan berhenti seketika.
Dalam langgraph, titik putus boleh ditentukan semasa menyusun graf.
graph = builder.compile(checkpointer=checkpointer, interrupt_before=["step_for_human_in_the_loop"])
Pengisytiharan pada masa penyusunan adalah statik. Sukar untuk berhenti bergantung kepada keadaan yang berubah semasa pelaksanaan. Titik Putus Dinamik ialah titik putus yang boleh ditetapkan bergantung pada keadaan. Apabila pengecualian khas dipanggil NodeInterrupt berlaku, pelaksanaan graf berhenti dan menunggu campur tangan pengguna.
def my_node(state: State) -> State: if len(state['input']) > 5: raise NodeInterrupt(f"Received input that is longer than 5 characters: {state['input']}") return state
Lebih mudah jika anda melihat gambar.
# Compile our graph with a checkpoitner and a breakpoint before the step to approve graph = builder.compile(checkpointer=checkpoitner, interrupt_before=["node_2"]) # Run the graph up to the breakpoint for event in graph.stream(inputs, thread, stream_mode="values"): print(event) # ... Get human approval ... # If approved, continue the graph execution from the last saved checkpoint for event in graph.stream(None, thread, stream_mode="values"): print(event)
Pelaksanaan graf selesai sebelum node_2, jadi yang pertama untuk penyataan terlepas, dan kemudian graph.stream dipanggil semula untuk meneruskan pelaksanaan.
graph = builder.compile(checkpointer=checkpointer, interrupt_before=["step_for_human_in_the_loop"])
Ia juga berhenti di hadapan node_2, dan kali ini, bukannya melakukan apa-apa dan memanggil graph.stream sekali lagi, ia mengubah keadaan graf semasa. Selepas itu, graf dilakukan semula dalam keadaan berubah.
Untuk operasi lain, semak dokumen rasmi Langgraph di bawah
https://langchain-ai.github.io/langgraph/concepts/human_in_the_loop/
Atas ialah kandungan terperinci Langgraph - Manusia Dalam Gelung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!