Deuz SDK
零运行时依赖的 TypeScript Agent 框架,为生产环境提供持久执行、长期记忆、混合 RAG、MCP 工具调用与人工审批。
证据显示工具级审批(needsApproval、缺省拒绝、HMAC 过期令牌)、深度守卫(maxDepth)、成本/步数预算与检查点恢复机制,且有测试实证审批继承与拒绝路径;但数据流透明与敏感数据声明('密钥不进日志')仅是 README 文字,无源码佐证,故相关项只给 1 分。零运行时依赖声明可信但 dev 依赖用版本区间。发布使用 npm trusted publishing 与 provenance,属加分。
测试展现高度自洽:同步返回、类型化错误流、ContextOverflowError 映射、子代理用量归并均有断言;错误消息具体(EITHER 提示、max agent depth)。依赖可用性给 2:CI 多平台跑 check,但被审文件中未见锁文件或依赖健康证据。
'What this is not' 一节罕见地逐条列出能力边界(Gemini 原生线、DeepSeek V4 结构化输出、Redis 无 MULTI 等),boundary 满分;多运行时(Node/Bun/Deno/edge)与 Node≥22 引擎声明支撑 environment_fit,但仅凭声明给 2。
信息架构优秀:54 子路径映射表、文档/技能/导出全被 verify-docs 与 verify:api 门禁锁定;已知局限详尽;MIT 许可证一致(root、LICENSE、badge)。版本管理有 changesets 与 tag 校验,但 CHANGELOG 本体未在证据中。维护责任仅一名作者,bus factor 低,给 1。
流式 API、可恢复 UI、可观测性与持久执行组合有差异化价值;测试证明 API 形态可用(textStream、usage、finishReason)。成本效益中等:功能广但生产成熟度未验证,且 README 自认生态不及 Vercel AI SDK。
仓库自建校验链(verify:api 锁定 242 导出、技能 freshness gate、文档引用校验)显著提升可追溯性;但本审查只能静态看到 README 与部分测试互相印证(如审批、用量归并),多数宏观数字(1,892 测试、28 提供商)无法交叉证实,故 cross_source_corroboration 仅 1。
- 静态审查,未执行任何代码;1,892 测试、28 提供商等宏观数字仅是声明,未经独立核实。
- 隐私与密钥处理('opt-in 捕获、密钥不进日志/span')在所供文件中无源码证据,采纳前请审计 /observe 与日志路径。
- 发布者未经注册表验证且为单人维护,更新与安全响应节奏存在不确定性。
- 生产采用前请在真实端点复测:README 承认 speech/transcription/video 仅有 mock 测试。
- MCP 与 browser/workspace 等外向能力涉及外部副作用,部署前应逐工具配置 needsApproval。
这个 Agent 能做什么,适合哪些场景?
Deuz SDK(Deuz-AI/Deuz-SDK)是一个以 @deuz-sdk/core 为核心的 TypeScript 框架,定位为'能活过生产环境的 Agent 运行时',MIT 许可。它主打两件大多数 SDK 不提供的能力:跨会话的长期记忆管线(提取持久事实、增删改协调、重要性评分、过期与召回),以及在上下文窗口填满时自动压缩对话(剪除陈旧工具输出、折叠早期轮次为滚动摘要,并在供应商报错过长时强制压缩重试)。其执行模型强调零运行时依赖与无环境状态:时钟、随机数、fetch、密钥和日志都通过统一的 Dependencies 注入,使同一代码可跑在 Node、Bun、Deno 和边缘运行时,测试保持确定性。框架提供 streamChat、generateText、generateObject、embed、createAgent、handoff 等 API,28 个聊天供应商适配、MCP(含 OAuth 2.0)、HMAC 签名的人工审批令牌、步骤检查点持久化到你自己的数据库、守则(guardrails)与 OpenTelemetry 可观测性。作者还发布了两个经过导出表与编译验证的 Agent Skills(deuz-sdk 与 migrate-from-ai-sdk),可用 npx skills add 安装给 Claude Code 等编码代理。
安装 @deuz-sdk/core 后,开发者通过 createAnthropic 等 28 个供应商适配器构建模型实例,调用 streamChat(同步返回、永不抛错、以类型化流片段传递失败)或 generateText 执行带工具循环的对话。generateText 支持 maxSteps、并行工具调用、自愈错误、成本与 token 预算、子代理;memory 选项接入向量存储、Postgres 或 Obsidian vault 实现跨会话事实记忆;compaction: 'auto' 在窗口溢出时压缩并重试。handoff() 将对话历史、工具与模型移交另一个代理;mcp: [{ url }] 一行接入 MCP 服务器(OAuth 2.0、重连、采样、roots);needsApproval 在任意深度触发人工审批,令牌经 HMAC 签名并可过期,缺失裁决默认拒绝;durable 模块在用户数据库中写入步骤检查点并支持 resumeFromCheckpoint;guardrails 模块(如 promptInjectionGuardrail、maxOutputLength)对输入、每次工具调用和最终答案进行通过/拦截/重写。可选 @deuz-sdk/react 提供 useChat、useObject、ToolApprovalCard。运行 npm run check 执行 1892 项测试、双构建、publint、边缘打包与 242 个公共导出的锁定清单。
- 需要在多轮、跨会话场景中记住用户偏好的客服或助理产品开发者,用 memory 管线替代手工维护消息数组。
- 长时间运行的自主任务(如研究、数据处理流水线)作者,需要进程崩溃后从检查点恢复执行而不依赖工作流厂商。
- 涉及不可逆操作(付款、删除、外部发送)的 Agent,需要 HMAC 签名、可过期的人工审批门控。
- 需要连接外部工具服务器(MCP)并处理 OAuth 2.0 的团队,避免自行实现鉴权与重连。
- 希望一套流式 API 同时对接 Claude、GPT、Gemini、Grok、Mistral、DeepSeek 等多供应商,并可随时切换。
- 从 Vercel AI SDK 迁移的团队,可使用经验证的 migrate-from-ai-sdk 技能逐名对照迁移。
这个 Agent 有哪些优点和局限?
- 零运行时依赖、无环境状态:时钟/随机数/fetch/日志全部注入,同代码跨 Node、Bun、Deno 与边缘运行时,测试确定性。
- 持久执行无需工作流厂商:检查点与日志存在你自己的进程和数据库中,支持 resumeFromCheckpoint。
- 质量门禁严格:npm run check 覆盖 1892 项测试、publint、无 Node 泄漏的边缘打包、242 个公共导出的锁定清单,删除导出会导致发布失败而非构建期才失败。
- 独立的 live 测试套件调用真实供应商端点,已捕获如 Gemini finishReason: STOP 与推理 token 超报等真实边界问题。
- Agent Skills 经导出表解析与编译验证,代码示例逐个编译,能防止编码代理编造不存在的 API。
- 生态规模不及 Vercel AI SDK——README 明确承认这一差距今年不会缩小,选型需自行权衡。
- 文档化的能力缺口:溢出恢复不支持 Gemini 原生协议;generateObject 无法约束 DeepSeek V4 模型;Redis 包无 MULTI;token 计数为校准启发式;rerank 仍是恒等实现;MCP 无 WebSocket 传输;Part 联合类型无 AudioPart。
- 语音、转写与视频仅有 mock 测试,尚未在真实端点验证。
- 核心 lint 禁止 Date.now() 与 Math.random(),团队需适应依赖注入式的开发习惯。
- 内存写入策略、压缩等高级行为需要理解 seams 抽象,存在学习成本。
如何安装或部署这个 Agent?
需要 Node.js >= 22 或任何带 fetch 的边缘运行时。安装:npm install @deuz-sdk/core(运行时);可选 npm install @deuz-sdk/react(useChat、useObject 等无头 UI)。可选对等依赖仅在用到时安装:zod、@modelcontextprotocol/sdk、react、pg/redis、unpdf/mammoth/xlsx、playwright、@opentelemetry/api。开发贡献:git clone https://github.com/Deuz-AI/Deuz-SDK.git && cd Deuz-SDK && npm install && npm run check。让编码代理学习该 SDK:npx skills add Deuz-AI/Deuz-SDK。
如何使用这个 Agent?
最小示例:import { streamChat } from '@deuz-sdk/core'; import { createAnthropic } from '@deuz-sdk/core/anthropic'; const anthropic = createAnthropic({ apiKey: process.env.ANTHROPIC_API_KEY }); 然后 const res = streamChat({ model: anthropic('claude-opus-4-8'), instructions: '...', prompt: 'Hello!' });,用 for await (const chunk of res.textStream) 消费流,await res.usage 获取用量。进阶:在 generateText 中配置 tools、maxSteps、guardrails、memory.seams(store、embedder、llm)、session.store(Postgres/SQLite/Redis 包)、mcp: [{ url }] 与 runtimeContext(随调用传递租户等上下文)。完整文档位于仓库 docs/ 目录。