call / streamEvents 即可。这里使用 AgentSession,是因为页面离开后任务仍需执行,还需要排队、回复待办和中断后继续。会话 API 的逐步用法见会话操作、事件与恢复。
默认使用离线演示模型,无需 API Key、数据库或 Node.js。需要 JDK 17+ 和 Maven。
启动
在 agentscope-java 仓库根目录运行:~/.agentscope/session-chat,原生日志保存在该目录的 .agentscope-runtime/ 中;重启时保留此目录即可。
可以指定独立的数据目录和端口:
按顺序体验
1. 聊天与历史恢复
发送“请记住我喜欢简洁的回答”,等待完成。刷新页面,消息仍在。停止并重启服务,选择同一个会话再发送“我之前说了什么”,演示模型会展示恢复后看到的早期消息。 浏览器保存当前 session 的选择;消息从服务器日志加载,不依赖浏览器保存一份聊天记录。新建会话会创建新的 sessionId,不删除原历史。2. 多步执行中的刷新与断线续传
点击“多步执行 · 刷新续传”发送/slow。Agent 会先生成一段说明,调用两次 demo_lookup 查询不同主题,再生成第二段说明,调用 demo_verify,最后给出总结。工具通过真实 Toolkit 执行本地只读演示逻辑,并逐段报告进度。
可以在以下时刻刷新页面、切换到其他会话,或断开事件连接后重新连接:
- 第一段或最后一段 AssistantMessage 仍在生成时:已经展示的前缀会恢复,并接着增长。
- ToolCall 参数尚未生成完时:工具卡片保留已提交的参数片段。
- 工具正在执行时:恢复工具名称、参数、状态和已提交进度。
- 离开期间跨过多个步骤时:恢复全部中间消息、ToolCall 和 ToolResult,同时显示当前正在执行的条目。
items 包含完整消息、生成中的消息和工具卡片,cursor 与它们来自同一段日志;messages 则保留完整消息历史。model/chunk 重建消息和参数,tool/chunk 重建进度,完整消息及结果按稳定 ID 更新对应条目,不重复追加。
SSE 只观察已提交事件并触发视图更新。普通断线由 EventSource 携带 Last-Event-ID 重连,页面刷新先加载快照,再订阅该水位之后的事件。显示内容跟随日志提交节奏更新,不会把无法重放的临时文本拼到持久前缀上;关闭页面不会停止后台执行。
3. 补充信息后恢复同一 turn
发送/ask。演示模型调用 ask_user 外部工具,执行进入 suspended,并显示输入框。可以先刷新页面,或停止并重启程序,待答请求仍会从日志恢复。
输入答案后点击“提交并继续”。观察 turnId 保持不变,runId 改变;原生记录出现 interaction/resolved、turn/resumed 和新的 run/start,最终完成原 turn。
4. 暂停与 checkpoint 续跑
发送/slow,点击“中断执行”,等待状态变成“已中断”。可以在此时重启服务,再点击“继续原任务”。恢复使用已提交状态和原 turnId,创建新的 runId;执行会从工作状态继续;历史界面仍保留此前已提交的消息片段和工具记录。
强制终止进程时,旧 writer 租约可能需要等待约两分钟才到期。如果检查发现工具结果未知,示例会要求核对结果,不会自动假定成功;实际应用的核对用法见会话日志参考。
5. 新任务、运行中引导与材料注入
发送/slow 后,在“输入用途”中选择“补充当前任务”,输入“重点比较运维成本”。该输入在后续推理步骤进入原 turn/run。选择“新任务”则创建另一个 turn,忙时显示在队列中。选择“只补充材料”只保存上下文,空闲时不会启动 Agent。
中断不会丢弃排队任务;先恢复原任务或回答待办,之后继续处理队列。页面刷新只恢复展示,不重新提交任何操作。
6. 查看执行细节
点击时间线记录,查看对应的原生 SessionEvent,包括 turnId、executionRunId 和 payloadJson。可观察模型请求、模型片段、消息、工具交互和 checkpoint。 页面同时显示历史消息数与工作消息数。历史供界面和审计读取;工作上下文还可能包括系统消息或经过压缩的内容,因此两个计数不要求相等。使用真实模型
设置环境变量后重新启动:/slow 和 /ask 是离线模型的演示指令。要体验挂起,可以请模型先通过 ask_user 询问你的偏好。切回离线模式使用 CHAT_MODEL=demo。模型切换不改变日志位置;如需分开历史,可新建会话。
API 与代码阅读顺序
示例使用
agent.session(context):submit 接收并安排新任务,steer 在当前任务下一步骤补充要求,inject 保存材料而不启动任务,respond 和 resume 自动关联原 turn。框架持有后台执行,SSE 只观察已提交历史。提交重试沿用相同 request_id 和输入,turnId 由框架分配。
建议依次阅读:
ChatApplication.java:选择模型和 Workspace。ChatSessions.java:构建 HarnessAgent、启动执行、处理补充结果和恢复。ChatHistory.java:从同一个已提交前缀生成消息、待办、状态和 cursor。ChatItems.java:将模型片段、消息、工具参数、进度和结果投影为稳定的 UI 条目。ChatController.java:HTTP 与只读 SSE,持久帧携带可续传的 id。static/chat.js:快照替换、事件通知、固定会话排序、重连和操作按钮。