跳到主要内容

06-Middleware-Runtime-Context

核对日期:2026-05-18
官方资料:Middleware https://docs.langchain.com/oss/javascript/langchain/middleware;Runtime https://docs.langchain.com/oss/javascript/langchain/runtime;Context engineering https://docs.langchain.com/oss/javascript/langchain/context-engineering

官方概念

Middleware 用于在模型调用、工具调用或 Agent 执行前后插入策略;runtime 承载本轮执行上下文;context engineering 关注如何选择、压缩、注入和保护模型需要的上下文。

机制

middleware 不只是日志钩子,也可以承载动态模型选择、动态工具选择、上下文压缩、安全检查、重试和限流。

TypeScript 写法

本手册 src/core/agent-runtime.tsAgentMiddleware 提供 beforeModelafterModel。案例:src/examples/07-streaming-runtime-guardrails.ts

Python 差异

Python middleware 和 runtime 文档可能先出现更完整的示例;TypeScript 侧要以 JS 官方 API 为准。概念上,运行时上下文应与业务 request id、user id、权限、trace id 绑定。

工程边界

  • middleware 不应成为不可测试的隐藏业务逻辑。
  • runtime context 可以传权限和 trace id,但不应把敏感密钥直接注入模型上下文。
  • context engineering 要有 token 预算和来源优先级。

常见反模式

反模式后果
所有策略写进 system prompt不可审计,也容易被注入干扰
middleware 做太多隐式改写排查困难,eval 难复现
不区分 runtime context 和 prompt context内部权限信息可能泄露给模型

练习任务

  1. 07-streaming-runtime-guardrails.ts 增加 after middleware,统计输出长度。
  2. 为 Agent context 增加 requestId,并写入 audit log。
  3. 设计一个上下文优先级:用户输入、长期记忆、RAG 文档、系统策略谁先谁后。