Loading...
  • 构建
  • 管理
  • 模型与定价
  • 客户端 SDK
  • API 参考
Search...
⌘K
Log in
Tool Runner(SDK)
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
构建/工具

工具运行器 (SDK)

使用 SDK 的工具运行器抽象来自动处理代理循环、错误包装和类型安全。

工具运行器处理代理循环、错误包装和类型安全,所以你不必手动处理。仅当你需要人工审批、自定义日志记录或条件执行时,才使用手动循环。在 Python、TypeScript 和 Ruby SDK 中可用。

工具运行器为使用 Claude 执行工具提供了开箱即用的解决方案。工具运行器自动处理工具调用、工具结果和对话管理,而不是手动处理它们:

  • 当 Claude 调用工具时执行工具
  • 处理请求/响应周期
  • 管理对话状态
  • 提供类型安全和验证

对大多数工具使用实现,使用工具运行器。

工具运行器目前处于测试版,可在 Python、TypeScript 和 Ruby SDK 中使用。

使用压缩进行自动上下文管理

工具运行器支持自动压缩,当令牌使用量超过阈值时生成摘要。这允许长时间运行的代理任务继续超越上下文窗口限制。

基本用法

使用 SDK 助手定义工具,然后使用工具运行器执行它们。

工具函数必须返回内容块或内容块数组,包括文本、图像或文档块。这允许工具返回丰富的多模态响应。返回的字符串将被转换为文本内容块。如果你想向 Claude 返回结构化 JSON 对象,请在返回之前将其编码为 JSON 字符串。数字、布尔值或其他非字符串原始值也必须转换为字符串。

遍历工具运行器

工具运行器是一个可迭代对象,从 Claude 生成消息。这通常被称为"工具调用循环"。每次迭代,运行器检查 Claude 是否请求了工具使用。如果是,它调用工具并自动将结果发送回 Claude,然后生成来自 Claude 的下一条消息以继续你的循环。

你可以在任何迭代处使用 break 语句结束循环。运行器将循环直到 Claude 返回不包含工具使用的消息。

如果你不需要中间消息,可以直接获取最终消息:

高级用法

在循环中,你可以完全自定义工具运行器对消息 API 的下一个请求。运行器自动将工具结果附加到消息历史记录,所以你不需要手动管理它们。你可以选择检查工具结果以进行日志记录或调试,并在下一个 API 调用之前修改请求参数。

调试工具执行

当工具抛出异常时,工具运行器捕获它并将错误作为工具结果返回给 Claude,其中 is_error: true。默认情况下,仅包含异常消息,不包含完整堆栈跟踪。

要查看完整堆栈跟踪和调试信息,请设置 ANTHROPIC_LOG 环境变量:

# View info-level logs including tool errors
export ANTHROPIC_LOG=info

# View debug-level logs for more verbose output
export ANTHROPIC_LOG=debug

启用后,SDK 记录完整的异常详细信息(在 Python 中使用 logging 模块,在 TypeScript 中使用控制台,或在 Ruby 中使用记录器),包括工具失败时的完整堆栈跟踪。

拦截工具错误

默认情况下,工具错误被传递回 Claude,然后它可以做出适当的响应。但是,你可能想检测错误并以不同的方式处理它们,例如,提前停止执行或实现自定义错误处理。

使用工具响应方法拦截工具结果并在将其发送给 Claude 之前检查错误:

修改工具结果

你可以在工具结果发送回 Claude 之前修改它们。这对于添加元数据(如 cache_control)以在工具结果上启用提示缓存或转换工具输出很有用。

使用工具响应方法获取工具结果,然后在运行器继续之前修改它。是否显式附加修改后的结果或就地改变它取决于 SDK;请参阅每个选项卡中的代码注释。

向工具结果添加 cache_control 特别有用,当工具返回大量数据(如文档搜索结果)时,你想为后续 API 调用缓存这些数据。有关缓存策略的更多详细信息,请参阅提示缓存。

流式传输

启用流式传输以在事件到达时接收它们。每次迭代都会生成一个流对象,你可以迭代以获取事件。

后续步骤

  • 有关工具调用循环的手动控制,请参阅处理工具调用。
  • 有关并发运行多个工具,请参阅并行工具使用。
  • 有关完整的工具使用工作流,请参阅定义工具。

Was this page helpful?