在包含工具使用的长对话中，为什么需要检查响应中的 `stop_reason`？	它可以决定是否需要处理工具使用请求，防止错误地添加空消息。
为了支持工具使用，`chat` 函数的关键改动是什么？	它现在返回一个包含 `stop_reason` 的字典，并改进了文本提取逻辑。
在修改后的 `chat` 函数中，如何从 `parts` 列表中提取所有文本？	通过遍历 `parts` 列表，使用列表推导式和 `join` 方法将所有文本部分连接起来。
在 `run_conversation` 函数中，`while True` 循环的作用是什么？	它用于持续处理对话，直到模型不再请求使用工具为止。
`run_conversation` 循环何时终止？	当响应的 `stop_reason` 不等于 `tool_use` 时。
当对话需要工具时，消息流的正确顺序是什么？	用户消息 -> 助手工具请求 -> 工具结果（作为用户消息）-> 助手最终回复。
如果查询不需要工具（例如“1+1”），系统会如何处理？	循环会立即终止，直接返回助手的最终响应。
