8.2 LangChain 与 LangGraph 挂接


8.2 LangChain 与 LangGraph 挂接

本节摘要:应用编排生态里,laya 的座位是「图里需要判断的那个节点」。本节给两个最有代表性的节点做代码示意(写法示意,以官方 langchain 扩展文档与 LangChain/LangGraph 官方 API 为准):意图路由节点——用户消息进来,先由微调过的 laya 毫秒级判意图、按意图分流到不同的下游链,替代「让大模型看一遍顺便输出路由标签」的老做法;人工介入判断节点——LangGraph 的条件边上放 laya 的置信判断,低于阈值即把状态路由到人工审核分支,第 7.3 节的门控思想在图编排里的原生表达。随后算一笔收益账:路由从生成降级为决策后,延迟与成本各省多少(量级示意);最后给三条工程纪律——节点内封装门控、路由表与选项表合一管理、路由准确率进回归测试。安装形态为 laya 的 langchain 扩展(官方口径 extras)。

学习目标

  • 在 LangChain 里把意图路由从提示词生成改为 laya 决策节点。
  • 在 LangGraph 里用条件边实现低置信人工介入分支。
  • 算清「生成降级为决策」的延迟与成本账(量级示意口径)。
  • 落实三条纪律:门控进节点、路由表进配置、路由质量进回归。

一、为什么路由该用 laya 做

LangChain 应用的常见形态:一条链的入口先判意图(退款、咨询、投诉),再分流到不同处理链。传统写法是把路由标签塞进提示词让大模型生成——每次路由都是一次完整生成调用:几百毫秒到秒级延迟(量级示意)、按 token 计费、且路由质量随提示词措辞漂移。而「判意图」拆开看正是第 1.2 节速查表的第一行:有限集合里挑一个——choice 问题,laya 的主场。

提示词路由 vs laya 路由 提示词路由(生成) laya 路由(决策) ┌──────────────────────┐ ┌──────────────────────┐ │ 大模型读完消息 │ │ laya 单次前向 │ │ 生成路由标签 │ │ 直接输出意图分布 │ │ 数百 ms·按 token 计费 │ │ 32.8ms 量级·CPU 免费 │ │ 措辞改一下行为就漂 │ │ 可微调·可校准·可门控 │ └──────────────────────┘ └──────────────────────┘ ​

延迟为官方 README 口径对照生成式模型的量级示意;成本侧「CPU 免费」指推理在自有 CPU 上无按次计费。安装(写法示意):

# bash —— 安装 langchain 扩展(写法示意,以官方仓库 README 为准) python -m pip install "laya[langchain]" # 官方 extras(官方口径) ​

二、节点一:意图路由

LangChain 侧的写法示意(类名与接口以 laya 官方 langchain 扩展文档为准):

# lc_intent_route.py —— laya 意图路由节点(写法示意,以官方文档为准) from laya.langchain import LayaRouter # 挂接入口(名称以官方文档为准) INTENTS = ["退款", "换货", "咨询", "投诉"] router_node = LayaRouter( question={ "id": "intent", "type": "choice", "question": "用户消息的意图是什么?", "options": INTENTS, # 选项表即路由表:一处定义 }, min_confidence=0.62, # 门控进节点(阈值来源:第 7.3 节代价矩阵) fallback="人工", # 低于阈值的目的地(兜底项思想平移到路由层) ) # 在链里使用(示意): # chain = {"msg": itemgetter("message")} | router_node | 分支处理 # router_node 输出:{"intent": "退款", "confidence": 0.81, "route": "退款链"} ​

三个设计点。其一,选项表即路由表:INTENTS 既是 laya 的 options 也是下游链的注册表——一处定义、一处修改,两处漂移是提示词路由时代的经典 bug,这里从结构上消灭。其二,门控进节点:min_confidence 与兜底目的地(人工)封装在节点内,下游链拿到的永远是「够格的路由结果」,不用每个分支自己判置信——第 7.3 节的三通道思想收进一个节点的边界里。其三,微调配合:意图集是业务自己定的封闭集合,正适合第 5 章的偏好数据微调——路由准确率的提升路径是攒日志回流再微调,不是改提示词措辞碰运气。

三、节点二:人工介入判断

