Menerapkan agen LangGraph ReAct dukungan TI dengan IBM Granite di watsonx.ai

Penyusun

Anna Gutowska

AI Engineer, Developer Advocate

IBM

Dalam tutorial ini, Anda akan membangun agen AI ReAct (Penalaran dan Tindakan) dengan kerangka kerja LangGraph sumber terbuka menggunakan model IBM Granite melalui IBM watsonx.ai API dengan Python. Contoh penggunaannya adalah untuk mengelola tiket dukungan TI yang ada dan membuat tiket dukungan baru.

Apa itu Agen ReAct?

Agen kecerdasan buatan (AI) merujuk pada sistem atau program yang mampu melakukan tugas secara mandiri atas nama pengguna atau sistem lain dengan merancang alur kerjanya dan memanfaatkan alat yang tersedia. Agen AI generatif menggunakan teknik pemrosesan bahasa alami (NLP) yang canggih dari model bahasa besar (LLM) untuk memahami dan merespons input pengguna langkah demi langkah dan menentukan kapan harus memanggil alat eksternal. Komponen inti agen AI adalah penalaran. Setelah memperoleh informasi baru melalui pemanggilan alat, intervensi manusia atau agen lain, paradigma penalaran memandu langkah selanjutnya dari agen.

Dengan setiap tindakan dan setiap respons alat, paradigma ReAct (Penalaran dan Tindakan) menginstruksikan agen untuk "berpikir" dan merencanakan langkah selanjutnya. Penalaran lambat langkah demi langkah ini memberi kita insight tentang bagaimana agen menggunakan konteks yang diperbarui untuk merumuskan kesimpulan. Karena sifatnya yang berkelanjutan, proses refleksi ini sering disebut sebagai siklus berpikir-bertindak-mengamati dan merupakan bentuk prompt rantai pemikiran (chain-of-thought).

Menggunakan LangGraph untuk membangun agen ReAct

Tutorial ini akan menggunakan kerangka kerja LangGraph, kerangka kerja agen AI sumber terbuka yang dirancang untuk membangun, menerapkan, dan mengelola alur kerja agen AI generatif yang kompleks. Fungsi create_react_agent bawaan yang disediakan oleh LangGraph adalah cara mudah untuk membangun agen khusus yang sederhana. Agen ReAct sederhana, yang ada di tutorial ini seperti yang ditunjukkan pada Gambar 1, terdiri dari dua node. Satu node bertanggung jawab untuk memanggil model dan node lainnya untuk menggunakan alat. Alat umum mencakup alat Wikipedia LangChain bawaan, alat DuckDuckGoSearchRun, dan bahkan Retrieval-Augmented Generation (RAG). Apabila terdapat input kompleks, node lain dapat ditambahkan, seperti yang terlihat pada Gambar 2. Node tambahan ini berfungsi untuk membantu memastikan agen menampilkan output terstruktur.

Diagram arsitektur agen ReAct Diagram arsitektur agen ReAct

Dalam LangGraph, fitur “state” berfungsi sebagai bank memori yang merekam dan melacak semua informasi penting yang diproses oleh setiap iterasi sistem AI. Grafik stateful ini memungkinkan agen mengingat informasi masa lalu dan konteks yang penting. Struktur siklik dari grafik ReAct dimanfaatkan ketika hasil dari satu langkah bergantung pada langkah-langkah sebelumnya dalam siklus. Node, atau "aktor", dalam grafik mengodekan logika agen dan dihubungkan oleh edge. Edge pada dasarnya adalah fungsi Python yang menentukan node berikutnya yang akan dieksekusi tergantung keadaan saat itu.

Prasyarat

Anda memerlukan akun IBM® Cloud untuk membuat proyek watsonx.ai™ .

Langkah

Untuk menggunakan antarmuka pemrograman aplikasi (API) watsonx, Anda harus menyelesaikan langkah-langkah berikut. Perhatikan, Anda juga dapat mengakses tutorial ini di GitHub. 

Langkah 1. Buat kredensial watsonx.ai Anda

  1. Masuk ke watsonx.ai menggunakan akun IBM Cloud Anda.

  2. Buat instance layanan waktu proses watsonx.ai (pilih wilayah yang sesuai dan pilih paket Lite, yang merupakan instance gratis).

  3. Buat kunci antarmuka pemrograman aplikasi (API).

Langkah 2. Siapkan proyek di IDE Anda

