LangGraph + Ertas

    使用 LangGraph 建構正式上線等級的代理——這是基於圖的編排框架,具備稽核軌跡、checkpoint 與有狀態工作流程,並完全相容於 Ertas 訓練的本地模型。

    Overview

    LangGraph 是 LangChain 代理的正式上線等級繼任者,專為在生產環境中執行代理的營運需求而設計:明確的狀態機、可長時保存的 checkpoint、稽核軌跡,以及人類介入的中斷點。LangChain 較舊的代理抽象使用隱式的 ReAct 風格迴圈,而 LangGraph 則要求你將代理定義為由狀態與轉移構成的有向圖——這項前期成本,會在大幅改善的可除錯性、可恢復性以及在生產條件下的可靠性上得到回報。到了 2026 年初,LangGraph 在 GitHub 星標數上已超越 CrewAI,現已成為 Python 生態系中主導性的正式上線代理框架。

    基於圖的設計帶來扁平代理迴圈不易實現的能力:具結構化彙整的並行分支執行、依中間狀態的條件路由、可讓代理跨小時或跨日暫停與恢復的 checkpoint,以及讓你能從任何狀態重播代理執行的 rollback 點。對於需要處理長時運行工作流程、整合人類核可步驟,或從基礎設施故障中恢復的企業部署而言,LangGraph 越來越成為相較於更簡單方案的預設選擇。

    How Ertas Integrates

    Ertas 訓練的模型透過與 LangChain 相同的 provider 介面與 LangGraph 協同運作——這兩個框架共享其底層的 LLM 抽象。在 Ertas Studio 微調模型並部署至 OpenAI 相容端點(Ollama、vLLM 或 Ertas Cloud)後,你可以設定一個指向該端點的 LangChain ChatOpenAI 或 ChatOllama 實例,再將該 LLM 傳入你的 LangGraph 節點。每個呼叫 LLM 的節點都會使用你的 Ertas 訓練模型,而 LangGraph 的編排功能(checkpoint、分支、人類介入)無論底層 LLM 介面背後是哪個模型都會透明地運作。

    對於正式上線部署,LangGraph + Ertas 的組合同時解決兩個問題。LangGraph 處理營運面向:工作流程的耐久性、稽核日誌與可靠性。Ertas 處理品質面向:以特定領域的模型專屬化獲得遠比通用模型更好的任務表現。最終結果是既具良好工程設計(耐久、可除錯、可恢復)又經良好訓練(領域專屬、準確、快速)的代理。對於在受監管產業——醫療、金融、法律——建構代理的團隊而言,這種組合特別具吸引力,因為 LangGraph 的稽核能力與 Ertas 的本地部署一同滿足多數合規需求而不需妥協。

    Getting Started

    1. 1

      於 Ertas Studio 微調領域模型

      訓練一個擷取你領域專業的模型。針對 LangGraph 工作流程,含明確推理步驟與工具使用軌跡的訓練資料能產生最佳結果。

    2. 2

      部署至 OpenAI 相容端點

      匯出為 GGUF 並透過 Ollama、vLLM 或 Ertas Cloud 提供服務。LangGraph 透過 LangChain provider 抽象呼叫任何標準 chat-completion 端點。

    3. 3

      安裝 LangGraph 並設定你的 LLM

      安裝 langgraph 與 LangChain provider 套件(langchain-openai 或 langchain-ollama)。建立指向你 Ertas 推論端點的 LLM 實例。

    4. 4

      將你的代理定義為一張圖

      將工作流程建模為有向圖:以節點代表每個步驟、以邊代表轉移,並以條件邏輯處理路由。在需要的地方加入 checkpoint 以保存耐久狀態與人類介入的中斷點。

    5. 5

      以 LangGraph Cloud 或自託管方式部署

      將你的圖部署至 LangGraph Cloud 取得託管編排,或使用 LangGraph Server 自託管。兩種選項都能與自託管的 Ertas 推論協同運作。

    python
    from typing import TypedDict, Literal
    from langchain_openai import ChatOpenAI
    from langgraph.graph import StateGraph, END
    from langgraph.checkpoint.memory import MemorySaver
    
    # Point LangGraph at your Ertas-trained model
    llm = ChatOpenAI(
        base_url="http://localhost:11434/v1",
        model="ertas-claims-adjuster-14b",
        api_key="not-needed",
        temperature=0.1,
    )
    
    class ClaimState(TypedDict):
        claim_id: str
        claim_data: dict
        classification: str
        requires_review: bool
        decision: str
    
    def classify(state: ClaimState):
        response = llm.invoke(f"Classify this claim: {state['claim_data']}")
        return {"classification": response.content}
    
    def route(state: ClaimState) -> Literal["auto_approve", "human_review"]:
        return "human_review" if state["requires_review"] else "auto_approve"
    
    # Build the graph
    graph = StateGraph(ClaimState)
    graph.add_node("classify", classify)
    graph.add_node("auto_approve", lambda s: {"decision": "approved"})
    graph.add_node("human_review", lambda s: {"decision": "pending_review"})
    
    graph.set_entry_point("classify")
    graph.add_conditional_edges("classify", route, {
        "auto_approve": "auto_approve",
        "human_review": "human_review",
    })
    graph.add_edge("auto_approve", END)
    graph.add_edge("human_review", END)
    
    # Compile with persistent checkpointing
    app = graph.compile(checkpointer=MemorySaver())
    
    # Run with full audit trail
    result = app.invoke(
        {"claim_id": "C-12345", "claim_data": {...}},
        config={"configurable": {"thread_id": "claim-12345"}},
    )
    在 LangGraph 中建構由 Ertas 訓練領域模型驅動的有狀態保險理賠處理代理,具備完整的稽核軌跡與耐久 checkpoint。

    Benefits

    • 明確的狀態機在可除錯性上遠勝隱式代理迴圈
    • 可長時保存的 checkpoint——代理可跨小時、跨日或跨基礎設施故障暫停與恢復
    • 每次狀態轉移的稽核軌跡可支援受監管產業的合規需求
    • 人類介入的中斷點可自然處理核可工作流程
    • 具結構化結果彙整的並行分支執行
    • 結合 LangGraph 的編排與 Ertas 的領域專屬化,打造正式上線等級的代理

    Related Resources

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.