生产实战:端到端综合案例

前面每个机制都是单独演示的,最后用一个真实生产架构把它们全部串进同一张图——企业知识库问答流水线。读案例时对照左侧目录,每个编号都能找到对应的正文小节。

场景背景

  • 业务:内部知识库问答。短问题(FAQ 命中型)直接查缓存答案;长问题走「检索 → 分块摘要 → 生成」流水线。
  • 约束:文档长度不定 → 摘要任务数量运行时才知道(MapReduce);上游 LLM 服务偶发 5xx 与慢查询;答案置信度低需重新生成,但必须防死循环。
  • 涉及机制:条件入口点 、Send MapReduce 、defer 汇聚 、运行时感知重试 、RetryPolicy + TimeoutPolicy + error_handler 、Command 循环 + 主动退出 、recursion_limit 兜底 、节点缓存 。

完整代码(可直接复用,替换 stub 即可上线)

import operator
from typing import Literal
from typing_extensions import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.runtime import Runtime
from langgraph.types import Command, RetryPolicy, TimeoutPolicy, CachePolicy, Send
from langgraph.errors import NodeError, GraphRecursionError
from langgraph.cache.memory import InMemoryCache

# ---------- 外部服务封装(示意,替换为真实实现) ----------
def faq_lookup(query: str) -> str: return "FAQ 标准答案"
def split_and_retrieve(query: str) -> list[str]: return ["片段1", "片段2", "片段3"]
async def llm_summarize(chunk: str) -> str: return f"《{chunk}》摘要"
async def llm_generate(prompt: str, model: str = "primary") -> str: return "生成的答案"

def retry_on_5xx(exc: BaseException) -> bool:
    if isinstance(exc, httpx.HTTPStatusError):
        return exc.response.status_code >= 500   # 只重试服务端错误
    return False                                   # 4xx / 其他错误不重试

# ---------- 状态定义 --------
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值