0Pricing
AI Engineering Academy · Pelajaran

Membangun Alur Pemrosesan Multi-Agen dengan LangGraph

Gunakan LangGraph untuk mendefinisikan simpul agen, sisi kondisional, dan status bersama dalam graf berarah, sehingga alur kerja multi-agen yang kompleks dapat memiliki perulangan, percabangan, dan titik pemeriksaan dengan manusia.

Membangun Alur Pemrosesan Multi-Agen dengan LangGraph adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Apa Itu LangGraph?

LangGraph adalah pustaka yang dibangun di atas LangChain dan memungkinkan Anda mendefinisikan alur kerja multiagen sebagai graf berarah. Simpul dalam graf merepresentasikan agen atau langkah pemrosesan, sisi merepresentasikan aliran status di antara simpul tersebut, dan sisi kondisional memungkinkan perutean dinamis berdasarkan status saat ini. LangGraph menangani mesin eksekusi, persistensi status, serta titik pemeriksaan dengan keterlibatan manusia.

# pip install langgraph
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator

# Define your shared state schema
class AgentState(TypedDict):
    messages: Annotated[list, operator.add]  # append-only list
    research: str
    draft: str
    status: str

Mendefinisikan Status di LangGraph

Setiap alur kerja LangGraph beroperasi pada objek status bersama yang dapat dibaca dan ditulis oleh semua simpul. Status tersebut adalah kamus bertipe (TypedDict) yang membawa data melalui graf. Saat sebuah simpul dijalankan, simpul itu menerima status saat ini, menjalankan tugasnya, lalu mengembalikan kamus pembaruan untuk digabungkan ke dalam status. Model status bersama ini memungkinkan agen berkomunikasi tanpa ketergantungan langsung.

from typing import TypedDict

class ResearchState(TypedDict):
    query: str           # input from user
    research_notes: str  # filled by researcher node
    written_draft: str   # filled by writer node
    review_feedback: str # filled by reviewer node
    final_output: str    # filled by synthesizer node
    iteration_count: int # tracks how many revision loops occurred

# Each node returns a PARTIAL update - only the keys it modifies
def researcher_node(state: ResearchState) -> dict:
    notes = do_research(state['query'])
    return {'research_notes': notes}  # only update this key

Membuat Simpul Agen

Di LangGraph, setiap agen adalah fungsi simpul yang menerima status saat ini, menjalankan pemanggilan LLM dan eksekusi alatnya, lalu mengembalikan pembaruan status. Simpul adalah fungsi murni — simpul tidak menyimpan status internal. Seluruh status berada di objek status graf bersama, sehingga alur kerja mudah diperiksa, dilanjutkan, dan di-debug.

from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage

llm = ChatOpenAI(model='gpt-4o')

def researcher_node(state: ResearchState) -> dict:
    messages = [
        SystemMessage(content='You are a research specialist. Find accurate information.'),
        HumanMessage(content=f'Research this topic: {state["query"]}')
    ]
    response = llm.invoke(messages)
    return {'research_notes': response.content}

def writer_node(state: ResearchState) -> dict:
    messages = [
        SystemMessage(content='You are a technical writer. Write clear, engaging prose.'),
        HumanMessage(content=f'Write a draft using these notes:\n{state["research_notes"]}')
    ]
    response = llm.invoke(messages)
    return {'written_draft': response.content}

Membangun Graf dengan StateGraph

Setelah mendefinisikan fungsi simpul, hubungkan fungsi-fungsi tersebut dengan StateGraph. Tambahkan simpul dengan graph.add_node(), tambahkan sisi di antaranya dengan graph.add_edge(), tetapkan titik masuk dengan graph.set_entry_point(), lalu kompilasikan graf menjadi objek yang dapat dijalankan dengan graph.compile(). Graf yang telah dikompilasi adalah objek yang dapat dijalankan, menerima status awal, dan mengembalikan status akhir.

from langgraph.graph import StateGraph, END

# Build the graph
workflow = StateGraph(ResearchState)

# Add nodes
workflow.add_node('researcher', researcher_node)
workflow.add_node('writer', writer_node)
workflow.add_node('reviewer', reviewer_node)

# Add edges (sequential pipeline)
workflow.set_entry_point('researcher')
workflow.add_edge('researcher', 'writer')
workflow.add_edge('writer', 'reviewer')
workflow.add_edge('reviewer', END)

# Compile into an executable
app = workflow.compile()

# Run it
result = app.invoke({'query': 'What is RAG?', 'iteration_count': 0})
print(result['written_draft'])

Sisi Kondisional untuk Perutean Dinamis

Sisi kondisional memungkinkan graf merutekan alur ke simpul yang berbeda berdasarkan status saat ini. Alih-alih menggunakan sisi tetap, Anda menyediakan fungsi perutean yang memeriksa status dan mengembalikan nama simpul berikutnya. Hal ini memungkinkan pengulangan revisi, gerbang kualitas, langkah persetujuan manusia, dan percabangan berdasarkan isi keluaran agen.

def should_revise(state: ResearchState) -> str:
    '''Router function: returns the name of the next node.'''
    if state['iteration_count'] >= 3:
        return 'finalize'  # Too many revisions - accept as is
    if 'insufficient' in state.get('review_feedback', '').lower():
        return 'researcher'  # Need more research
    if 'rewrite' in state.get('review_feedback', '').lower():
        return 'writer'  # Needs rewriting
    return 'finalize'  # Looks good

# Add conditional edge from reviewer
workflow.add_conditional_edges(
    'reviewer',                    # from node
    should_revise,                 # routing function
    {
        'researcher': 'researcher', # route name -> node name
        'writer': 'writer',
        'finalize': 'finalizer'
    }
)

Pengulangan dan Iterasi di LangGraph

LangGraph secara bawaan mendukung pengulangan — sebuah agen dapat dikunjungi kembali beberapa kali. Hal ini penting untuk siklus revisi, pola percobaan ulang saat gagal, dan penyempurnaan berulang. Selalu sertakan kondisi penghentian pengulangan dalam status Anda (seperti penghitung iterasi atau ambang skor kualitas), lalu terapkan kondisi tersebut di perute sisi kondisional untuk mencegah pengulangan tanpa akhir.

def researcher_node(state: ResearchState) -> dict:
    notes = do_research(state['query'])
    return {
        'research_notes': notes,
        'iteration_count': state['iteration_count'] + 1  # always increment
    }

def should_continue_research(state: ResearchState) -> str:
    # Terminate loop after 3 iterations regardless of quality
    if state['iteration_count'] >= 3:
        return END
    # Continue if research is incomplete
    if len(state.get('research_notes', '')) < 500:
        return 'researcher'  # loop back
    return 'writer'  # proceed to next stage

Eksekusi Simpul secara Paralel

LangGraph mendukung cabang paralel menggunakan RunnableParallel di dalam sebuah simpul atau dengan menyebarkan alur ke beberapa simpul. Ketika subtugas independen perlu berjalan secara bersamaan, Anda dapat membuat penyebaran dari satu simpul ke beberapa simpul paralel, lalu membuat simpul penggabungan yang menunggu semuanya selesai dan menggabungkan hasilnya ke dalam status bersama.

# Fan-out: one node triggers multiple parallel ones
workflow.add_edge('planner', 'researcher_a')
workflow.add_edge('planner', 'researcher_b')
workflow.add_edge('planner', 'researcher_c')

# Fan-in: aggregator waits for all three
workflow.add_edge('researcher_a', 'aggregator')
workflow.add_edge('researcher_b', 'aggregator')
workflow.add_edge('researcher_c', 'aggregator')
workflow.add_edge('aggregator', 'writer')

# Aggregator merges parallel results
def aggregator_node(state: ResearchState) -> dict:
    combined = state.get('notes_a', '') + '\n' + state.get('notes_b', '') + '\n' + state.get('notes_c', '')
    return {'research_notes': combined}

Titik Pemeriksaan dan Keterlibatan Manusia

LangGraph mendukung pembuatan titik pemeriksaan dengan berintegrasi dengan backend penyimpan titik pemeriksaan (SQLite, Redis, atau PostgreSQL). Jika titik pemeriksaan diaktifkan, status graf disimpan setelah setiap eksekusi simpul. Hal ini memungkinkan alur kerja yang berjalan lama untuk dijeda, diperiksa, dan dilanjutkan. Fitur ini juga memungkinkan pola keterlibatan manusia, ketika graf berhenti di simpul tertentu dan menunggu manusia menyetujui atau memberikan masukan sebelum melanjutkan.

from langgraph.checkpoint.sqlite import SqliteSaver

