🔥 BRAVE 質押池已上線 — 在錢包搜尋 BRAVE 即可委託

Open Agent SDK:在任何地方部署自主 AI Agent 的开源利器

    • #33880

      一、项目简介

      Open Agent SDK 是一个开源的 AI Agent 开发框架,灵感来源于 Anthropic 官方的 @anthropic-ai/claude-agent-sdk。它能让开发者构建自主运行的 AI Agent,这些 Agent 可以理解代码库、编辑文件、执行命令、搜索网页,并完成复杂的多步骤工作流。

      与官方 SDK 最大的区别在于架构设计。官方的 @anthropic-ai/claude-agent-sdk 需要依赖本地 Claude Code CLI 进程,其调用链为:

      你的代码 → SDK → 启动 cli.js 子进程 → stdin/stdout JSON → Anthropic API

      而 Open Agent SDK 将整个 Agent 循环都运行在进程内(in-process),调用链大幅简化为:

      你的代码 → SDK → QueryEngine → Anthropic API(直接调用)

      这意味着你可以将它部署到任何环境——云服务器、Serverless 函数、Docker 容器、CI/CD 流水线,不再受本地 CLI 依赖的束缚。

      二、快速上手

      安装

      npm install @shipany/open-agent-sdk

      配置 API Key

      可以直接使用 Anthropic 官方的 API Key:

      export ANTHROPIC_API_KEY=your-api-key

      也支持第三方 Provider(如 OpenRouter):

      export ANTHROPIC_BASE_URL=https://openrouter.ai/api
      export ANTHROPIC_API_KEY=your-openrouter-api-key
      export ANTHROPIC_MODEL=anthropic/claude-sonnet-4-6

      最简示例:阻塞式调用

      import { createAgent } from '@shipany/open-agent-sdk'
      
      const agent = createAgent({ model: 'claude-sonnet-4-6' })
      const result = await agent.prompt('读取 package.json 并告诉我项目名称')
      
      console.log(result.text)
      console.log(`Tokens: ${result.usage.input_tokens + result.usage.output_tokens}`)

      仅需三行核心代码,你就拥有了一个可以读取文件、理解内容并回答问题的 AI Agent。

      三、核心功能详解

      3.1 多种调用方式

      Open Agent SDK 提供了灵活的 API 设计,满足不同使用场景:

      query() 流式调用——兼容官方 SDK 的顶层入口,返回 AsyncGenerator<SDKMessage>,适合需要实时展示中间过程的场景:

      import { query } from '@shipany/open-agent-sdk'
      
      for await (const message of query({
        prompt: '找到并修复 auth.py 中的 Bug',
        options: {
          allowedTools: ['Read', 'Edit', 'Bash'],
          permissionMode: 'acceptEdits',
        },
      })) {
        if (message.type === 'assistant' && message.message?.content) {
          for (const block of message.message.content) {
            if ('text' in block) console.log(block.text)
            else if ('name' in block) console.log(`Tool: ${block.name}`)
          }
        }
      }

      createAgent() + prompt() 阻塞式调用——适合简单的一问一答场景,代码更简洁。

      createAgent() + query() 流式调用——结合 Agent 会话管理和流式输出的优势。

      3.2 多轮会话

      Agent 会自动维护上下文,支持多轮对话:

      const agent = createAgent({
        model: 'claude-sonnet-4-6',
        systemPrompt: '你是一位资深软件工程师,请简洁回答。',
      })
      
      const r1 = await agent.prompt('阅读主入口文件并解释架构')
      console.log(r1.text)
      
      // 第 1 轮的完整上下文会自动保留
      const r2 = await agent.prompt('现在重构错误处理部分')
      console.log(r2.text)

      通过 agent.getMessages() 可以获取完整的对话历史,agent.clear() 则可以重置会话。

      3.3 丰富的内置工具(26 个)

      Open Agent SDK 内置了与 Claude Code 完全相同的 26 个工具,涵盖文件操作、代码搜索、Web 访问、多 Agent 协作等各个方面:

      类别工具说明
      文件操作Read, Write, Edit读取(支持图片、PDF)、创建、精确替换
      代码搜索Glob, Grep文件模式匹配、正则搜索(基于 ripgrep)
      命令执行Bash执行 Shell 命令
      Web 访问WebFetch, WebSearch获取网页内容、搜索互联网
      Agent 协作Agent, SendMessage, TeamCreate/Delete子 Agent、消息传递、团队管理
      任务管理TaskCreate/Update/List/Get/Stop/Output完整的任务生命周期管理
      其他NotebookEdit, AskUserQuestion, TodoWrite 等Jupyter 编辑、用户交互、待办事项等

      你可以通过 allowedTools 来控制 Agent 可以使用的工具白名单,例如创建一个只读 Agent:

      for await (const message of query({
        prompt: '审查这段代码的最佳实践',
        options: {
          allowedTools: ['Read', 'Glob', 'Grep'], // 只允许读取类工具
        },
      })) {
        // ...
      }

      3.4 自定义工具

      除了内置工具,你还可以轻松定义自己的工具:

      const weatherTool = {
        name: 'GetWeather',
        description: '获取城市天气',
        inputJSONSchema: {
          type: 'object',
          properties: { city: { type: 'string' } },
          required: ['city'],
        },
        get inputSchema() {
          return { safeParse: (v) => ({ success: true, data: v }) }
        },
        async prompt() { return this.description },
        async call(input) {
          return { data: `${input.city}的天气:22°C,晴` }
        },
        userFacingName: () => 'GetWeather',
        isReadOnly: () => true,
        isConcurrencySafe: () => true,
        mapToolResultToToolResultBlockParam: (data, id) => ({
          type: 'tool_result', tool_use_id: id, content: data,
        }),
      }
      
      const agent = createAgent({
        tools: [...getAllBaseTools(), weatherTool],
      })

      3.5 MCP Server 集成

      Open Agent SDK 完整支持 MCP(Model Context Protocol),包括 stdio、SSE、HTTP 三种传输方式:

      const agent = createAgent({
        mcpServers: {
          filesystem: {
            command: 'npx',
            args: ['-y', '@modelcontextprotocol/server-filesystem', '/tmp'],
          },
          playwright: {
            command: 'npx',
            args: ['@playwright/mcp@latest'],
          },
        },
      })
      
      const result = await agent.prompt('列出 /tmp 目录下的文件')

      这让你可以轻松接入社区中丰富的 MCP 工具生态。

      3.6 子 Agent(Subagents)

      对于复杂任务,可以定义多个子 Agent 协同完成工作:

      for await (const message of query({
        prompt: '使用 code-reviewer Agent 审查这个代码库',
        options: {
          allowedTools: ['Read', 'Glob', 'Grep', 'Agent'],
          agents: {
            'code-reviewer': {
              description: '专业代码审查员,专注于代码质量和安全性。',
              prompt: '分析代码质量并提出改进建议。',
              tools: ['Read', 'Glob', 'Grep'],
            },
          },
        },
      })) {
        // 处理消息...
      }

      四、引擎内核解析

      Open Agent SDK 并非一个简化版的重新实现——它包含了完整的 Claude Code 引擎(2000+ 源文件)。以下是其核心组件:

      系统提示词构建:完整的 Prompt 构建逻辑,支持静态/动态边界缓存(boundary caching),最大化利用 Anthropic 的 prompt caching 能力,降低 Token 消耗。

      四层权限系统:规则匹配 → 低风险跳过 → 白名单 → AI 分类器 + 熔断机制。这套精密的权限管道确保了 Agent 操作的安全性,同时保持灵活性。通过 permissionMode 可以选择不同级别,如 bypassPermissions(绕过所有权限检查,适合受控环境)、acceptEdits(自动接受编辑操作)、plan(计划审批模式)等。

      记忆系统:支持 4 种记忆类型(用户记忆、反馈记忆、项目记忆、参考记忆),并内置 autoDream 后台记忆整理器,让 Agent 能够在长时间工作中保持上下文连贯性。

      上下文压缩:9 段结构化提取策略(autocompact、microcompact、snip compact),在上下文窗口接近限制时智能压缩对话历史,保留最关键的信息。

      多 Agent 协作:支持 Leader/Teammate 团队模式、Git worktree 隔离、权限冒泡、异步邮箱通信等高级特性。

      工具执行策略:只读工具支持并发批量执行,写入类工具则串行执行,在性能和安全性之间取得平衡。

      API 客户端:流式传输、指数退避重试、备选模型回退、Prompt 缓存等企业级特性一应俱全。

      五、与官方 SDK 的对比

      特性官方 SDKOpen Agent SDK
      架构启动本地 CLI 子进程进程内 Agent 循环
      云部署需安装 CLI任意环境可用
      Serverless不支持完全支持
      Docker需在镜像中包含 CLI仅需 npm install
      自定义工具通过 MCP原生函数工具 + MCP
      流式输出通过子进程 stdio直接 API 流式传输
      系统提示词/权限/记忆/压缩/多Agent/MCP完整引擎完整引擎(相同代码)

      核心差异在于部署灵活性。官方 SDK 的子进程架构使其更适合本地开发场景,而 Open Agent SDK 的进程内架构使其天然适合云端和容器化部署。

      六、配置参考

      Open Agent SDK 提供了丰富的配置选项:

      选项类型默认值说明
      modelstringclaude-sonnet-4-6Claude 模型 ID
      apiKeystring环境变量API Key
      baseURLstringAnthropic APIAPI 地址(第三方 Provider)
      cwdstring当前目录工具工作目录
      systemPromptstring自定义系统提示词
      toolsTool[]全部内置工具可用工具列表
      allowedToolsstring[]工具白名单
      permissionModestringbypassPermissions权限模式
      maxTurnsnumber100最大 Agent 轮次
      maxBudgetUsdnumber最大花费(美元)
      mcpServersobjectMCP 服务器配置
      agentsobject子 Agent 定义
      hooksobject生命周期钩子
      thinkingobject扩展思考配置
      canUseToolfunction自定义权限回调

      七、适用场景

      基于以上特性,Open Agent SDK 特别适合以下场景:

      自动化代码审查:在 CI/CD 流水线中部署 Agent,自动审查 Pull Request,检测潜在问题。通过只赋予只读工具权限,确保审查 Agent 不会修改代码。

      智能运维助手:部署在云服务器或 Docker 容器中,结合 Bash 工具和自定义工具,实现服务器状态监控、日志分析、故障诊断等自动化运维任务。

      Serverless AI 工作流:在 AWS Lambda、Vercel Functions 等 Serverless 平台上运行,按需处理复杂的 AI 任务,无需维护长期运行的服务器。

      多 Agent 协作系统:利用子 Agent 和团队功能,构建多 Agent 协作系统,如「架构师 Agent + 编码 Agent + 测试 Agent」的组合,处理大型项目任务。

      集成 MCP 工具生态:通过 MCP 集成 Playwright(浏览器自动化)、数据库访问、文件系统操作等各种外部工具,扩展 Agent 能力边界。

      八、总结

      Open Agent SDK 将 Claude Code 的完整引擎能力(2000+ 源文件)从本地 CLI 的束缚中解放出来,以进程内运行的方式使其能够部署到任何 Node.js 可运行的环境中。它保留了官方 SDK 的全部核心能力——四层权限系统、记忆系统、上下文压缩、多 Agent 协作、MCP 支持——同时提供了更简洁的 API、更灵活的部署方式,以及原生自定义工具支持。

      无论你是想在 Serverless 函数中运行 AI Agent,还是在 Docker 容器中部署自动化工作流,亦或是构建复杂的多 Agent 协作系统,Open Agent SDK 都值得一试。

      项目安装npm install @shipany/open-agent-sdk

  • 抱歉,回覆主題必需先登入。