Anthropic Swift SDK

又一个用于 Swift 的 Anthropic API 客户端。

安装

Swift Package Manager

只需添加到你的 Package.swift 文件中的 dependencies 下

let package = Package(
    name: "MyPackage",
    products: [...],
    targets: [
        .target(
            "YouAppModule",
            dependencies: [
                .product(name: "AnthropicSwiftSDK", package: "AnthropicSwiftSDK")
            ]
        )
    ],
    dependencies: [
        .package(url: "https://github.com/fumito-ito/AnthropicSwiftSDK.git", .upToNextMajor(from: "0.11.0"))
    ]
)

使用方法

let anthropic = Anthropic(apiKey: "YOUR_OWN_API_KEY")

let message = Message(role: .user, content: [.text("This is test text")])
let response = try await anthropic.messages.createMessage([message], maxTokens: 1024)

支持的 API

此库目前支持Messages API。 如果您需要旧的Text Completion API,请提交 PR 或 Issue。

创建 Message API

发送包含 textimagepdf 和/或 tool 内容的结构化输入消息列表,模型将生成对话中的下一条消息。

Messages API 可用于单个查询或无状态的多轮对话。

let anthropic = Anthropic(apiKey: "YOUR_OWN_API_KEY")

let message = Message(role: .user, content: [.text("This is test text")])
let response = try await anthropic.messages.createMessage([message], maxTokens: 1024)

for content in response.content {
    switch content {
    case .text(let text, _):
        print(text)
    case .image(let imageContent, _):
        // handle base64 encoded image content
    case .document(let documentContent, _):
        // handle base64 encoded pdf content
    case .toolResult(let toolResult):
        // handle tool result
    case .toolUse(let toolUse):
        // handle tool object
    }
}

流式 Message API

发送包含文本和/或图像内容的结构化输入消息列表,模型将使用服务器发送事件 (SSE) 逐步流式传输响应。

let anthropic = Anthropic(apiKey: "YOUR_OWN_API_KEY")

let message = Message(role: .user, content: [.text("This is test text")])
let stream = try await anthropic.messages.streamMessage([message], maxTokens: 1024)

for try await chunk in stream {
    switch chunk.type {
    case .messageStart:
        // handle message start object with casting chunk into `StreamingMessageStartResponse`
    }
}

Message Batches (beta)

Message Batches API 是一种强大且经济高效的方式,可以异步处理大量的 Messages 请求。 这种方法非常适合不需要立即响应的任务,可在提高吞吐量的同时降低 50% 的成本。

这对于不需要立即结果的批量操作尤其有用。

以下是如何使用 Message Batches API 处理多个消息的示例

let anthropic = Anthropic(apiKey: "YOUR_OWN_API_KEY")

let messages = [
    Message(role: .user, content: [.text("Write a haiku about robots.")]),
    Message(role: .user, content: [.text("Write a haiku about robots. Skip the preamble; go straight into the poem.")]),
    Message(role: .user, content: [.text("Who is the best basketball player of all time?")]),
    Message(role: .user, content: [.text("Who is the best basketball player of all time? Yes, there are differing opinions, but if you absolutely had to pick one player, who would it be?")])
    // ....
]

let batch = MessageBatch(
    customId: "my-first-batch-request",
    parameter: .init(
        messages: messages,
        maxTokens: 1024
    )
)

let response = try await anthropic.messageBatches.createBatches(batches: [batch])

Admin API

此库还支持用于管理工作区和组织成员的 Admin API。

Organization Members API

更新组织成员的示例

let admin = AnthropicAdmin(adminAPIKey: "YOUR_OWN_ADMIN_API_KEY")
try await admin.organizationMembers.get(userId: "user_01WCz1FkmYMm4gnmykNKUu3Q")

Organization Invites API

更新组织邀请的示例

let admin = AnthropicAdmin(adminAPIKey: "YOUR_OWN_ADMIN_API_KEY")
try await admin.organizationInvites.list()

Workspaces API

创建工作区的示例

let admin = AnthropicAdmin(adminAPIKey: "YOUR_OWN_ADMIN_API_KEY")
try await admin.workspaces.get(workspaceId: "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ")

Workspace Members API

更新工作区成员的示例

