query() 有两种输入模式:
- 单消息查询模式:一次提交一条用户消息,SDK 完成本轮回复后关闭会话。见 快速开始。
- 多消息会话模式:保持会话开启,和模型进行多轮对话。
多消息会话
定义一个按顺序产出用户消息的序列:priority 指定的时机处理。输入消息流结束后,会话自动关闭。消息字段定义见 SDKUserMessage。
运行中插话
模型回复期间,异步输入流仍可继续发送SDKUserMessage。
priority 决定消息何时交给会话:
相同优先级的消息按发送顺序处理。
priority: 'now' 适合立即改变当前方向;如果只想停止当前回复、不发送新消息,应使用 q.interrupt()。
添加上下文但不触发回复
shouldQuery: false 会把消息加入对话,但不会仅凭这条消息触发回复。消息的处理时机仍由 priority 决定。
中断当前回复
调用await q.interrupt() 可以停止当前回复,但不会关闭会话,之后仍可继续对话。
interrupt() 不会清空排队消息。如果某条排队消息不能继续执行,请使用 cancelAsyncMessage()。结束整个会话的方式见管理会话生命周期。
取消排队消息
给需要跟踪的消息设置会话内唯一的uuid,再使用 q.cancelAsyncMessage(uuid) 取消尚未开始执行的消息:
true;消息不存在或已无法取消时返回 false。未设置 uuid 的消息无法通过该方法取消。不要在同一会话内复用 UUID。
管理会话生命周期
单条字符串输入处理完成或输入消息流结束后,SDK 会自动关闭会话。如果需要提前结束会话,可以通过AbortController 自定义结束时机,也可以直接调用 q.close()。
自定义会话结束时机
如果需要根据业务条件决定何时结束会话,请创建AbortController,并在调用 query() 时通过 options.abortController 传入。自定义条件满足时,调用同一个控制器的 abort()。条件可以来自用户操作、上游请求、任务超时、应用退出或其他业务逻辑:
abort() 会关闭整个会话并结束消息迭代,之后不能继续发送消息。
主动关闭会话
如果当前代码已经确定不再使用会话,可以直接调用await q.close()。它适用于正常收尾、提前退出和异常清理;放在 finally 中可以确保相关资源关闭完成: