Decentralization? We're still early!

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

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

    發布人 Brave 2026-04-01 03:59

    一、项目简介

    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

    Brave 回复 1 hour, 35 minutes ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在