Untuk mulai menerapkan agen di watsonx.ai dengan mudah, kloning repositori GitHub ini dan akses proyek agen ReAct dukungan TI. Anda dapat menjalankan perintah berikut di terminal Anda untuk melakukannya.

git clone git@github.com:IBM/ibmdotcom-tutorials.git
cd react-agent-langgraph-it-support/base/langgraph-react-agent/

Selanjutnya, instal Poetry jika Anda belum menginstalnya. Poetry adalah alat untuk mengelola dependensi dan pembuatan package Python.

pipx install --python 3.11 poetry

Kemudian, aktifkan lingkungan virtual Anda.

source $(poetry -q env use 3.11 && poetry env info --path)/bin/activate

Alih-alih menggunakan perintah pip install , package Poetry memungkinkan kita untuk menambahkan dependensi dengan menjalankan perintah berikut di terminal. Langkah ini akan menginstal dependensi repositori yang tercermin dalam file pyproject.toml ke lingkungan virtual Anda yang terpisah.

poetry install

Menambahkan direktori kerja ke PYTHONPATH diperlukan untuk langkah selanjutnya. Di terminal Anda jalankan:  

export PYTHONPATH=$(pwd):${PYTHONPATH}

Untuk menyiapkan lingkungan Anda, ikuti petunjuk dalam file README.md di Github. Penyiapan ini membutuhkan beberapa perintah untuk dijalankan pada IDE atau baris perintah Anda.

Langkah 3. Tetapkan variabel lingkungan

Dalam file config.toml , Anda akan menemukan kredensial kosong berikut yang harus diisi sebelum mencoba menerapkan agen Anda. String watsonx_apikey dan watsonx_url diinisialisasi pada langkah 1 tutorial ini. Selanjutnya, ikuti format sederhana yang ditemukan di halaman Akses Pengembang untuk memilih ruang penerapan Anda atau membuat yang baru. Di sana, Anda dapat mengambil space_id yang diperlukan untuk menghubungkan agen ke penerapan watsonx.ai. Terakhir, model_id Anda ditetapkan ke model IBM Granite 3.2.

[deployment]
  watsonx_apikey = ""
  watsonx_url = ""  # should follow the format: `https://{REGION}.ml.cloud.ibm.com`
  space_id = "" # found in the "Manage" tab of your Deployment or in the Developer Access page here: https://dataplatform.cloud.ibm.com/developer-access

[deployment.custom]
# during creation of deployment additional parameters can be provided inside `CUSTOM` object for further referencing
# please refer to the API docs: https://cloud.ibm.com/apidocs/machine-learning-cp#deployments-create
  model_id = "ibm/granite-3-2-8b-instruct"
  thread_id = "thread-1" # More info here: https://langchain-ai.github.io/langgraph/how-tos/persistence/

Langkah 4. Unggah data Anda ke IBM Cloud Object Storage

Agen kita memerlukan sumber data untuk memberikan informasi terkini dan menambahkan data baru. Kita akan menyimpan file data di IBM Cloud Object Storage.

  1. Pertama, masuk ke IBM Cloud. Kemudian, buat proyek baru.
  2. Di menu sisi kiri, pilih Daftar sumber daya. Menggunakan tombol Buat sumber daya, buat instance Cloud Object Storage baru atau cukup gunakan tautan ini.
  3. Buka Instance IBM Cloud Storage yang baru dibuat, buat bucket baru. Untuk tutorial ini, Anda dapat memilih Smart Tier yang merupakan paket gratis. Saat diarahkan, unggah file Anda. Untuk file sampel, lihat file tickets.csv di repositori GitHub yang ditautkan pada langkah 2.

Langkah 5. Buat koneksi data Anda

Untuk menyediakan fungsionalitas manajemen tiket TI ke agen ReAct, kita harus terhubung ke sumber data di IBM Cloud Object Storage. Untuk langkah ini, kita dapat menggunakan ibm_boto3 sebagai pustaka.

Dalam tools.py , parameter COS_ENDPOINT , COS_INSTANCE_CRN , BUCKET_NAME dan CSV_FILE_NAME harus diisi dengan informasi yang sesuai menggunakan detail bucket yang ditemukan di instance Cloud Object Storage Anda di bawah tab Konfigurasi. 

  COS_ENDPOINT = ""       #find in your COS bucket configuration
  COS_INSTANCE_CRN = ""   #find in your COS bucket configuration
  BUCKET_NAME = ""        #find in your COS bucket configuration
  CSV_FILE_NAME = "filename.csv" #you can use the provided tickets.csv sample file 

  cos = ibm_boto3.client(
      "s3",
      ibm_api_key_id=dep_config["watsonx_apikey"],
      ibm_service_instance_id=COS_INSTANCE_CRN,
      config=Config(signature_version="oauth"),
      endpoint_url=COS_ENDPOINT,
  )

