更新时间:2026-09-16 GMT+08:00
分享

会话管理

会话(Session)是智能体运行时中隔离执行和状态管理的核心单元。每个会话运行在独立的安全沙箱中,支持会话级状态持久化,使智能体能够在多次调用间保持上下文。通过会话管理,可实现多轮对话、命令执行、文件传输等高级交互能力。

约束与限制

  • 会话ID由调用方自行生成,由英文、数字、中划线(-)、下划线(_)组成,不超过 64 个字符。
  • 配置会话存储后,不支持取消(关闭),仅支持修改挂载路径。
  • 会话存储仅支持配置 1 个。
  • 会话存储底层基于OBS 对象存储,通过FUSE挂载到沙箱容器。配置umask后,文件权限由挂载时的umask、uid、gid参数决定,运行时执行chmod/chown命令不会生效。
  • 配置会话存储后,请谨慎使用同一会话ID进行跨访问方式访问,版本不一致会导致调用超时。
  • 空闲会话超时和最大存活时间取值范围为60 - 604800 秒(1 分钟 ~ 7 天)。

原理介绍

会话隔离机制

每个会话运行在独立的安全沙箱(microVM)实例中,实现进程级、文件系统级和网络级的隔离。同一会话ID的多次调用会被路由到同一个沙箱实例(会话亲和性),不同会话ID的调用彼此隔离。

会话生命周期

会话从创建到销毁经历以下阶段:

表1 会话生命周期

阶段

API 接口

平台动作

说明

创建会话

POST /runtimes/{runtime_name}/sessions-start

创建沙箱和会话

创建独立沙箱实例并生成会话。

会话活跃期

POST /runtimes/{runtime_name}/invocations

调用沙箱

通过会话ID路由到同一沙箱,支持命令执行和文件传输。

停止会话

POST /runtimes/{runtime_name}/sessions-stop

销毁沙箱

销毁沙箱实例,释放计算资源。会话内临时文件自动清除。

停止会话(销毁沙箱)和删除会话状态(清除持久化存储)是两个独立操作。允许您在沙箱销毁后仍保留会话数据,或按需单独清理存储状态,避免操作失败导致资源泄漏。

可通过控制台配置会话生命周期,详细操作请参见通过控制台部署中“生命周期配置”。

表2 生命周期参数

参数(控制台)

参数(API/JSON)

描述

取值范围

默认值

空闲会话超时

lifecycleConfig.idleSessionTimeoutSec

会话在设置的空闲时间内没有交互或活动,系统自动结束该会话。

60 - 604800 秒

900 秒(15 分钟)

最大存活时间

lifecycleConfig.maxAliveTimeSec

会话持续调用时自动终止前的最大存活时间。达到此时间后无论是否活跃都会被强制终止。

60 - 604800 秒

86400 秒(24 小时)

当空闲会话超时或最大存活时间满足任一条件时,运行时会话将自动终止。支持以秒、分钟、小时或天为单位进行配置。

会话路由机制

平台通过 HTTP 请求头中的会话 ID 标识和路由会话。默认请求头为 X-Hw-Agentarts-Session-Id,会话 ID 从请求头(header)中提取。

不同运行时类型的会话 ID 请求头如下:

表3 各运行时类型的会话 ID 请求头

运行时类型

会话 ID 请求头

Agent(默认)

X-Hw-Agentarts-Session-Id

Code Interpreter

X-Hw-Agentarts-Code-Interpreter-Session-Id

Browser

X-Hw-Agentarts-Browser-Session-Id

Gateway(MCP)

X-Hw-Agentarts-Session-Id

跨访问方式的会话路由

在智能体运行时中,是否配置会话存储会影响跨访问方式(Endpoint)的会话路由行为:

  • 未配置会话存储:新请求根据指定的访问方式路由,同一会话ID可在不同版本中独立使用。
  • 已配置会话存储:新请求根据当前是否存在已激活的同一会话ID沙箱进行判断。不存在已激活沙箱时,按指定访问方式路由;存在已激活沙箱且版本一致时,调用同一沙箱;版本不一致时,调用超时。

请谨慎使用同一会话 ID 进行跨访问方式访问。配置会话存储后,版本不一致会导致调用超时。建议在灰度发布验证时使用新的会话 ID。

会话示例

场景一:基础多轮对话

通过会话 ID 实现多轮对话,无需创建独立会话。在请求头中携带X-Hw-Agentarts-Session-Id,同一会话 ID 的多次调用共享沙箱上下文。

# 第一轮(会话 ID = session-001)
POST /runtimes/{runtime_name}/invocations
Headers: X-Hw-Agentarts-Session-Id: session-001
Body: {"message": "我叫张三"}
→ {"reply": "你好,张三!有什么可以帮助你的?"}

# 第二轮(相同会话 ID)
POST /runtimes/{runtime_name}/invocations
Headers: X-Hw-Agentarts-Session-Id: session-001
Body: {"message": "你还记得我叫什么吗?"}
→ {"reply": "你叫张三。"}

# 第三轮(新会话 ID → 上下文清空)
POST /runtimes/{runtime_name}/invocations
Headers: X-Hw-Agentarts-Session-Id: session-002
Body: {"message": "你还记得我叫什么吗?"}
→ {"reply": "抱歉,我不清楚你的名字。"}

X-Hw-Agentarts-Session-Id提供的是会话标识,用于平台将多次请求路由到同一沙箱。但上下文是否能保持(即Agent能否记住之前的对话),取决于Agent代码是否实现了对话记忆逻辑。

场景二:涉及文件处理

当需要让智能体处理本地文件时,需先创建会话获取沙箱环境:

  1. 创建会话:调用 POST /runtimes/{runtime_name}/sessions-start,获取沙箱环境。
  2. 上传文件:调用 POST /runtimes/{runtime_name}/upload-files,将本地文件上传至沙箱。单文件限制 100MB,多文件总大小限制 500MB。
  3. 调用智能体:调用 POST /runtimes/{runtime_name}/invocations,Agent 读取并处理文件。
  4. 下载文件:调用 GET /runtimes/{runtime_name}/download-files,取回处理结果。
  5. 停止会话:调用 POST /runtimes/{runtime_name}/sessions-stop,释放资源。

场景三:涉及命令执行

当需要在智能体沙箱中执行Shell命令时:

  1. 创建会话:获取沙箱环境。
  2. 调用智能体:Agent推理决策,决定需要执行的命令。
  3. 执行命令:调用POST /runtimes/{runtime_name}/commands,在沙箱内执行 Shell 命令,返回标准输出和错误输出。
  4. 再次调用智能体:Agent 基于命令结果继续推理。
  5. 停止会话:释放资源。

    步骤②③④可多次循环,形成“推理 → 执行 → 再推理”的闭环。

相关文档