â ã¹ãã«äžèŠ§ã«æ»ã

langgraph-pipeline
by eco2-team
ð± ìŽìœììœ(Eco²) BE
â 0ðŽ 0ð
2026幎1æ25æ¥
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
- Graph íšíŽ: See graph-patterns.md
- Checkpointing: See checkpointing.md
- State êŽëЬ: See state-management.md
- í ì€íž íšíŽ: See testing-patterns.md
LangGraph 1.0 ë³ê²œì¬í
| í목 | ë³ê²œ ì | ë³ê²œ í |
|---|---|---|
| Prebuilt agents | langgraph.prebuilt | langchain.agents (deprecated) |
| Breaking changes | - | ìì |
| Checkpointer | ëìŒ | ëìŒ |
| StateGraph API | ëìŒ | ëìŒ |
Note: LangGraph 1.0.0 늎늬ìŠë zero breaking changes. Ʞ졎 ìœë íží.
ã¹ã³ã¢
ç·åã¹ã³ã¢
60/100
ãªããžããªã®åè³ªææšã«åºã¥ãè©äŸ¡
â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
ã¬ãã¥ãŒ
ð¬
ã¬ãã¥ãŒæ©èœã¯è¿æ¥å ¬éäºå®ã§ã