Langkah 6. Buat alat bantu khusus Anda

Agen akan dapat membaca dan menulis data dalam file kita. Pertama, buat alat untuk membaca data menggunakan dekorator@tool LangChain. 

Kita telah menambahkan alatfind_tickets ke filetools.py sebelumnya. Alat ini mengambil objek data dari Cloud Object Storage dan menampilkannya sebagai kerangka data Pandas. Jika tidak, pengecualian akan diberlakukan. 

  @tool 
  def find_tickets():
      """Returns a list of of all tickets."""
      try:
          response = cos.get_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME)
          csv_data = pd.read_csv(response['Body']) 
          print("Ticket file loaded successfully:")
          return csv_data
      except Exception as e:
          print(f"Error loading file from COS: {e}")
          return None

 

Selanjutnya, kita telah menambahkan alat create_ticket ini. 

  @tool 
def create_ticket(issue: str, urgency:str):
    """Creates a tickets for a customer issue. Request a detailed explanation of the customer issue and urgency level before creating a ticket.
    
    Args:
        issue (str): A description of the issue.
        urgency (str): A category value for the level of urgency. Can be "low", "medium", or "high".
    
    Returns:
        The new ticket.
    """
    try:
        # retrieve the existing item to reload the contents
        response = cos.get_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME)
        existing_body_df = pd.read_csv(response['Body'])
        new_ticket = {"issue": issue, "date_added":datetime.now().strftime("%m-%d-%Y"), "urgency":urgency, "status":"open"}
        # Add a new row (i.e. ticket) using loc[]
        existing_body_df.loc[len(existing_body_df)] = new_ticket

        cos.put_object(Bucket=BUCKET_NAME, Key=CSV_FILE_NAME, Body=existing_body_df.to_json())
        return "New ticket successfully created!"
    except Exception as e:
        print("Unable to create new ticket. Please try again.")

Alat ini mengambil deskripsi masalah dari pengguna dan urgensi masalah sebagai argumennya. Baris baru berisi informasi ini ditambahkan ke file di COS dan dengan demikian, tiket baru dibuat. Jika tidak, pengecualian akan diberlakukan. 

Satu alat terakhir yang harus kita tambahkan ke file tools.py adalah alat get_todays_date yang menggunakan modul datetime untuk menampilkan tanggal hari ini dalam format MM-DD-YYYY. Alat ini akan berguna untuk mengakses tanggal saat ini, yang tidak dapat diambil oleh agen karena LLM tidak dilatih menggunakan data ini. 

  @tool
  def get_todays_date():
    """Returns today's date in MM-DD-YYYY format."""
    date = datetime.now().strftime("%m-%d-%Y")
    return date 

Untuk memberikan akses ke alat ini untuk agen, kita telah menambahkannya ke daftar TOOLS di modul extensions yang berisi file init.py sebelumnya. Daftar ini harus menjadi isi dari file init.py di direktori src/langgraph_react_agent .

  from .tools import (
    find_tickets,
    get_todays_date,
    create_ticket
  )

  TOOLS = [
      find_tickets,
      get_todays_date,
      create_ticket
  ]


Alat-alat ini diimpor di file agent.py dan diteruskan ke fungsi LangGraph bawaan create_react_agent  sebagai eksekutor agen. Parameter lain termasuk model bahasa besar yang diinisialisasi dengan menggunakan kelas ChatWatsonx yang memungkinkan pemanggilan alat pada watsonx.ai, penghemat memori, dan prompt sistem. Perhatikan, beberapa prompt akan berperilaku lebih baik daripada yang lain dan dengan demikian, beberapa tingkat rekayasa prompt mungkin diperlukan tergantung pada LLM yang Anda pilih. 

Sebelum menerapkan agen Anda, ingatlah untuk melengkapi semua informasi yang diperlukan di file config.toml

Langkah 7. Mengobrol dengan agen Anda

Ada tiga cara untuk mengobrol dengan agen Anda.

Opsi 1. Mengirim kueri ke agen secara lokal


Jalankan skrip untuk eksekusi layanan AI lokal.

  poetry run python examples/execute_ai_service_locally.py


Opsi 2. Menerapkan agen ke antarmuka obrolan bawaan di watsonx.ai


