โ† Back to list
eco2-team

langgraph-pipeline

by eco2-team

๐ŸŒฑ ์ด์ฝ”์—์ฝ”(Ecoยฒ) BE

โญ 0๐Ÿด 0๐Ÿ“… Jan 25, 2026

SKILL.md


name: langgraph-pipeline description: LangGraph 1.0+ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๊ฐ€์ด๋“œ. Intent-Routed Workflow, Subagent ํŒจํ„ด, Checkpointing, Conditional Routing ๊ตฌํ˜„ ์‹œ ์ฐธ์กฐ. "langgraph", "pipeline", "graph", "workflow", "subagent", "checkpointer" ํ‚ค์›Œ๋“œ๋กœ ํŠธ๋ฆฌ๊ฑฐ.

LangGraph Pipeline Guide (v1.0+)

Ecoยฒ ํŒŒ์ดํ”„๋ผ์ธ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Intent-Routed Workflow with Subagent                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚  START โ†’ intent โ†’ [vision?] โ†’ router โ”€โ”€โ”ฌโ”€โ†’ waste โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”‚
โ”‚                              โ”‚         โ”œโ”€โ†’ character โ”€โ”€โ”€โ”€โ”ค              โ”‚
โ”‚                              โ”‚         โ”œโ”€โ†’ location โ”€โ”€โ”€โ”€โ”€โ”คโ”€โ”€โ†’ answer โ†’ END
โ”‚                              โ”‚         โ”œโ”€โ†’ web_search โ”€โ”€โ”€โ”ค              โ”‚
โ”‚                              โ”‚         โ””โ”€โ†’ general โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ”‚
โ”‚                              โ”‚                                           โ”‚
โ”‚                              โ””โ”€โ†’ [feedback_loop] โ”€โ†’ answer              โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

StateGraph ๊ธฐ๋ณธ ํŒจํ„ด

Graph ์ƒ์„ฑ ๋ฐ ์ปดํŒŒ์ผ

from langgraph.graph import END, StateGraph

# State๋Š” TypedDict ๋˜๋Š” dict ์‚ฌ์šฉ
graph = StateGraph(dict)

# ๋…ธ๋“œ ์ถ”๊ฐ€
graph.add_node("intent", intent_node)
graph.add_node("router", router_node)
graph.add_node("answer", answer_node)

# ์—ฃ์ง€ ์ถ”๊ฐ€
graph.add_edge("intent", "router")
graph.add_edge("answer", END)

# ์กฐ๊ฑด๋ถ€ ๋ผ์šฐํŒ…
graph.add_conditional_edges(
    "router",
    route_by_intent,  # ๋ผ์šฐํŒ… ํ•จ์ˆ˜
    {
        "waste": "waste_node",
        "character": "character_node",
        "general": "answer",
    }
)

# ์‹œ์ž‘์  ์„ค์ • ๋ฐ ์ปดํŒŒ์ผ
graph.set_entry_point("intent")
compiled = graph.compile(checkpointer=checkpointer)

Node ์ •์˜ ํŒจํ„ด

async def intent_node(state: dict) -> dict:
    """๋…ธ๋“œ๋Š” state๋ฅผ ๋ฐ›์•„ ์—…๋ฐ์ดํŠธํ•  ํ•„๋“œ๋งŒ ๋ฐ˜ํ™˜"""
    intent = await classifier.classify(state["query"])
    return {
        "intent": intent.value,
        "confidence": intent.confidence,
    }

Checkpointing (Cache-Aside ํŒจํ„ด)

L1: Redis + L2: PostgreSQL

from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver

class CachedPostgresSaver(BaseCheckpointSaver):
    """Redis L1 ์บ์‹œ + PostgreSQL L2 ์˜์† ์ €์žฅ์†Œ"""

    def __init__(
        self,
        redis: Redis,
        pg_saver: AsyncPostgresSaver,
        ttl: int = 3600,
    ):
        self._redis = redis
        self._pg = pg_saver
        self._ttl = ttl

    async def aget(
        self,
        config: RunnableConfig,
    ) -> Checkpoint | None:
        thread_id = config["configurable"]["thread_id"]
        key = f"checkpoint:{thread_id}"

        # L1 ์บ์‹œ ์กฐํšŒ
        cached = await self._redis.get(key)
        if cached:
            return self._deserialize(cached)

        # L2 ์กฐํšŒ ํ›„ L1 ์บ์‹œ
        checkpoint = await self._pg.aget(config)
        if checkpoint:
            await self._redis.setex(
                key,
                self._ttl,
                self._serialize(checkpoint)
            )
        return checkpoint

