SDK 客户端包装
SDK Client Wrapping
透明代理包装第三方 SDK 客户端,在不改变原始 API 的前提下注入增强功能
子问题
1.API 调用拦截与增强
2.同步异步双模式支持
3.上下文自动注入
4.向后兼容性保障
5.同步上下文调用异步检索的事件循环桥接
6.多模态消息格式(Vision content-as-list)的查询提取
各项目的解法1 solutions
Signals
横向对比
| 维度 | memU |
|---|---|
| 包装层级 | 三层代理链:Client → Chat → Completions,逐层 __getattr__ 透传 |
| 注入方式 | XML 标签 <memu_context> 追加到 system prompt 末尾 |
| 同步异步 | 三级降级:running loop → ThreadPoolExecutor,idle loop → run_until_complete,无 loop → asyncio.run |
| 容错策略 | bare except 返回空列表,记忆故障不阻断 LLM 调用 |
| 作用域隔离 | user_id + agent_id + session_id 三维 where 过滤 |
| 拦截器体系 | 内部 LLMClientWrapper 支持 before/after/on_error 三钩子 + 优先级排序 + 条件过滤 |
最佳实践
1.使用 __getattr__ 代理未包装的属性保持完全兼容
2.记忆注入失败时 fail-silently 不影响原始调用
3.支持 sync/async 两种调用路径
4.注入前克隆消息列表避免修改用户原始数据
5.工厂函数提供快捷参数降低初始化复杂度
6.内部 LLM 调用与外部 SDK 包装使用独立的 Wrapper 层互不干扰