学习笔记 · Obsidian
中间件、沙箱与 Deep Agents 后端
结论
- Middleware 是 context engineering、harness 定制和运行时安全的扩展点;当前官方 provider middleware 重点是 Anthropic/AWS prompt caching。
- Prompt cache 只复用 provider 侧 prefix token,不提供会话记忆;跨 invocation 的历史仍需 checkpointer。
- Sandbox 负责隔离 agent-generated code;Backend 负责 Deep Agents 文件/记忆/工件持久化。隔离与持久化是两个独立控制面。
路由去重
以下三组根路由均与各自 /index 返回相同正文:middleware、sandboxes、backends。原始 source 仍全部保留。本组共覆盖 8 条路由。
Anthropic Prompt Caching Middleware
anthropicPromptCachingMiddleware 自动在 system message、tool definitions 与最近 user message 设置 cache breakpoint,形成对话式 prefix 复用。适合长且稳定的 system prompt、大量固定工具、多轮复用历史和高并发应用。
- TTL 可为
5m或1h; - 每次请求缓存到最新消息,下一轮只重算新消息及新增响应部分;
- 简单场景也可直接给 ChatAnthropic content 设置
cache_control,middleware 更适合统一控制 system/tool breakpoint。
TTL 不是业务数据过期策略;prompt/tool 版本变化时要确保 cache key/prefix 实际变化。
AWS Bedrock Prompt Caching Middleware
bedrockPromptCachingMiddleware 通过 modelSettings 配置,ChatBedrockConverse 转为 AWS wire format。支持 Anthropic Claude 与 Amazon Nova,但模型族行为不同:
| 能力 | Claude on Bedrock | Amazon Nova |
|---|---|---|
| system prompt | 支持 | 支持 |
| tool definitions | 支持 | 不支持 |
| message | 支持 | 支持,但排除 tool-result 场景 |
| 1h TTL | 支持 | 不支持,仅 5m |
可配置是否启用、TTL、最少消息数,以及不支持模型时 ignore/warn/raise。cache checkpoint 只有在前缀达到 provider 最小 token 数(文档提示常见至少 1024,模型可能更高)时才生效。
Prompt caching 降低输入 token 成本与延迟,却不会保存 conversation memory。需要跨调用历史时使用 LangGraph checkpointer,例如 MemorySaver 或持久实现。
Middleware 供应链
目录把 Anthropic 标记为 official integration;社区 middleware(如 task steering、authority enforcement)明确由社区维护,LangChain 不管理或背书。引入前要审计:
- package owner、签名/锁文件、发布历史与维护状态;
- middleware 能读取/修改的 prompt、state、tools 和 credentials;
- fail-open/fail-closed 行为、异常传播和 ordering;
- tracing 是否泄露正文或身份信息。
多个 middleware 的顺序会改变行为,应固定并通过集成测试验证。
Sandbox
Sandbox 为 agent-generated code 提供隔离执行环境。当前目录列出 LangSmith,以及 Deno、Daytona、Modal、Leap0 等 provider 入口;具体实现细节在各 provider/相关文档,不应从目录卡片推断能力完全等价。
生产 sandbox 基线:
- 每任务或租户隔离,低权限用户和只读基础镜像;
- 默认断网或 egress allowlist,禁止访问宿主、cloud metadata 和内部网;
- CPU、内存、进程、磁盘、文件数、执行时间与输出限制;
- 仅通过显式 artifact 通道导入/导出,结束后销毁;
- 镜像、依赖与执行事件审计,敏感输出脱敏。
Deep Agents Backend
Backend 将 Deep Agents 的虚拟文件、memory、artifact 和 conversation history 映射到数据库、对象存储或虚拟文件系统。当前目录只列出社区 MongoDB VFS Adapter,并明确社区实现不由 LangChain 维护。
Backend 设计必须定义:
- tenant namespace 与对象级授权;
- path 规范化、目录语义和并发写冲突;
- version/ETag、原子写和幂等;
- retention、配额、加密、备份与删除;
- sandbox 只能访问被挂载的 backend 子树,不能自动获得整个持久层。
运维验证
- Prompt cache:记录 read/write cached token、命中率、首 token 延迟、TTL 和 provider/model;不要把 cache hit 当 memory hit。
- Middleware:记录版本、顺序、决策与异常,敏感 prompt 只保留摘要。
- Sandbox:监控启动耗时、执行时间、资源超限、网络拒绝与销毁成功率。
- Backend:监控读写延迟、冲突、容量、失败恢复和跨租户访问拒绝。