Conditional Routing

์˜๋„ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

def route_by_intent(state: dict) -> str:
    """์˜๋„์— ๋”ฐ๋ผ ๋‹ค์Œ ๋…ธ๋“œ ๊ฒฐ์ •"""
    intent = state.get("intent", "general")

    routing_map = {
        "waste_query": "waste_node",
        "character_query": "character_node",
        "location_query": "location_node",
        "web_search": "web_search_node",
    }

    return routing_map.get(intent, "answer")

์กฐ๊ฑด๋ถ€ ์ง„์ž…/์Šคํ‚ต

def should_use_vision(state: dict) -> str:
    """์ด๋ฏธ์ง€ ์กด์žฌ ์—ฌ๋ถ€๋กœ vision ๋…ธ๋“œ ์‚ฌ์šฉ ๊ฒฐ์ •"""
    if state.get("image_url"):
        return "vision"
    return "router"

graph.add_conditional_edges(
    "intent",
    should_use_vision,
    {
        "vision": "vision_node",
        "router": "router_node",
    }
)

Subagent ํ†ตํ•ฉ ํŒจํ„ด

gRPC Client ์ฃผ์ž…

def create_chat_graph(
    llm: LLMClientPort,
    retriever: RetrieverPort,
    character_client: CharacterClientPort | None = None,
    location_client: LocationClientPort | None = None,
    checkpointer: BaseCheckpointSaver | None = None,
) -> StateGraph:
    """Port ๊ธฐ๋ฐ˜ ์˜์กด์„ฑ ์ฃผ์ž…์œผ๋กœ Subagent ํ†ตํ•ฉ"""

    graph = StateGraph(dict)

    # Subagent ๋…ธ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃผ์ž…๋œ ๊ฒฝ์šฐ์—๋งŒ ์ถ”๊ฐ€
    if character_client:
        graph.add_node(
            "character",
            create_character_node(character_client)
        )

    if location_client:
        graph.add_node(
            "location",
            create_location_node(location_client)
        )

    return graph.compile(checkpointer=checkpointer)

Reference Files

LangGraph 1.0 ๋ณ€๊ฒฝ์‚ฌํ•ญ

ํ•ญ๋ชฉ๋ณ€๊ฒฝ ์ „๋ณ€๊ฒฝ ํ›„
Prebuilt agentslanggraph.prebuiltlangchain.agents (deprecated)
Breaking changes-์—†์Œ
Checkpointer๋™์ผ๋™์ผ
StateGraph API๋™์ผ๋™์ผ

Note: LangGraph 1.0.0 ๋ฆด๋ฆฌ์ฆˆ๋Š” zero breaking changes. ๊ธฐ์กด ์ฝ”๋“œ ํ˜ธํ™˜.

Score

Total Score

60/100

Based on repository quality metrics

โœ“SKILL.md

SKILL.mdใƒ•ใ‚กใ‚คใƒซใŒๅซใพใ‚Œใฆใ„ใ‚‹

+20
โœ“LICENSE

ใƒฉใ‚คใ‚ปใƒณใ‚นใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

+10
โ—‹่ชฌๆ˜Žๆ–‡

100ๆ–‡ๅญ—ไปฅไธŠใฎ่ชฌๆ˜ŽใŒใ‚ใ‚‹

0/10
โ—‹ไบบๆฐ—

GitHub Stars 100ไปฅไธŠ

0/15
โ—‹ๆœ€่ฟ‘ใฎๆดปๅ‹•

3ใƒถๆœˆไปฅๅ†…ใซๆ›ดๆ–ฐใŒใ‚ใ‚‹

0/10
โ—‹ใƒ•ใ‚ฉใƒผใ‚ฏ

10ๅ›žไปฅไธŠใƒ•ใ‚ฉใƒผใ‚ฏใ•ใ‚Œใฆใ„ใ‚‹

0/5
โœ“Issue็ฎก็†

ใ‚ชใƒผใƒ—ใƒณIssueใŒ50ๆœชๆบ€

+5
โœ“่จ€่ชž

ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐ่จ€่ชžใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

+5
โ—‹ใ‚ฟใ‚ฐ

1ใคไปฅไธŠใฎใ‚ฟใ‚ฐใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

0/5

Reviews

๐Ÿ’ฌ

Reviews coming soon