# Use SQLite for persistent checkpoints
checkpointer = SqliteSaver.from_conn_string(':memory:')
app = workflow.compile(checkpointer=checkpointer, interrupt_before=['human_review'])

# First run - pauses at human_review node
thread = {'configurable': {'thread_id': 'my-workflow-1'}}
result = app.invoke({'query': 'Analyze competitors'}, config=thread)
# result.next == 'human_review' -- waiting for human input

# Human provides feedback and resumes
app.update_state(thread, {'review_feedback': 'Good research, proceed with writing'})
final = app.invoke(None, config=thread)  # resume from checkpoint

Mengalirkan Keluaran LangGraph

LangGraph mendukung mode aliran yang menghasilkan pembaruan status sementara setiap kali sebuah simpul selesai, alih-alih menunggu seluruh alur kerja selesai. Hal ini berguna untuk pipeline panjang ketika Anda ingin menampilkan kemajuan sebagian kepada pengguna. Gunakan app.stream() untuk memperoleh iterator cuplikan status dari setiap langkah.

# Stream intermediate results as each node completes
for event in app.stream({'query': 'What is RAG?'}):
    for node_name, node_output in event.items():
        print(f'Node completed: {node_name}')
        if 'research_notes' in node_output:
            print('Research done:', node_output['research_notes'][:100])
        if 'written_draft' in node_output:
            print('Draft done:', node_output['written_draft'][:100])

Memvisualisasikan Graf

LangGraph dapat menggambar graf sebagai diagram Mermaid, yang sangat membantu untuk memahami alur kerja kompleks dengan banyak simpul dan sisi kondisional. Panggil app.get_graph().draw_mermaid_png() untuk memperoleh gambar PNG, atau app.get_graph().draw_mermaid() untuk memperoleh sintaks Mermaid yang dapat Anda tempelkan ke perender Mermaid mana pun.

# Visualize the workflow graph
graph_image = app.get_graph().draw_mermaid_png()
with open('workflow.png', 'wb') as f:
    f.write(graph_image)

# Or print Mermaid syntax
print(app.get_graph().draw_mermaid())
# Outputs:
# graph TD
#    __start__ --> researcher
#    researcher --> writer
#    writer --> reviewer
#    reviewer -->|Good| finalize
#    reviewer -->|Needs work| researcher

Contoh Agen LangGraph dari Awal hingga Akhir

Jika semuanya digabungkan: pipeline multiagen LangGraph yang lengkap mendefinisikan status TypedDict, membuat fungsi simpul untuk setiap agen, menghubungkannya dengan StateGraph, menambahkan sisi kondisional untuk pengulangan revisi, mengompilasinya dengan penyimpan titik pemeriksaan, dan menjalankannya dengan status awal. Dengan demikian, Anda memperoleh alur kerja multiagen yang tangguh, dapat diamati, dan dapat dilanjutkan, dengan kode pendukung yang minimal.

Pemeriksaan Singkat

Uji pemahaman Anda tentang pipeline multiagen LangGraph dari pelajaran ini.

Rangkuman Pelajaran

Dalam pelajaran ini Anda mempelajari bahwa: LangGraph merepresentasikan alur kerja multiagen sebagai graf berarah, dengan simpul sebagai agen dan sisi sebagai aliran, sisi kondisional memungkinkan perutean dinamis, pengulangan, dan siklus revisi berdasarkan status saat ini, serta pembuatan titik pemeriksaan memungkinkan alur kerja yang berjalan lama dijeda dan dilanjutkan dengan persetujuan manusia. Selanjutnya, kita akan mempelajari memori bersama dan komunikasi antargen.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun Alur Pemrosesan Multi-Agen dengan LangGraph” gratis?

Ya — teks lengkap “Membangun Alur Pemrosesan Multi-Agen dengan LangGraph” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membangun Alur Pemrosesan Multi-Agen dengan LangGraph”?

Gunakan LangGraph untuk mendefinisikan simpul agen, sisi kondisional, dan status bersama dalam graf berarah, sehingga alur kerja multi-agen yang kompleks dapat memiliki perulangan, percabangan, dan t… Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?

Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Membangun Alur Pemrosesan Multi-Agen dengan LangGraph” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Agen Tunggal Menemui Jalan Buntu
  2. Pola Orkestrator-Subagen
  3. Membangun Alur Pemrosesan Multi-Agen dengan LangGraph
  4. Memori Bersama dan Komunikasi Antar-Agen
← Kembali ke AI Engineering Academy