让 AI Agent 过目不忘:无影 AgentBay 跨会话数据持久化实战

简介: 阿里云无影 AgentBay 为 Agent 提供安全、隔离的云沙箱执行环境。针对 Session“阅后即焚”痛点,其核心通用 Context 与 Browser Context 持久化方案,可实现代码项目、配置及浏览器登录态的跨会话无缝延续,解决 Agent“失忆”难题,显著降低重复开发成本。

本文作者:阿里云无影技术专家 李岳冰

无影 AgentBay 是什么

做 AI Agent 开发绕不开一个问题:Agent 光会"想"不够,还得能"动手"——打开浏览器查资料、在终端里跑代码、甚至操作手机 App。但让 Agent 直接操作你的电脑,风险太大。

AgentBay 解决的就是这个问题。它给每个 Agent 分配一个独立的云端沙箱,可以理解为一台"云上临时电脑"。Agent 在里面随便折腾,不会影响你的本地环境。

通过无影 AgentBay 的 SDK 创建一个云端环境只需要几行代码:

from agentbay import AgentBay, CreateSessionParams
agent_bay = AgentBay()
session = agent_bay.create(CreateSessionParams()).session
session.command.execute_command("echo 'Hello from cloud!'")
agent_bay.delete(session)

这里的 Session 就是一个云端沙箱实例。创建、使用、销毁,整个过程很直观。更多关于 Session 的说明可以参考 Session 管理文档

问题:Session 是一次性的

Session 的设计初衷就是"用完即弃"——创建后在里面做各种操作,任务结束就销毁。所有文件、配置、运行状态,随着 Session 一起消失。

对于一次性任务(跑个脚本、测个接口)这完全没问题。但很多场景下,这种"阅后即焚"的行为反而是个麻烦:

  • 编程助手帮你写了一下午代码,第二天你想接着写,发现项目没了
  • 数据分析跑了两小时的计算,结果没保存,得重跑
  • 好不容易在手机 App 里完成了登录,下次又得重新登录

说白了,Agent 需要"记忆"。上次做到哪了、产出了什么、有哪些状态要保留——这些信息不能随着 Session 一起丢掉。

AgentBay 的持久化方案

AgentBay 提供了多种持久化机制来应对不同场景:

图中展示了四种方案,各有侧重:

  • Context:通用的文件级持久化,适合保存项目文件、配置、数据等。
  • Browser Context:专门持久化浏览器状态(Cookie、缓存等)。
  • Pause/Resume(Beta):暂停和恢复 Session,保留完整的运行时状态(进程、内存等),适合需要中断再继续的长时间任务。
  • Volume(规划中):大容量数据磁盘,适合 TB 级别的数据存储场景。

下面会介绍最常用的 Context 和 Browser Context。

Context 是什么

简单说,Context 就是一个挂在云端的存储空间。它不属于任何一个 Session,而是独立存在的。你可以把它想成一个"云端 U 盘":

  • Session 启动时,自动把 Context 里的文件下载到指定目录
  • Session 运行期间,Agent 在这个目录里正常读写
  • Session 结束时,把修改过的文件上传回 Context

下次再创建 Session 时,只要挂载同一个 Context,数据就自动恢复了。完整的 API 说明见 数据持久化文档

准备工作

开始之前需要两步准备:

# 1. 安装 SDK
pip install wuying-agentbay-sdk
# 2. 设置 API Key(在阿里云 AgentBay 控制台获取)
export AGENTBAY_API_KEY=your_key_here

上手实操

下面通过一个例子演示 Context 的完整用法。

如果你想先跑起来看效果,直接复制下面这段脚本运行(需要提前设置 AGENTBAY_API_KEY 环境变量):

