本指南介绍如何通过 LangSmith Deployment API 取消代理的运行。你可以按 ID 取消单个运行,也可以按线程或状态取消多个运行。取消运行适用于停止长时间运行或卡住的运行,或者用户放弃请求的情况。

设置

创建客户端和线程:

取消单个运行

以下示例会创建一个运行,然后使用不同选项取消它,并打印运行结果,以展示每种情况下的结果。你可以取消状态为 pending 或 running 的运行。尝试取消状态不是 pending 或 running 的运行会导致错误。

使用中断取消(默认)

中断会停止执行该运行的工作进程,并将运行标记为 interrupted。不会删除任何内容:
  • 运行记录仍然保留(状态为 interrupted)。你可以获取它、检查输入/输出,并查看执行历史记录。
  • 该运行的所有检查点都会继续保留。线程在最后一个已完成步骤时的状态也会被保留。
  • 之后可以从检查点继续运行(例如,使用时间旅行),也可以检查部分状态。
当你希望停止运行,但仍保留它以便调试、审计或从检查点继续运行时,请使用 interrupt。

使用回滚取消

rollback会停止运行,然后从存储中删除该运行及其检查点:
  • 运行记录会被删除。该运行不再出现在该线程的运行列表或历史记录中。
  • 该运行创建的所有检查点都会被删除。线程状态会恢复到运行开始前的状态(就像该运行从未执行过一样)。
  • 回滚后无法继续运行或检查该运行。
当你希望完全丢弃某个运行及其影响时,请使用 rollback(例如,用户放弃请求,且你不需要保留部分处理结果)。

等待取消完成

默认情况下,取消请求会在发出取消请求后返回,而运行则会异步取消。wait=True 会让取消请求一直阻塞,直到运行被完全取消。当你希望了解运行取消后的最终状态时,这很有用(例如,创建了哪些检查点、最终输出是什么)。

取消多个运行

使用批量取消端点,可以在一个请求中取消多个运行。同时支持中断和回滚操作。

按线程 ID 和运行 ID 取消

传入运行 ID,取消指定的运行。

按状态取消

取消部署中所有线程里符合指定状态的运行。有效的状态选项为 pending、running 或 all。

断开连接时取消

启动流式运行或等待运行时,可以设置 on_disconnect="cancel",这样客户端断开连接时运行就会被取消。当用户关闭应用或连接丢失时,这可以避免运行一直处于进行中状态。

常见场景

  • 人在回路和中断:代理可以在中断处暂停,以等待人工输入。取消运行会停止执行;这与中断不同,后者会暂停运行,并且可以使用新输入继续运行。
  • 时间旅行:使用 interrupt 操作取消后,运行和检查点仍然可用。你可以从检查点继续运行(时间旅行),以重放执行过程或创建执行分支。
  • 重复发送消息:当运行正在进行时用户发送新输入,多任务策略(enqueue、reject、interrupt、rollback)会决定现有运行是被中断还是回滚,以及如何处理新运行。若要从应用中显式取消运行,请使用本页面介绍的取消 API。
  • Studio:在 Studio 中,使用运行界面里的 Cancel 按钮取消当前运行。