Skip to content

Latest commit

 

History

History
223 lines (167 loc) · 6.48 KB

File metadata and controls

223 lines (167 loc) · 6.48 KB

7.3 Claude Code SDK 集成

如果说 Claude Code CLI 像是一把瑞士军刀,让开发者在终端中快速解决问题,那么 Claude Code SDK 则是工业级的机器人手臂——它允许将 Claude 的自主编程能力 嵌入到任何应用程序或工作流 中,实现真正的编程自动化。

本节将详细介绍如何使用 Python 和 TypeScript SDK 来构建定制化的 AI 编程工具。

7.3.1 SDK 与 CLI 的区别

在深入 SDK 之前,先厘清它与 CLI 的关系:

维度 Claude Code CLI Claude Code SDK
使用方式 终端交互,人在回路 程序化调用,可全自动
适用场景 日常开发辅助 CI/CD、IDE 插件、自动化平台
输出控制 实时输出到终端 返回结构化对象,可编程处理
并发能力 单任务 可并行运行多实例

核心价值:SDK 将 Claude Code 从“个人开发助手”升级为“可扩展的编程基础设施”。

7.3.2 安装与配置

Python SDK

pip install claude-agent-sdk

注意:早期版本使用 claude-code-sdk 包名,该包已弃用。请使用 claude-agent-sdk,它提供与 Claude Code 相同的工具、Agent 循环和上下文管理能力。

SDK 会自动从环境变量读取 API Key:

export ANTHROPIC_API_KEY="<ANTHROPIC_API_KEY>"

不要把真实 API Key 写入可复用脚本、仓库文件或会被长期保留的命令历史。

TypeScript/Node.js SDK

npm install @anthropic-ai/claude-agent-sdk

#
yarn add @anthropic-ai/claude-agent-sdk

7.3.3 核心 API 详解

Python 示例:自动化代码重构

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions

async def main():
    # 使用异步流式 API 执行编程任务
    async for event in query(
        prompt="将项目中所有的 var 声明改为 const 或 let,并修复 ESLint 错误",
        options=ClaudeAgentOptions(
            model="claude-sonnet-4-6",  # 指定模型版本
            allowed_tools=["Read", "Edit", "Bash"],  # 允许的工具
            cwd="/path/to/project",  # 工作目录
            max_turns=20  # 最大对话轮次
        ),
    ):
        # 生产日志不要直接输出完整 event,避免泄露 prompt、工具参数或文件片段
        print({"type": getattr(event, "type", None)})

asyncio.run(main())

TypeScript 示例:智能测试生成

import { query } from "@anthropic-ai/claude-agent-sdk";

async function generateTests(filePath: string) {
  const events = [];

  for await (const event of query({
    prompt: `为 ${filePath} 中的所有公共函数生成单元测试,使用 Jest 框架`,
    options: {
      model: "claude-sonnet-4-6",
      cwd: process.cwd(),
      allowedTools: ["Read", "Edit", "Bash"],
      maxTurns: 15,
    },
  })) {
    events.push(event);
    // 生产日志不要直接输出完整 event,避免泄露 prompt、工具参数或文件片段
    console.log({ type: event.type });
  }

  return events;
}

// 使用示例
generateTests("./src/utils/parser.ts").then((events) => {
  console.log({ eventCount: events.length });
});

7.3.4 权限控制:allowed_tools 详解

SDK 的安全模型基于 显式授权。必须明确指定 Claude 可以使用哪些工具:

工具名 功能 风险等级
Read 读取文件内容 🟢 低
Edit 写入/修改文件(首选;如需整文件覆写用 Write 🟡 中
Glob 列出/匹配目录结构 🟢 低
Bash 执行终端命令 🔴 高
Grep 语义搜索代码库 🟢 低

最佳实践:遵循 最小权限原则。如果任务只需要读取和分析代码,就不要授予 Edit/WriteBash 权限。

7.3.5 企业级集成场景

场景一:CI/CD 自动代码审查

在 GitHub Actions 中集成 Claude Code,自动审查每个 PR:

# .github/workflows/ai-review.yml
name: AI Code Review
on: [pull_request]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Claude Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          pip install claude-agent-sdk
          python scripts/ai_review.py --pr ${{ github.event.pull_request.number }}

场景二:VS Code 插件后端

将 SDK 集成到 IDE 插件中,提供“一键修复”功能:

// VS Code Extension 示例
vscode.commands.registerCommand('claude.fixIssue', async () => {
  const editor = vscode.window.activeTextEditor;
  const diagnostics = vscode.languages.getDiagnostics(editor.document.uri);

  const events = [];
  for await (const event of query({
    prompt: `修复以下问题:${diagnostics.map(d => d.message).join(', ')}`,
    options: {
      cwd: vscode.workspace.rootPath,
      allowedTools: ['Read', 'Edit'],
    },
  })) {
    events.push(event);
  }

  if (events.length > 0) {
    vscode.window.showInformationMessage('问题已修复!');
  }
});

场景三:批量代码迁移

将遗留代码库从 Python 2 迁移到 Python 3:

import asyncio
import os
from claude_agent_sdk import query, ClaudeAgentOptions

async def migrate_file(filepath: str):
    async for event in query(
        prompt=f"将 {filepath} 从 Python 2 迁移到 Python 3,保持功能不变",
        options=ClaudeAgentOptions(
            cwd="./legacy_project",
            allowed_tools=["Read", "Edit"],
        ),
    ):
        print(event)

async def main():
    for root, dirs, files in os.walk("./legacy_project"):
        for file in files:
            if file.endswith(".py"):
                await migrate_file(os.path.join(root, file))

asyncio.run(main())

7.3.6 错误处理与重试

健壮的 SDK 集成需要处理各种边缘情况:

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions

async def main():
    try:
        async for event in query(
            prompt="...",
            options=ClaudeAgentOptions(cwd=".", allowed_tools=["Read"]),
        ):
            print(event)
    except Exception as e:
        print(f"SDK 调用失败:{e}")

asyncio.run(main())

掌握了 SDK,你已经能够构建自己的编程自动化平台。但大多数开发者的日常工作并不在命令行或脚本中,而是在 IDE 里。

接下来,将展示 Claude 如何在最熟悉的编辑器中大显身手。

➡️ IDE 集成与工作流