用 LangGraph 搭一套企业级 Coding Workflow,聊聊我的思路
公司前一阵子在折腾 LangGraph,想把团队里从需求到上线的整个编码流程串起来。传统的 CI/CD 管道大家都熟,但如果把 LLM 能力嵌进去,让每个环节都带上"智能判断",体验完全不一样。这里分享下我的方案和踩坑记录。
为什么选 LangGraph
LangChain 的 Chain 模式是线性的,而真实的开发流程充满分支——代码写完可能要打回重写,合规审查不过要回到开发阶段。LangGraph 天然支持有向图 + 条件路由,节点之间可以灵活跳转,非常适合这种有状态、有循环的工作流。
整体架构
我把流程拆成五个核心节点:
需求分析 → 代码开发 → Code Review → 合规审查 → 部署运维
↑ | |
└── 打回 ────┘ |
↑ |
└────── 合规不通过 ─────────┘
关键在于两个回路:Review 不通过回开发,合规不通过也回开发。这就是 LangGraph 比纯 Chain 强的地方。
核心代码
from langgraph.graph import StateGraph, END
from typing import TypedDict
class WorkflowState(TypedDict):
requirement: str
code: str
review_passed: bool
compliance_passed: bool
deploy_status: str
retry_count: int
def develop(state: WorkflowState) -> WorkflowState:
"""代码开发节点,基于需求生成/修改代码"""
# 实际项目里这里调 LLM 生成代码
state["code"] = f"generated code for: {state['requirement']}"
return state
def code_review(state: WorkflowState) -> WorkflowState:
"""Code Review 节点,检查代码质量、规范、安全漏洞"""
# LLM 做静态分析 + 规则引擎兜底
state["review_passed"] = True # 简化示意
return state
def compliance_check(state: WorkflowState) -> WorkflowState:
"""合规审查,检查许可证、数据隐私、行业法规"""
state["compliance_passed"] = True
return state
def deploy(state: WorkflowState) -> WorkflowState:
"""部署上线"""
state["deploy_status"] = "deployed"
return state
def monitor(state: WorkflowState) -> WorkflowState:
"""运维监控,异常时可触发回滚"""
state["deploy_status"] = "running_stable"
return state
# 条件路由
def after_review(state: WorkflowState):
return "compliance_check" if state["review_passed"] else "develop"
def after_compliance(state: WorkflowState):
return "deploy" if state["compliance_passed"] else "develop"
# 构建图
graph = StateGraph(WorkflowState)
graph.add_node("develop", develop)
graph.add_node("code_review", code_review)
graph.add_node("compliance_check", compliance_check)
graph.add_node("deploy", deploy)
graph.add_node("monitor", monitor)
graph.set_entry_point("develop")
graph.add_edge("develop", "code_review")
graph.add_conditional_edges("code_review", after_review)
graph.add_conditional_edges("compliance_check", after_compliance)
graph.add_edge("deploy", "monitor")
graph.add_edge("monitor", END)
workflow = graph.compile()
# 执行
result = workflow.invoke({
"requirement": "实现用户数据导出接口",
"code": "", "review_passed": False,
"compliance_passed": False, "deploy_status": "",
"retry_count": 0
})
几个实践要点
1. 一定要加重试上限。 回路如果不设 retry_count 上限,Review 和合规反复打回会死循环。我一般设 3 次,超过直接走人工审批分支。
2. Review 节点别只靠 LLM。 纯 LLM 做 Code Review 会漏掉很多边界问题。我的做法是 LLM 负责逻辑和设计层面的审查,再叠一层 SonarQube 或 Semgrep 做规则扫描,两者结果合并判断。
3. 合规审查要结构化。 不同行业的合规要求差异很大,把检查项拆成 checklist 传给 LLM,让它逐项判断并给出理由,比丢一段代码让它"看看有没有问题"靠谱得多。
4. State 持久化。 企业场景下流程可能跨天执行,LangGraph 支持 checkpoint 机制,搭配 Redis 或 PostgreSQL 做状态持久化,中断后可以从断点恢复。
5. 部署运维节点考虑接真实工具链。 deploy 节点可以通过 Tool Calling 对接 Kubernetes API 或 Terraform,monitor 节点接 Prometheus 告警,形成闭环。
小结
LangGraph 的核心价值在于把"判断"和"流转"解耦了。每个节点专注做一件事,路由逻辑集中管理,扩展新节点几乎零成本。在企业场景里,配合状态持久化和重试机制,稳定性完全够用。
查看12道真题和解析