Skip to content

故障注入、追踪与发布边界 ​

组件单测定位数据流错误,真实provider集成验证能力,golden集评价任务质量。三者相互补充:Fake模型可以稳定复现两次超时,但不能证明真实供应商支持图像或工具并行。

重试只包住合适边界 ​

复用第一章环境,完整实验控制失败次数。用 with_retry 对只读函数重试,不包住整个写入流程。

python
from langchain_core.runnables import RunnableLambda
calls=[]
def read(value):
    calls.append(value)
    if len(calls)<3: raise TimeoutError("temporary")
    return value*2
r=RunnableLambda(read).with_retry(retry_if_exception_type=(TimeoutError,),stop_after_attempt=3,wait_exponential_jitter=False)
assert r.invoke(4) == 8 and calls == [4,4,4]
print(len(calls))

关闭等待是为了实验确定,不是生产建议。认证、参数和权限错误不应走此重试;网络超时的写工具先查幂等状态。整体deadline必须包含等待与所有attempt,三层各重试三次可能放大为27次。

trace怎样解释一次错误 ​

给 Runnable config 传 tags、metadata 和 run_name 可关联调用;回调观察模型、链、工具开始/结束/错误。记录模型、prompt、索引、工具和schema版本,业务task ID与provider request ID分别保留。LangSmith 可承接trace与dataset,但上传前检查敏感字段与保留策略;默认不把全量文档当诊断必需品。

模型stream先token后done,工具事件与状态更新分开显示。客户端断连不应让已发生的写入失去账本;服务端任务有独立生命周期。批量调用设置max_concurrency并测试限流、部分失败、取消与队列容量。同步工具如果执行阻塞I/O,不能只加async名字就获得可取消能力。

发布门禁包括任务成功、权限不越界、引用正确、schema合法、工具次数上限和敏感日志禁入,再看p95、token与单位任务成本。性能对照保持输入、模型和并发一致,冷启动与稳定状态分别测。降级返回明确来源与状态,不能把备用模型结果伪装成原模型已验证结果。

MCP工具、社区loader、代码执行器和第三方集成均是供应链入口,锁版本、审权限与沙箱。部署采用无状态API加持久checkpoint/队列worker;滚动升级时旧任务继续使用兼容图版本。选型时简单调用用裸SDK,组件组合用LangChain,复杂恢复用LangGraph,数据索引重点可比较LlamaIndex,不按框架数量评估架构质量。

练习 ​

让只读函数始终TimeoutError,验证恰好尝试2次后原异常仍抛出;另一个ValueError函数不得重试。

核对本章答案

返回全书导读

用心记录每一步成长