LangGraph 把应用建模成状态图,节点之间用条件边连接——「什么时候该打断自动流程」正是条件边上的一道判断。写法示意:

# lg_human_gate.py —— LangGraph 人工介入节点(写法示意,以 LangGraph 官方 API 为准) from langgraph.graph import StateGraph, END def human_gate(state: dict) -> str: """条件边:按 laya 置信决定自动执行还是转人工。""" item = state["risk_check"] # laya 判断结果已在前置节点写入 if item["confidence"] >= 0.75: # 阈值:代价矩阵来(第 7.3 节),示意值 return "auto_execute" return "human_review" builder = StateGraph(dict) # builder.add_node("risk_check_node", laya_risk_check) # laya 判断节点(第 8.2 节二) # builder.add_node("auto_execute", execute_action) # builder.add_node("human_review", queue_for_human) # builder.add_conditional_edges("risk_check_node", human_gate, # {"auto_execute": "auto_execute", # "human_review": "human_review"}) # graph = builder.compile() ​

这个模式的价值在「图的原生表达」:人工介入不是链里的 try/except 补丁,而是图上的一条显式分支——转人工的样本进 human_review 节点排队,处理结果按第 7.3 节的回流闭环落库,图上看得见、审计查得到。判断内容按业务选型:风险判断用 noul(是否需要人工复核)、分级判断用 score(风险几档)、多去向分流用 choice——三种原语对应三种条件边形态,第 1.2 节的速查表在图编排里的直接应用。

组合起来,一套客服处理图的骨架(示意):

用户消息 ──▶ [意图路由(laya)] ──┬─ 退款链 ──▶ [风险判断(laya)] ──┬─ 自动执行 ├─ 咨询链 └─ 人工复核 ──▶ 回流落库 └─ 投诉链 低置信 ──▶ 人工 (各链内部同样可嵌 laya 门控节点) ​

四、收益账与边界

收益(量级示意,以自测为准):延迟上,路由这一跳从数百毫秒级降到数十毫秒级(官方口径 32.8 毫秒对照生成式模型的量级差);成本上,路由调用从按 token 计费变成自有 CPU 推理;质量上,路由行为可微调、可校准、可回归——提示词路由的「措辞即版本」问题变成「数据即版本」,工程可控性质变。

边界同样要记:laya 节点只该出现在「封闭判断」的位置——图里的生成节点(写回复、做总结)仍是 LLM 的活;意图集合若高频变动(每周都在加新意图),微调节奏跟不上时先用提示词路由顶住,等意图集合稳定再迁移(示意建议)。另一个边界是第 10 章的:未微调的 laya 节点 zero-shot 近随机(官方口径)——把没微调的路由节点接进生产图,等于在主干道上放一个随机分流器,这是集成场景里最危险的一种「看起来接好了」。

五、三条工程纪律

其一,门控进节点:置信判断封装在节点内,下游永远消费「过线」的结果——门控逻辑散落在各分支是配置漂移的起点。其二,路由表与选项表合一:INTENTS 一处定义,新增意图时同步改微调数据与回归集(第 3.1 节的可复现性三件套延伸到路由层)。其三,路由质量进回归:意图路由的准确率、弃权率、各分支流量占比纳入固定的回归测试——每次微调或改题面后跑一遍,数字劣化就拦下发布;《Jev 决策编程》第 08 章《工程化生产》的影子模式与回归集方法在这里完全适用。

本节要点回顾

  • 意图路由是 choice 问题:laya 节点替代提示词路由,延迟与成本量级双降(示意口径),质量从「措辞即版本」变成「数据即版本」。
  • 节点内封装三件事:选项表即路由表、min_confidence 门控、兜底目的地。
  • LangGraph 条件边上的置信判断是人工介入的原生表达:显式分支、可审计、结果可回流。
  • 三原语对三种条件边:noul 管复核与否、score 管分级、choice 管多去向。
  • 边界:生成节点仍是 LLM 的活;意图集高频变动期先缓迁移;未微调节点禁止进生产图。

生态座位都坐上了,该回到最贵的问题:什么时候用 laya、什么时候用 Jev 或 Kev。下一章是全书唯一展开三向对照的地方——六轴一张表、分流一棵树、迁移一条路。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U