Opsi terakhir adalah mengakses agen di ruang Penerapan di watsonx.ai. Untuk melakukan ini, pilih "Penerapan" di menu sebelah kiri. Kemudian, pilih ruang penerapan Anda, pilih tab "Aset", pilih asetonline ai_service , pilih aset dengan tag "wx-agent" sekali lagi dan terakhir, buka tab "Pratinjau". Sekarang, Anda dapat mengobrol dengan agen di antarmuka obrolan interaktif. Masing-masing dari 3 opsi ini akan menghasilkan output yang serupa.

Opsi 3. Menerapkan dan mengobrol dengan agen di IDE Anda

Untuk menjalankan skrip penerapan, jalankan variabel deployment_id  dalam file query_existing_deployment.py .

Parameter deployment_id penerapan Anda dapat diperoleh dengan menjalankan file scripts/deploy.py .

Selanjutnya, jalankan skrip penerapan. 

  poetry run python scripts/deploy.py

Kemudian, jalankan skrip untuk mengirimkan kueri penerapan.

  poetry run python examples/query_existing_deployment.py


Untuk keperluan tutorial ini, mari kita pilih opsi 2 dan kirimkan kueri agen yang diterapkan di watsonx.ai dalam bentuk chatbot agen. Berikan beberapa prompt untuk agen, yang akan membutuhkan penggunaan alat. Setelah mengikuti langkah-langkah yang tercantum dalam Opsi 3, Anda akan melihat antarmuka obrolan di watsonx.ai. Di sana, kita dapat mengetikkan prompt kita. 

Pertama, mari kita uji apakah alat create_ticket akan berhasil dipanggil. Berikan prompt ke agen untuk membuat tiket baru.

Meminta agen yang diterapkan di watsonx.ai untuk membuat tiket baru Meminta agen yang diterapkan di watsonx.ai untuk membuat tiket baru

Seperti yang Anda lihat pada jawaban akhir agen, sistem AI berhasil menggunakan pemecahan masalah untuk membuat tiket baru dengan alat create_ticket tersebut. Memiliki visibilitas atas panggilan alat sangat membantu untuk tujuan debugging. Sekarang, mari kita periksa apakah tiket berhasil ditambahkan ke file data yang berfungsi sebagai basis pengetahuan agen. 

Meminta agen yang diterapkan di watsonx.ai untuk mengambil tiket terbaru Meminta agen yang diterapkan di watsonx.ai untuk mengambil tiket terbaru

Hebat! Agen berhasil menambahkan tiket ke file.

Kesimpulan

Dalam tutorial ini, Anda membuat agen dengan kerangka kerja ReAct yang menggunakan pengambilan keputusan untuk menyelesaikan tugas-tugas kompleks seperti mengambil dan membuat tiket dukungan. Ada beberapa model AI yang memungkinkan pemanggilan alat agen, seperti Google Gemini, IBM Granite, dan OpenAI GPT-4. Dalam proyek kita, kita menggunakan model AI IBM Granite melalui watsonx.ai API. Model berperilaku seperti yang diharapkan baik secara lokal maupun saat diterapkan di watsonx.ai. Sebagai langkah selanjutnya, lihat templat LlamaIndex dan crewAI multiagent yang tersedia di repositori GitHub watsonx-developer-hub untuk mengembangkan agen AI.

Solusi terkait
Pengembangan agen AI IBM 

Bantu pengembang untuk membangun, menerapkan, dan memantau agen AI dengan studio IBM watsonx.ai.

Jelajahi watsonx.ai
Agen AI dan asisten IBM

Ciptakan produktivitas inovatif dengan salah satu rangkaian kemampuan paling komprehensif di industri untuk membantu bisnis membangun, menyesuaikan, dan mengelola agen dan asisten AI. 

Jelajahi agen AI
IBM Granite

Raih penghematan biaya lebih dari 90% dengan model Granite yang lebih kecil dan terbuka, yang dirancang untuk efisiensi pengembang. Model yang sesuai dengan kebutuhan perusahaan ini memberikan kinerja luar biasa terhadap tolok ukur keamanan dan di berbagai tugas perusahaan, mulai dari keamanan siber hingga RAG.

Jelajahi Granite
Ambil langkah selanjutnya

Otomatisasi alur kerja yang kompleks dan ciptakan produktivitas inovatif dengan salah satu rangkaian kemampuan paling komprehensif di industri untuk membantu bisnis membangun, menyesuaikan, dan mengelola agen dan asisten AI. 

Jelajahi pengembangan agen watsonx.ai Temukan watsonx Orchestrate