let admin = AnthropicAdmin(adminAPIKey: "YOUR_OWN_ADMIN_API_KEY")
try await admin.workspaceMembers.get(userId: "user_01WCz1FkmYMm4gnmykNKUu3Q")

API Keys API

更新组织成员的示例

let admin = AnthropicAdmin(adminAPIKey: "YOUR_OWN_ADMIN_API_KEY")
try await admin.apiKeys.get(apiKeyId: "apikey_01Rj2N8SVvo6BePZj99NhmiT")

Token Counting

Token 计数使您能够在将消息发送到 Claude 之前确定消息中的 Token 数量,从而帮助您就提示和使用做出明智的决策。 通过 Token 计数,您可以

let anthropic = Anthropic(apiKey: "YOUR_OWN_API_KEY")

let message = Message(role: .user, content: [.text("Find flights from San Francisco to a place with warmer weather.")])
let response = try await anthropic.countTokens.countTokens(
    [message],
    maxTokens: 1024,
    tools: [
        .computer(.init(name: "my_computer", displayWidthPx: 1024, displayHeightPx: 768, displayNumber: 1),
        .bash(.init(name: "bash"))
    ]
)

Token 计数端点接受与创建消息相同的结构化输入列表,包括对系统提示、工具、图像和 PDF 的支持。 响应包含输入 Token 的总数。

支持的功能

Tool Use

Claude 能够与外部客户端工具和函数交互,从而使您能够使用自己的自定义工具装备 Claude,以执行更广泛的任务。

AnthropicSwiftSDK 支持结合 @FunctionCalling 宏和 FunctionCalling-AnthropicSwiftSDK 扩展的 Tool Use。 您可以使用以下代码轻松处理 Tool Use

@FunctionCalling(service: .claude)
struct MyFunctionTools: ToolContainer {
    @CallableFunction
    /// Get the current stock price for a given ticker symbol
    ///
    /// - Parameter: The stock ticker symbol, e.g. AAPL for Apple Inc.
    func getStockPrice(ticker: String) async throws -> String {
        // code to return stock price of passed ticker
    }
}


let result = try await Anthropic(apiKey: "your_claude_api_key")
    .createMessage(
        [message],
        maxTokens: 1024,
        tools: MyFunctionTools().anthropicSwiftTools // <= pass tool container here
    )

Prompt Caching (beta)

Prompt 缓存是一项强大的功能,它通过允许从提示中的特定前缀恢复来优化您的 API 使用。

您可以使用 cache_control 参数缓存大型文本内容,例如“傲慢与偏见”。 这使得可以在多个 API 调用中重复使用此大型文本,而无需每次都重新处理它。 仅更改用户消息允许您在使用缓存内容的同时提出有关该书的各种问题,从而加快响应速度并提高效率。

以下是如何使用 cache_control 块通过 Messages API 实现 Prompt 缓存的示例

let anthropic = Anthropic(apiKey: "YOUR_OWN_API_KEY")

let message = Message(role: .user, content: [.text("Analyze the major themes in Pride and Prejudice.")])
let response = try await anthropic.messages.createMessage(
    [message],
    system: [
        .text("You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n", nil),
        .text("<the entire contents of Pride and Prejudice>", .ephemeral)
    ],
    maxTokens: 1024
)

Computer Use (beta)

升级后的 Claude 3.5 Sonnet 模型能够与可以操纵计算机桌面环境的工具进行交互。

通过实现以下代码,您可以指示 Claude 返回用于在计算机上执行任务的命令

let anthropic = Anthropic(apiKey: "YOUR_OWN_API_KEY")

let message = Message(role: .user, content: [.text("Find flights from San Francisco to a place with warmer weather.")])
let response = try await anthropic.messages.createMessage(
    [message],
    maxTokens: 1024,
    tools: [
        .computer(.init(name: "my_computer", displayWidthPx: 1024, displayHeightPx: 768, displayNumber: 1),
        .bash(.init(name: "bash"))
    ]
)

Extensions

通过引入扩展 Swift 包,可以通过 AWS Bedrock 和 Vertex AI 访问 Anthropic Claude API。 支持的服务如下:

贡献

欢迎提交 Pull Request。 对于重大更改,请先打开一个 issue 讨论您想要更改的内容。

请确保适当地更新测试。

许可证

Apache License 2.0