"""
AgentBay Context 数据持久化演示
运行前设置环境变量: export AGENTBAY_API_KEY=your_key
安装依赖: pip install wuying-agentbay-sdk
"""
from agentbay import AgentBay, ContextSync, CreateSessionParams, SyncPolicy
agent_bay = AgentBay()
# 1. 创建 Context
context = agent_bay.context.get("persistence-demo", create=True).context
print(f"[1] Context 就绪: {context.name} ({context.id})")
# 2. 配置挂载
context_sync = ContextSync.new(
    context_id=context.id,
    path="/tmp/workspace",
    policy=SyncPolicy.default()
)
params = CreateSessionParams(context_syncs=[context_sync])
# 3. 第一个 Session:写入数据
session1 = agent_bay.create(params).session
print(f"[2] Session 1 已创建: {session1.session_id}")
session1.file_system.write_file("/tmp/workspace/notes.txt", "第一次会话写入的内容")
session1.file_system.write_file("/tmp/workspace/config.json", '{"version": "1.0"}')
print("[3] 已写入 2 个文件")
agent_bay.delete(session1, sync_context=True)
print("[4] Session 1 已销毁,数据已同步到 Context")
# 4. 第二个 Session:验证数据恢复
session2 = agent_bay.create(params).session
print(f"[5] Session 2 已创建: {session2.session_id}")
content = session2.file_system.read_file("/tmp/workspace/notes.txt").content
config = session2.file_system.read_file("/tmp/workspace/config.json").content
print(f"[6] 读取到 notes.txt: {content}")
print(f"[7] 读取到 config.json: {config}")
agent_bay.delete(session2)
print("[8] Session 2 已销毁,演示完成")
# 5. 清理 Context(可选)
# agent_bay.context.delete(context)

跑完之后回来看分步讲解,会更容易理解每一步在做什么。

第一步:准备 Context

from agentbay import AgentBay
agent_bay = AgentBay()
# 按名称获取 Context,不存在就创建一个
result = agent_bay.context.get("my-project", create=True)
context = result.context
print(f"Context: {context.name} (ID: {context.id})")

Context 的名字是唯一标识,同一个 API Key 下不会重复。第一次调用时会创建,之后再调用就直接返回已有的。

第二步:创建 Session 并关联 Context

from agentbay import ContextSync, CreateSessionParams, SyncPolicy
# 配置:把 Context 挂载到 Session 的 /tmp/workspace 目录
context_sync = ContextSync.new(
    context_id=context.id,
    path="/tmp/workspace",
    policy=SyncPolicy.default()
)
# 创建 Session
session = agent_bay.create(
    CreateSessionParams(context_syncs=[context_sync])
).session

ContextSync 描述了"把哪个 Context 挂到哪个目录"。SyncPolicy.default() 使用默认的同步策略,大多数情况下够用了。

第三步:在 Session 里干活

# 写文件
session.file_system.write_file(
    "/tmp/workspace/notes.txt",
    "第一次会话:项目初始化完成"
)
session.file_system.write_file(
    "/tmp/workspace/config.json",
    '{"version": "1.0", "status": "in-progress"}'
)
# 跑命令也行
session.command.execute_command("ls -la /tmp/workspace/")

这些文件写在 /tmp/workspace/ 下,也就是 Context 挂载的目录。

第四步:销毁 Session,保留数据

# sync_context=True 表示销毁前把数据同步回 Context
agent_bay.delete(session, sync_context=True)

Session 没了,但 /tmp/workspace/ 里的文件已经上传到 Context 的云端存储中。

第五步:新 Session 中验证

# 创建全新的 Session,挂载同一个 Context
new_session = agent_bay.create(
    CreateSessionParams(context_syncs=[context_sync])
).session
# 读取上次写入的文件
content = new_session.file_system.read_file("/tmp/workspace/notes.txt").content
print(content)  # => 第一次会话:项目初始化完成
config = new_session.file_system.read_file("/tmp/workspace/config.json").content
print(config)   # => {"version": "1.0", "status": "in-progress"}
agent_bay.delete(new_session)

数据完好无损地从上个 Session 延续到了新 Session。

两个实际场景

编程助手:项目跨会话延续

# 第一次对话:初始化项目
context = agent_bay.context.get("user-123-web-app", create=True).context
sync = ContextSync.new(context.id, "/home/wuying/project", SyncPolicy.default())
params = CreateSessionParams(context_syncs=[sync])
session = agent_bay.create(params).session
session.command.execute_command(
    "cd /home/wuying/project && npm init -y && npm install express"
)
session.file_system.write_file(
    "/home/wuying/project/index.js",
    "const express = require('express');\n// ..."
)
agent_bay.delete(session, sync_context=True)
# ---------- 几天后的对话 ----------
session = agent_bay.create(params).session
# node_modules、package.json、index.js 都在,直接继续开发
session.command.execute_command("cd /home/wuying/project && npm start")

手机 App:登录态复用

每次新 Session 都要让 Agent 重新登录 App 很浪费时间。把 App 的登录数据目录持久化,后续 Session 直接恢复已登录状态。

