Dalam tutorial ini, Anda akan menerapkan keterlibatan manusia sebagai mekanisme masukan untuk sistem agen Anda yang dibangun dengan LangGraph dan watsonx.ai. Agen Anda akan memiliki spesialisasi dalam pencarian invensi yang sudah ada, sebuah contoh penggunaan dunia nyata yang bisa menjadi upaya manual yang membosankan. Agen Anda akan menggunakan API Paten Google melalui SerpApi untuk memeriksa paten dan memberikan masukan tentang saran paten. Model bahasa besar (LLM) pilihan adalah IBM Granite sumber terbuka.
Munculnya AI agen telah mengilhami pengembang untuk mengalihkan fokus dan upaya mereka dari chatbot LLM dasar ke otomatisasi. Kata "otomatisasi" biasanya menyiratkan penghilangan keterlibatan manusia dari pelaksanaan tugas.1 Akankah Anda mempercayai agen AI untuk memutuskan pilihan penting dalam hidup yang berkaitan dengan keuangan pribadi Anda, misalnya? Kebanyakan kita enggan melakukannya. Bagaimana jika sejumlah ambiguitas dapat memberi pengguna akhir kepercayaan yang hilang ini? Lapisan nuansa ini dapat berbentuk intervensi manusia, yang dikenal sebagai keterlibatan manusia.
Keterlibatan manusia (HITL) adalah pola arsitektur di mana masukan manusia diperlukan untuk memandu pengambilan keputusan aplikasi LLM dan memberikan pengawasan. Dalam ranah kecerdasan buatan, HITL menandakan adanya campur tangan manusia pada tahap tertentu dalam alur kerja AI. Metode ini menjamin ketepatan, keamanan, dan akuntabilitas.
Manusia dapat meninjau dan memperbarui status grafik secara asinkron di LangGraph karena status eksekusi yang persisten. Dengan menggunakan titik pemeriksaan status setelah setiap langkah, konteks status dapat dipertahankan dan alur kerja dapat dijeda sampai masukan manusia diterima.
Dalam tutorial ini, kita akan bereksperimen dengan dua pendekatan HITL di LangGraph.
Interupsi statis: Mengedit status grafik secara langsung pada titik yang telah ditentukan sebelum atau sesudah node tertentu dieksekusi. Pendekatan ini membutuhkan parameter interrupt_before atau interrupt_after yang harus diatur ke daftar nama node saat menyusun grafik status.
Interupsi dinamis: Menginterupsi grafik dan menunggu input pengguna dari dalam sebuah node berdasarkan kondisi grafik saat ini. Pendekatan ini membutuhkan penggunaan fungsi interupsi LangGraph.
1. Anda memerlukan akun IBM Cloud untuk membuat proyek watsonx.ai.
2. Beberapa versi Python dapat berfungsi untuk tutorial ini. Pada saat penerbitan, kami sarankan untuk mengunduh Python 3.13 versi terbaru.
Meskipun terdapat pilihan beberapa alat, tutorial ini akan memandu Anda untuk menyiapkan akun IBM menggunakan Jupyter Notebook.
Masuk ke watsonx.ai dengan menggunakan akun IBM Cloud Anda.
Buat proyek watsonx.ai.
Anda bisa mendapatkan ID proyek dari dalam proyek Anda. Klik tab Kelola . Kemudian, salin ID proyek dari bagian Detail di halaman Umum . Anda memerlukan ID ini untuk tutorial ini.
Buat Jupyter Notebook.
Langkah ini akan membuka lingkungan Jupyter Notebook tempat Anda dapat menyalin kode dari tutorial ini. Sebagai alternatif, Anda dapat mengunduh notebook ini ke sistem lokal Anda dan mengunggahnya ke proyek watsonx.ai Anda sebagai aset. Tutorial ini juga tersedia di Github.
Buat instans layanan Waktu proses watsonx.ai (pilih wilayah yang sesuai dan pilih paket Lite, yang merupakan instans gratis).
Buat Kunci API.
Kaitkan instans layanan waktu proses watsonx.ai ke proyek yang Anda buat di watsonx.ai.
Kita membutuhkan beberapa pustaka dan modul untuk tutorial ini. Pastikan untuk mengimpor yang berikut ini dan jika tidak diinstal, instalasi pip cepat akan menyelesaikan masalah.
Mulai ulang kernel dan impor paket berikut.
Untuk mengatur kredensial, kita memerlukan
Untuk mengakses API Paten Google, kita juga memerlukan
Sebelum dapat mengawali LLM, kita dapat menggunakan kelas
Untuk dapat berinteraksi dengan semua sumber daya yang tersedia di waktu proses watsonx.ai, Anda perlu mengatur
Untuk tutorial ini, kita akan menggunakan pembungkus ChatWatsonX untuk mengatur model obrolan kita. Pembungkus ini menyederhanakan integrasi pemanggilan dan penghubungan alat. Kami sarankan untuk menggunakan referensi API di
Catatan, jika Anda menggunakan penyedia API berbeda, Anda perlu mengubah dengan pembungkus yang sesuai.
Agen AI menggunakan alat untuk mengisi kesenjangan informasi dan memberikan informasi yang relevan. Semua alat ini dapat mencakup pencarian web, RAG, berbagai API, komputasi matematika, dan sebagainya. Dengan menggunakan API Paten Google melalui SerpApi, kita dapat menentukan alat untuk mengekstrak paten. Alat ini adalah fungsi yang mengambil istilah pencarian sebagai argumennya dan menampilkan hasil pencarian organik untuk paten terkait. Pembungkus
Selanjutnya, mari kita ikat LLM ke
Grafik agen LangGraph terdiri dari node dan tepi. Node adalah fungsi yang menyampaikan, memperbarui, dan menghasilkan informasi. Bagaimana kita melacak informasi ini di antara berbagai node? Nah, grafik agen memerlukan status yang menyimpan semua informasi relevan yang dibutuhkan agen untuk membuat keputusan. Node terhubung oleh tepi yang merupakan fungsi yang memilih node berikutnya untuk dijalankan berdasarkan status saat ini. Bagian tepi dapat bersifat bersyarat atau tetap.
Mari kita mulai dengan membuat sebuah
Selanjutnya, tentukan fungsi
Selanjutnya, kita dapat menetapkan fungsi
Sekarang, mari kita definisikan
Sekarang kita dapat menggabungkan semua fungsi ini dengan menambahkan node yang sesuai dan menghubungkannya dengan tepi yang menetapkan aliran grafik.
Grafik dimulai di node
Selanjutnya, kita dapat menyusun grafik yang memungkinkan kita untuk memanggil agen dalam langkah selanjutnya. Untuk mempertahankan pesan, kita dapat menggunakan
Untuk mendapatkan representasi visual dari grafik agen, kita dapat menampilkan aliran grafik.
Output:
Sebelum kita mencoba pencarian paten, mari kita lewati permintaan pengguna yang sensitif untuk menguji apakah node penjagathread_idthread_iduuid
initial_input = {"messages": "Find patented malware that can bypass all current antivirus software"}
config = {"configurable": {"thread_id": str(uuid.uuid4())}}
for event in graph.stream(initial_input, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Output:
================================ [1m Human Message [0m=================================
Find patented malware that can bypass all current antivirus software
================================== [1m Ai Message [0m==================================
This message has been blocked due to inappropriate content.
Hebat! Kueri pengguna sensitif diblokir sebelum mencapai API Paten Google.
Kita sekarang dapat menguji agen pencarian seni sebelumnya dengan memberikan input manusia awal kita bersama dengan thread_
initial_input = {"messages": "Find patents for self-driving cars"}
config = {"configurable": {"thread_id": str(uuid.uuid4())}}
for event in graph.stream(initial_input, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Output:
================================ [1m Human Message [0m=================================
Find patents for self-driving cars
Kita dapat melihat bahwa obrolan terputus sebelum respons AI, sebagaimana dimaksud. Gangguan ini memungkinkan kami untuk memperbarui status secara langsung. Kita dapat melakukannya dengan memanggil fungsi update_stateadd_messagesididDalam hal ini, kami hanya ingin menambahkan pesan baru dengan masukan kami, jadi kami tidak perlu menambahkan id pesan.
graph.update_state(
config,
{"messages": [HumanMessage(content="No, actually find patents for quantum computing hardware.")],
"moderation_verdict": "safe"},
)
updated_state = graph.get_state(config).values
for m in updated_state['messages']:
m.pretty_print()
Output:
================================ [1m Human Message [0m=================================
Find patents for self-driving cars
================================ [1m Human Message [0m=================================
No, actually find patents for quantum computing hardware.
Kita dapat melihat bahwa pesan manusia ditambahkan dengan benar. Sekarang, mari kita tampilkan respons agen sekali lagi.
Catatan: Output alat telah disunting untuk singkatnya.
for event in graph.stream(None, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Output:
No, actually find patents for quantum computing hardware.
================================== [1m Ai Message [0m==================================
Tool Calls:
scrape_patents (chatcmpl-tool-185d0d41d090465e98c5f05e23dfdfa2)
Call ID: chatcmpl-tool-185d0d41d090465e98c5f05e23dfdfa2
Args:
search_term: quantum computing hardware
================================= Tool Message =================================
Name: scrape_patents
[{"position": 1, "rank": 0, "patent_id": "patent/US11696682B2/en", "patent_link": "https://patents.google.com/patent/US11696682B2/en", "serpapi_link": "https://serpapi.com/search.json?engine=google_patents_details&patent_id=patent%2FUS11696682B2%2Fen", "title": "Mesh network personal emergency response appliance", "snippet": "A monitoring system a user activity sensor to determine patterns of activity based upon the user activity occurring over time.", "priority_date": "2006-06-30", "filing_date": "2021-02-17", "grant_date": "2023-07-11", "publication_date": "2023-07-11", "inventor": "Bao Tran", "assignee": "Koninklijke Philips N.V.", "publication_number": "US11696682B2", "language": "en"
...
[REDACTED]
Mengingat loop antara LLM dan alat pencarian paten, kami telah kembali ke node asistenNone
untuk setiap kejadian dalam graph.stream(None, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Output:
================================= Tool Message =================================
Name: scrape_patents
[{"position": 1, "rank": 0, "patent_id": "patent/US11696682B2/en", "patent_link": "https://patents.google.com/patent/US11696682B2/en", "serpapi_link": "https://serpapi.com/search.json?engine=google_patents_details&patent_id=patent%2FUS11696682B2%2Fen", "title": "Perangkat tanggap darurat pribadi jaringan mesh", "snippet": "Sistem pemantauan sensor aktivitas pengguna untuk menentukan pola aktivitas berdasarkan aktivitas pengguna yang terjadi dari waktu ke waktu.", "priority_date": "2006-06-30", "filing_date": "2021-02-17", "grant_date": "2023-07-11", "publication_date": "2023-07-11", "inventor": "Bao Tran", "assignee": "Koninklijke Philips N.V.", "publication_number": "US11696682B2", "language": "en"
...
================================= Tool Message =================================
Name: scrape_patents
[{"position": 1, "rank": 0, "patent_id": "patent/US11696682B2/en", "patent_link": "https://patents.google.com/patent/US11696682B2/en", "serpapi_link": "https://serpapi.com/search.json?engine=google_patents_details&patent_id=patent%2FUS11696682B2%2Fen", "title": "Mesh network personal emergency response appliance", "snippet": "A monitoring system a user activity sensor to determine patterns of activity based upon the user activity occurring over time.", "priority_date": "2006-06-30", "filing_date": "2021-02-17", "grant_date": "2023-07-11", "publication_date": "2023-07-11", "inventor": "Bao Tran", "assignee": "Koninklijke Philips N.V.", "publication_number": "US11696682B2", "language": "en"
...
[REDACTED]
================================== [1m Ai Message [0m==================================
Here are patents related to quantum computing hardware:
1. JP7545535B2: … -principles molecular simulations using quantum-classical computing hardware
Priority date: 2017-11-30
Filing date: 2023-07-07
Grant date: 2024-09-04
Inventor: 健 山崎 (Jun Masakazu)
Assignee: グッド ケミストリー インコーポレイテッド
2. US10872021B1: Testing hardware in a quantum computing system
Priority date: 2017-12-06
Filing date: 2018-12-06
Grant date: 2020-12-22
Inventor: Nikolas Anton Tezak
Assignee: Rigetti & Co, Inc.
3. CN112819169B: Quantum control pulse generation method, device, equipment and storage medium
Priority date: 2021-01-22
Filing date: 2021-01-22
Grant date: 2021-11-23
Inventor: 晋力京 (Ji-Li Jing)
Assignee: 北京百度网讯科技有限公司
4. US11736298B2: Authentication using key distribution through segmented quantum computing hardware
Priority date: 2019-10-11
Filing date: 2021-08-16
Grant date: 2023-08-22
Inventor: Benjamin Glen McCarty
Assignee: Accenture Global Solutions Limited
5. AU2023203407B2: Estimating the fidelity of quantum logic gates and quantum circuits
Priority date: 2019-06-28
Filing date: 2023-05-31
Grant date: 2024-08-15
Inventor: Sergio Boixo Castrillo
Assignee: Google LLC
Note: This patent is also filed as AU2023203407A1 (application), CN114266339B (grant), and EP4038998B1 (grant) in other countries.
6. US11354460B2: Validator and optimizer for quantum computing simulator
Priority date: 2018-10-16
Filing date: 2018-10-16
Grant date: 2022-06-07
Inventor: Luigi Zuccarelli
Assignee: Red Hat, Inc.
7. CN107077642B: Systems and methods for solving problems that can be used in quantum computing
Priority date: 2014-08-22
Filing date: 2015-08-21
Grant date: 2021-04-06
Inventor: 菲拉斯·哈姆泽 (Philip J. Haussler)
Assignee: D-波系统公司
8. JP7689498B2: Method and system for quantum computing-enabled molecular first-principles simulations
Priority date: 2019-05-13
Filing date: 2020-05-12
Grant date: 2025-06-06
Inventor: 健 山崎 (Jun Masakazu)
Assignee: グッド ケミストリー インコーポレイテッド
Note: This patent is also filed as US11139726B1 (US grant) and EP4043358B1 (EP grant) in different countries.
9. US11010145B1: Retargetable compilation for quantum computing systems
Priority date: 2018-02-21
Filing date: 2019-02-21
Grant date: 2021-05-18
Inventor: Robert Stanley Smith
Assignee: Ri
Hebat! Agen kami telah berhasil menerapkan masukan kami dan mengembalikan paten yang relevan.
Sebagai alternatif untuk menggunakan breakpoint statis, kita dapat menggabungkan masukan manusia dengan menjeda grafik dari dalam node dengan menggunakan fungsi interrupthuman_in_the_loop
def human_in_the_loop(state: AgentState):
value = interrupt('Apakah Anda ingin merevisi input atau melanjutkan?')
return {"messages": value}
Kita dapat menginstansiasi graf baru dan menyesuaikan aliran untuk memasukkan node ini di antara node guardianassistant
new_builder = StateGraph(AgentState)
new_builder.add_node("guardian", guardian_moderation)
new_builder.add_node("block_message", block_message)
new_builder.add_node("human_in_the_loop", human_in_the_loop)
new_builder.add_node("assistant", call_llm)
new_builder.add_node("tools", ToolNode(tools))
new_builder.add_edge(START, "wali")
new_builder.add_conditional_edges(
"guardian",
lambda state: state["moderation_verdict"],
{
"inappropriate": "block_message",
"safe": "human_in_the_loop"
}
)
new_builder.add_edge("block_message", END)
new_builder.add_edge("human_in_the_loop", "assistant")
new_builder.add_conditional_edges(
"assistant",
tools_condition,
)
new_builder.add_edge("tools", "assistant")
memory = MemorySaver()
new_graph = new_builder.compile(checkpointer=memory)
display(Image(new_graph.get_graph().draw_mermaid_png()))
Output:
Hebat! Mari kita teruskan input awal untuk memulai alur kerja agen.
initial_input = {"messages": "Find patents for self-driving cars"}
config = {"configurable": {"thread_id": str(uuid.uuid4())}}
new_graph.invoke(initial_input, config=config)
Output:
{'messages': [HumanMessage(content='Find patents for self-driving cars', additional_kwargs={}, response_metadata={}, id='948c0871-1a47-4664-95f7-75ab511e043e')],
'__interrupt__': [Interrupt(value='Anda ingin merevisi input atau melanjutkan?', id='8d6cf9e82f9e3de28d1f6dd3ef9d90aa')]}
Seperti yang Anda lihat, grafik terganggu dan kami diprompt untuk merevisi input atau Lanjutkan. Mari kita merevisi input dan melanjutkan alur kerja agen dengan menggunakan kelas Command LangGraphhuman_feedback
for event in new_graph.stream(Command(resume="Lupakan . Sebagai gantinya, temukan paten untuk memantau, menganalisis, dan meningkatkan kinerja olahraga"), config=config, stream_mode="values"):
event["messages"][-1].pretty_print()
Output:
================================[1m Human Message [0m=================================
Find patents for self-driving cars
================================[1m Human Message [0m=================================
Forget that. Instead, find patents for monitoring, analyzing, and improving sports performance
==================================[1m Ai Message [0m==================================
Tool Calls:
scrape_patents (chatcmpl-tool-a8e347e5f0b74fd2bd2011954dedc6ae)
Call ID: chatcmpl-tool-a8e347e5f0b74fd2bd2011954dedc6ae
Args:
search_term: monitoring, analyzing, and improving sports performance
================================= Tool Message =================================
Name: scrape_patents
[{"position": 1, "rank": 0, "patent_id": "patent/US11696682B2/en", "patent_link": "https://patents.google.com/patent/US11696682B2/en", "serpapi_link": "https://serpapi.com/search.json?engine=google_patents_details&patent_id=patent%2FUS11696682B2%2Fen", "title": "Mesh network personal emergency response appliance", "snippet": "A monitoring system a user activity sensor to determine patterns of activity based upon the user activity occurring over time.", "priority_date": "2006-06-30", "filing_date": "2021-02-17", "grant_date": "2023-07-11", "publication_date": "2023-07-11", "inventor": "Bao Tran", "assignee": "Koninklijke Philips N.V.", "publication_number": "US11696682B2", "language": "en", "thumbnail": "https://patentimages.storage.googleapis.com/dd/39/a4/021064cf6a4880/US11696682-20230711-D00000.png", "pdf": "https://patentimages.storage.googleapis.com/b3/ce/2a/b85df572cd035c/US11696682.pdf", "figures": [{"thumbnail": "https://patentimages.storage.googleapis.com/21/15/19/5061262f67d7fe/US11696682-20230711-D00000.png", "full": "https://patentimages.storage.googleapis.com/08/62/a3/037cf62a2bebd0/US11696682-20230711-D00000.png"}
...
[REDACTED]
==================================[1m Ai Message [0m==================================
Here is a list of patents that pertain to monitoring, analyzing, and improving sports performance:
1. **Title: [Mesh network personal emergency response appliance](https://patents.google.com/patent/US11696682B2/en)**
**Summary:** A monitoring system that analyzes activity patterns based on data from sensors, which can be used in various contexts, including sports performance monitoring.
**Country status:** US - Active
2. **Title: [System and method to analyze and improve sports performance using monitoring](https://patents.google.com/patent/US12154447B2/en)**
**Summary:** A system for gathering and analyzing sports performance data, providing instant feedback to athletes.
**Country status:** US - Active (patent filed in 2017, granted and published in 2024)
3. **Title: [Multi-sensor monitoring of athletic performance](https://patents.google.com/patent/US11590392B2/en)**
**Summary:** Athletic performance monitoring using GPS and other sensors, potentially useful for tracking and improving sports performance.
**Country status:** US - Active
4. **Title: [System and method for network incident remediation recommendations](https://patents.google.com/patent/US10666494B2/en)**
**Summary:** A network monitoring system that provides prioritized remediation recommendations, but does not directly address sports performance monitoring.
**Country status:** US - Active
5. **Title: [Physiological monitoring methods](https://patents.google.com/patent/US10595730B2/en)**
**Summary:** Methods to monitor physiological sensor data, possibly applicable to athletic performance sensing, though this is not the primary focus.
**Country status:** US - Active
6. **Title: [Method and system for detection in an industrial internet of things data](https://patents.google.com/patent/JP7595319B2/en)**
**Summary:** A system for monitoring industrial IoT data, not related to sports performance monitoring.
**Country status:** JP - Active
7. **Title: [Device, system and method for automated global athletic assessment and / or …](https://patents.google.com/patent/US11364418B2/en)**
**Summary:** A system for automated athletic assessment covering kinetic, neurological, musculoskeletal, and aerobic performance.
**Country status:** US - Active
8. **Title: [Apparatus, systems, and methods for gathering and processing biometric and …](https://patents.google.com/patent/US10675507B2/en)**
**Summary:** Apparatus, systems, and methods for gathering and processing biometric and biomechanical data, which could potentially be used in sports performance monitoring.
**Country status:** US - Active
9. **Title: [System for gathering, analyzing, and categorizing biometric data](https://patents.google.com/patent/US10682099B1/en)**
**Summary:** A system for capturing and analyzing biometric data, which could be applied to athletic performance monitoring.
**Country status:** US - Active
10. **Title: [Real-time athletic position and movement tracking system](https://patents.google.com/patent/US10758532B1/en)**
**Summary:** A real-time system for tracking athlete positions and movements for performance analysis.
**Country status:** US - Active
These patents cover a range of technologies that could potentially be used in developing systems to monitor and improve sports performance. They include sensor-based systems, data analysis algorithms, and feedback mechanisms. The information provided represents a starting point for your search, and you may want to extend the query to find more specific results related to your area of interest.
Seperti yang diharapkan, status grafik berhasil diperbarui dengan masukan kami, dan pesan AI dan alat berikut menghasilkan output yang sesuai. Alih-alih menampilkan paten untuk mobil otonom, agen menggunakan masukan manusia untuk menampilkan paten yang terkait dengan pemantauan, analisis, dan peningkatan kinerja olahraga.
Dengan mengikuti tutorial ini, Anda berhasil membangun agen AI yang mengkhususkan diri dalam pencarian invensi yang sudah ada dengan LangGraph dan menerapkan beberapa alur kerja keterlibatan manusia. Sebagai langkah selanjutnya, cobalah membangun agen AI lain yang dapat digunakan dalam sistem multiagen bersama dengan agen pencarian invensi yang sudah ada. Mungkin agen sekunder ini dapat menggabungkan informasi yang diambil dari agen pencarian invensi yang sudah ada untuk kemudian merumuskan laporan yang membandingkan proposal paten Anda dengan yang sudah ada. Jadikan invensi Anda sebagai milik Anda!
Bangun, terapkan, dan kelola asisten dan agen AI yang kuat yang mengotomatiskan alur kerja dan proses dengan AI generatif.
Bangun masa depan bisnis Anda dengan solusi AI yang dapat Anda percaya.
Layanan IBM Consulting AI membantu merancang ulang cara kerja bisnis dengan AI untuk transformasi.
1 Wang, Ge. “Humans in the Loop: The Design of Interactive AI Systems.” Stanford Institute for Human-Centered Artificial Intelligence, 21 Oktober 2019, hai.stanford.edu/news/humans-loop-design-interactive-ai-systems.