在 `run conversation` 函数中，判断 Claude 是否需要调用工具的关键依据是什么？	检查响应消息（response message）中的 `stop_reason` 字段。
如果 Claude 决定调用工具，其响应消息的 `stop_reason` 字段会是什么值？	`"tool_use"`。
在 `run conversation` 的循环中，如果 `response.stop_reason` 不等于 `"tool_use"`，程序应该执行什么操作？	立即跳出（break）循环，因为 Claude 已完成最终回复。
`run tools` 函数的主要目的是什么？	接收 Claude 的助手消息，并执行其中包含的所有工具调用块（tool use blocks）。
为什么 `run tools` 函数必须设计成能够处理多个工具调用块？	因为 Claude 在一个助手消息中可以包含多个独立的工具使用请求。
在构建工具结果块（tool result block）时，哪个属性必须与原始工具使用块（tool use block）的 ID 完全匹配？	`tool_use_id`。
`run_tool` 函数的主要作用是什么？	根据工具名称和输入，确定并执行相应的工具函数。
`run_tool` 如何决定运行哪个工具函数？	通过一系列的条件判断（if statements）检查工具名称。
使用 `run_tool` 而不是硬编码工具的优势是什么？	方便未来添加新的工具，只需增加相应的判断即可。
在 `run_conversation` 循环中，如果 Claude 请求使用工具，下一步该做什么？	执行这些工具，并将结果作为用户消息添加到消息列表中。
工具执行完成后，循环的下一步操作是什么？	将工具结果再次发送给 Claude，继续循环。
`run_conversation` 循环何时停止？	当 Claude 不再请求工具使用时。
为什么必须正确处理 Claude 单个消息中的多个块（blocks）？	因为一个消息可能同时包含文本块和多个工具使用块。
请简述多轮工具调用的过程。	Claude请求工具 -> 执行工具并返回结果 -> Claude再次请求工具 -> 直到没有工具请求为止。
系统还需要添加哪些新的工具支持？	`add_duration_to_date_time` 和 `set_reminder`。