context = agent_bay.context.get("xhs-login", create=True).context
sync = ContextSync.new(
    context.id,
    "/data/data/com.xingin.xhs/files/mmkv",
    SyncPolicy.default()
)
# 首次:完成登录后保存
session = agent_bay.create(CreateSessionParams(context_syncs=[sync])).session
# ... Agent 执行登录流程 ...
agent_bay.delete(session, sync_context=True)
# 以后:Session 一启动就是已登录状态
session = agent_bay.create(CreateSessionParams(context_syncs=[sync])).session

同步策略调优

SyncPolicy.default() 能覆盖绝大多数场景。如果有特殊需求,可以调整细节。更多策略选项参考 同步策略最佳实践

大文件/大量文件场景:默认逐文件上传,文件多了效率不高。切换为打包模式:

from agentbay import UploadPolicy
policy = SyncPolicy.default()
policy.upload_policy = UploadPolicy(auto_upload=True, upload_mode="ARCHIVE")
sync = ContextSync.new(context.id, "/tmp/workspace", policy)

关键数据的手动同步:不想依赖 Session 结束时的自动同步,可以主动触发:

session.file_system.write_file("/tmp/workspace/model.bin", model_data)
# 主动同步,等待完成后再继续
result = session.context_manager.sync()
if result.success:
    print("同步完成")

数据自动过期:临时数据不需要永久保存,设一个过期时间:

from agentbay import RecyclePolicy
policy = SyncPolicy.default()
policy.recycle_policy = RecyclePolicy(lifecycle="7d")

大 Context 加速 Session 启动:如果 Context 数据很大,Session 创建时会等待下载完成才返回。设置 beta_wait_for_completion=False 可以跳过等待,让 Session 先创建起来,Context 在后台继续下载:

context_sync = ContextSync.new(
    context_id=context.id,
    path="/tmp/workspace",
    policy=SyncPolicy.default(),
    beta_wait_for_completion=False
)

需要注意:使用这个选项时,Session 刚创建时挂载路径下的文件可能还没准备好,代码需要容忍短暂的文件缺失。

手动同步支持指定方向sync() 默认是上传,也可以指定为下载(从 Context 刷新本地数据):

# 上传本地修改到 Context
session.context_manager.sync(mode="upload")
# 从 Context 下载最新数据到本地
session.context_manager.sync(mode="download")

Browser Context:浏览器状态的专属持久化

前面介绍的 Context 是通用的文件级持久化,什么文件都能存。但浏览器场景有些特殊——Cookie、Local Storage、缓存这些东西散落在浏览器的各种内部目录里,用通用 Context 去挂载这些路径不太方便。

所以 AgentBay 单独提供了 Browser Context,专门用来持久化浏览器状态。它和通用 Context 共用同一套存储后端,但接口更简洁,不需要你关心挂载路径和同步策略的细节。

基本用法

from agentbay import AgentBay, CreateSessionParams, BrowserContext
agent_bay = AgentBay()
# 创建一个 Context 用于存储浏览器数据
context = agent_bay.context.get("my-browser-data", create=True).context
# 用 BrowserContext 包装,关联到 Session
browser_context = BrowserContext(context.id, auto_upload=True)
params = CreateSessionParams(
    image_id="browser_latest",
    browser_context=browser_context
)
session = agent_bay.create(params).session

auto_upload=True 表示 Session 结束时自动把浏览器数据上传回 Context。下次用同一个 Context 创建 Session,Cookie、登录态、浏览器配置都会恢复。

什么时候用 Browser Context,什么时候用通用 Context?

  • Browser Context:持久化的是浏览器自身的状态(Cookie、Cache、Local Storage、扩展配置等)。适合 Web 自动化、爬虫场景下保持登录态。
  • 通用 Context:持久化的是文件系统中的任意文件。适合保存代码项目、数据文件、配置等。
  • 两者可以同时使用:一个 Session 可以同时挂载通用 Context(存项目文件)和 Browser Context(存浏览器状态)。

典型场景:网站登录态复用

第一次 Session 中通过浏览器完成网站登录,Cookie 被保存到 Browser Context。后续 Session 创建时浏览器直接恢复已登录状态,不需要重新登录。

from agentbay import BrowserOption
# 第一次:登录并保存状态
context = agent_bay.context.get("site-login", create=True).context
browser_ctx = BrowserContext(context.id, auto_upload=True)
session = agent_bay.create(
    CreateSessionParams(image_id="browser_latest", browser_context=browser_ctx)
).session
# 初始化浏览器,通过 Playwright 操作登录
session.browser.initialize(BrowserOption())
endpoint_url = session.browser.get_endpoint_url()
# ... 使用 Playwright 连接 endpoint_url,完成登录操作 ...
# 销毁 Session,浏览器数据自动上传
agent_bay.delete(session, sync_context=True)
# 以后:浏览器直接恢复到已登录状态
session2 = agent_bay.create(
    CreateSessionParams(image_id="browser_latest", browser_context=browser_ctx)
).session
# 浏览器打开目标网站时已经是登录状态

