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.ts 的 AgentMiddleware 提供 beforeModel 和 afterModel。案例: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 | 内部权限信息可能泄露给模型 |
练习任务
- 在
07-streaming-runtime-guardrails.ts增加 after middleware,统计输出长度。 - 为 Agent context 增加
requestId,并写入 audit log。 - 设计一个上下文优先级:用户输入、长期记忆、RAG 文档、系统策略谁先谁后。