和通用 Context 的用法很像,区别就是创建参数里用 browser_context 而不是 context_syncs,不需要手动指定挂载路径。更详细的用法(包括 Cookie 持久化验证的完整示例)见 Browser Context 文档

Context 的直接管理

不启动 Session 也能管理 Context 里的文件:

# 列出所有 Context
result = agent_bay.context.list()
for ctx in result.contexts:
    print(f"{ctx.name} ({ctx.id})")
# 列出某个 Context 里的文件
files = agent_bay.context.list_files(context.id, "/")
# 获取文件下载链接(返回预签名 URL)
url_result = agent_bay.context.get_file_download_url(context.id, "notes.txt")
print(url_result.url)
# 获取文件上传链接
upload_result = agent_bay.context.get_file_upload_url(context.id, "input.csv")
print(upload_result.url)
# 清空数据
agent_bay.context.clear(context.id)
# 删除整个 Context
agent_bay.context.delete(context)

需要注意的几件事

  • sync_context=True 很重要:如果下次 Session 需要最新数据,删除时一定要加这个参数,否则上传可能还没完成 Session 就被销毁了。
  • Context 按 API Key 和 Region 隔离:同一个名字在不同 API Key 或不同 Region 下是完全独立的 Context,数据不互通。
  • 挂载路径要有写权限:推荐 /home/wuying/tmp 等目录,某些系统目录可能写入失败。
  • 大数据量用 ARCHIVE 模式:文件数量多或者单文件很大时,打包上传比逐文件上传快很多。

总结

Context 的核心思路很简单:给 Agent 一个跨 Session 的存储空间。创建 Context、挂载到 Session、销毁时同步回去——三步搞定数据持久化。不需要额外搭建存储服务,不需要自己处理文件上传下载,SDK 把脏活都干了。

操作

代码

创建/获取 Context

agent_bay.context.get("名字", create=True)

文件持久化(通用 Context)

ContextSync.new(context_id, 路径, SyncPolicy.default())

浏览器持久化(Browser Context)

BrowserContext(context_id, auto_upload=True)

销毁时保存数据

agent_bay.delete(session, sync_context=True)

手动同步

session.context_manager.sync()

管理 Context 文件

agent_bay.context.list_files() / get_file_download_url()


相关链接

相关文章
|
7天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
8282 67
|
4天前
|
人工智能 安全 API
CoPaw:3分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
5天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
3800 7
|
4天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
3526 8
|
7天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
4195 13
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
6天前
|
人工智能 监控 机器人
2026年零门槛部署 OpenClaw(Clawdbot)接入A股数据,实现24小时股票分析保姆级教程
在AI赋能金融分析的浪潮中,OpenClaw(原Clawdbot/Moltbot)凭借开源灵活的架构,成为个人投资者打造专属智能分析助手的首选。通过接入A股实时数据,它能实现24小时市场监控、涨跌预警、潜力股推荐等核心功能,彻底解放人工盯盘的繁琐。而阿里云的稳定部署环境,更让这套系统实现全天候不间断运行,成为真正的“金融AI助手”。 本文基于OpenClaw v2026.1.25稳定版与QVeris免费A股数据接口,详细拆解阿里云OpenClaw部署步骤、A股数据接入流程、高级分析功能配置及多平台联动技巧,所有代码命令均可直接复制复用,即使无技术基础也能在1小时内完成从部署到实战的全流程。
3032 11
|
9天前
|
存储 人工智能 BI
2026年OpenClaw(Clawdbot)极简部署:接入小红书全自动运营,一个人=一支团队
2026年的小红书运营赛道,AI自动化工具已成为核心竞争力。OpenClaw(原Clawdbot)凭借“Skill插件化集成、全流程自动化、跨平台联动”的核心优势,彻底颠覆传统运营模式——从热点追踪、文案创作、封面设计到自动发布、账号互动,仅需一句自然语言指令,即可实现全链路闭环。而阿里云作为OpenClaw官方推荐的云端部署载体,2026年推出专属秒级部署方案,预装全套运行环境与小红书运营插件,让零基础用户也能10分钟完成部署,轻松拥有7×24小时在线的“专属运营团队”。
2771 11

热门文章

最新文章