AgentScope 2.0:2. 快速上手 从零构建生产级智能体

一、前言

AgentScope Java 2.0 是阿里巴巴通义实验室推出的面向生产环境的智能体工程平台。其 Quick Start 文档以极简的路径,展示了从环境搭建到多用户并发服务的完整链路。本文将基于官方文档内容,系统梳理 AgentScope 2.0 的快速上手流程,并深入解析其核心设计思想。

二、环境准备与安装

2.1 基础要求

依赖项 最低版本
JDK 17+
Maven 3.9+(推荐)

2.2 Maven 依赖配置

AgentScope 2.0 采用模块化依赖设计,核心入口为 agentscope-harness:

xml 复制代码
<dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope-harness</artifactId>
    <version>${agentscope.version}</version>
</dependency>

设计要点:HarnessAgent 是推荐的入口类,它将工作区、长期记忆、会话持久化、子 Agent、沙箱等工程能力打包在一个 Builder 中。依赖 agentscope-harness 会自动引入核心 agentscope-core。

如果只需要裸 ReActAgent 的框架 API(不需要工作区/持久化/子 Agent/沙箱),仅引入 agentscope-core 即可。 模型扩展模块是独立的,需按需引入。例如使用 DashScope:

xml 复制代码
<dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope-extensions-model-dashscope</artifactId>
    <version>${agentscope.version}</version>
</dependency>

2.3 模块依赖关系

文本 复制代码
agentscope-harness
  └── agentscope-core(自动传递)
        └── agentscope-extensions-model-*(按需引入)
              ├── dashscope
              ├── openai
              ├── anthropic
              ├── gemini
              └── ollama

三、第一个智能体:三合一能力演示

官方 Quick Start 通过一个精炼示例,同时展示了三大核心能力:

能力 说明
工作区驱动的人格 通过 AGENTS.md 定义 Agent 人格
会话自动持久化 相同 sessionId 的第二轮自动恢复上下文
对话压缩 超阈值后自动压缩,长期事实落入 MEMORY.md

3.1 完整代码示例

java 复制代码
import io.agentscope.core.agent.RuntimeContext;
import io.agentscope.core.message.UserMessage;
import io.agentscope.harness.agent.HarnessAgent;
import io.agentscope.harness.agent.memory.compaction.CompactionConfig;
import java.nio.file.Paths;

public class FirstAgent {
    public static void main(String[] args) {
        HarnessAgent agent = HarnessAgent.builder()
                .name("note-taker")
                .sysPrompt("你是一个帮助用户做笔记的助手。")
                // 字符串形式由 ModelRegistry 解析 ------ 自动读取 DASHSCOPE_API_KEY
                .model("dashscope:qwen-plus")
                .workspace(Paths.get(".agentscope/workspace"))
                .compaction(CompactionConfig.builder()
                        .triggerMessages(30)
                        .keepMessages(10)
                        .build())
                .build();

        RuntimeContext ctx = RuntimeContext.builder()
                .sessionId("demo-session")
                .userId("alice")
                .build();

        // 第一轮:自我介绍 + 当天的事
        agent.call(new UserMessage("我叫天宇,今天准备一个关于 ReAct 的技术分享。"), ctx).block();
        // 第二轮:同 sessionId,自动恢复上一轮状态后回答
        agent.call(new UserMessage("我叫什么?我今天要干什么?"), ctx).block();
    }
}

3.2 关键设计解析

模型切换极简:.model("dashscope:qwen-plus") 以字符串形式传入,由 ModelRegistry 解析并自动读取对应环境变量。切换厂商只需修改字符串:

java 复制代码
.model("openai:gpt-5.5")
.model("anthropic:claude-sonnet-4-5")
.model("gemini:gemini-2.0-flash")
.model("ollama:llama3")

压缩策略配置:

java 复制代码
CompactionConfig.builder()
    .triggerMessages(30)   // 消息数达到 30 条时触发压缩
    .keepMessages(10)      // 压缩后保留最近 10 条
    .build()

3.3 运行后的目录结构

运行后自动生成两棵目录树:

文本 复制代码
.agentscope/workspace/                          ← 工作区(Agent 内容)
├── AGENTS.md                                   ← Agent 人格定义
└── agents/note-taker/
    └── sessions/                               ← 永不压缩的原始对话日志

~/.agentscope/state/note-taker/                 ← 状态存储(工作区之外)
└── alice/demo-session/                         ← AgentState 自动写回/加载
    └── agent_state.json

架构要点 :AgentState 默认存储在工作区之外的 ~/.agentscope/state// 下。这是因为状态是恢复工作区本身的前提条件(例如沙箱清空后需要先有状态才能重建工作区),不能和工作区数据耦合。

3.4 记忆压缩流转

多轮对话触发压缩后的数据流转:

文本 复制代码
对话消息(超阈值)
    ↓ 自动压缩
workspace/memory/YYYY-MM-DD.md    ← 提炼出的事实
    ↓ 周期性合并
MEMORY.md                          ← 长期记忆
    ↓ 下一轮推理时
自动注入 system prompt              ← 影响后续行为

四、流式输出:实时查看推理与工具调用

将 call(...) 替换为 streamEvents(...) 即可获取实时事件流,适用于 Web/TUI 渲染场景:

java 复制代码
import io.agentscope.core.event.AgentEventType;
import io.agentscope.core.event.TextBlockDeltaEvent;
import io.agentscope.core.event.ToolCallStartEvent;

agent.streamEvents(new UserMessage("帮我把今天的关键点列三条。"))
        .doOnNext(event -> {
            if (event.getType() == AgentEventType.TEXT_BLOCK_DELTA) {
                // 模型返回的流式文本片段
                System.out.print(((TextBlockDeltaEvent) event).getDelta());
            } else if (event.getType() == AgentEventType.TOOL_CALL_START) {
                // 智能体即将调用工具
                System.out.println("\n[tool] " + ((ToolCallStartEvent) event).getToolCallName());
            }
            // 其他事件:思考块、工具结果、回复结束等
        })
        .blockLast();

事件类型一览

事件类型 说明
TEXT_BLOCK_DELTA 模型流式文本片段
TOOL_CALL_START 工具调用开始
思考块事件 模型推理过程
工具结果事件 工具执行返回
回复结束事件 本轮推理完成

五、多用户并发:无状态设计

这是 AgentScope 2.0 面向生产环境的核心架构决策

Agent 在调用之间是无状态的------同一个实例可以处理不同用户、不同会话的请求。

5.1 实现方式

通过 RuntimeContext 传入 userId / sessionId,每次调用自动加载并隔离各自的对话上下文:

java 复制代码
// 应用启动时创建一个 Agent 实例(单例即可)
HarnessAgent agent = HarnessAgent.builder()
        .name("note-taker")
        .sysPrompt("你是一个帮助用户做笔记的助手。")
        .model("dashscope:qwen-plus")
        .workspace(Paths.get(".agentscope/workspace"))
        .compaction(CompactionConfig.builder()
                .triggerMessages(30)
                .keepMessages(10)
                .build())
        .build();

// 在 HTTP handler 中------不同请求传入不同 RuntimeContext
agent.call(new UserMessage(userInput), RuntimeContext.builder()
        .sessionId(sessionId)
        .userId(userId)
        .build()).block();

5.2 并发安全保证

场景 行为
同一 (userId, sessionId) 的并发请求 自动串行化,不会并发写同一份状态
不同 session 的请求 完全并行,互不干扰

六、生产环境注意事项

6.1 状态存储选型

环境 推荐方案
开发/单机 JsonFileAgentStateStore(默认)
生产集群 RedisAgentStateStore(由 agentscope-extensions-redis 提供)
自定义 实现 AgentStateStore 接口

⚠️ 重要警告:默认的 JsonFileAgentStateStore 是基于本地文件的实现,仅适用于开发和单机部署。生产集群环境必须使用分布式实现。

6.2 环境变量配置

模型提供商 环境变量
DashScope DASHSCOPE_API_KEY
OpenAI OPENAI_API_KEY
Anthropic ANTHROPIC_API_KEY
Gemini GEMINI_API_KEY

七、进阶学习路径

Quick Start 完成后,官方推荐的深入方向:

主题 内容
智能体(Agent) ReActAgent 完整接口、参数、call/streamEvents/observe、人机交互、AgentStateStore 配置
Harness 架构 HarnessAgent 各项能力如何协作、状态如何流转
工作区 AGENTS.md/MEMORY.md/skills//subagents//tools.json 的目录布局与加载机制
文件系统 本机 + shell / 共享存储 / 沙箱三种部署模式

八、总结

AgentScope Java 2.0 的 Quick Start 展示了其核心设计哲学:

  1. 极简启动:一个 Builder 链式调用即可跑通完整能力栈
  2. 关注点分离:核心框架、模型扩展、工程能力三层解耦
  3. 生产就绪:无状态设计 + RuntimeContext 隔离,天然支持多租户并发
  4. 渐进式复杂度:从 agentscope-core 到 agentscope-harness,按需叠加能力

从 10 行代码的第一个 Agent,到多用户并发的生产服务,AgentScope 2.0 提供了一条平滑且完整的工程化路径

相关推荐
前端一课1 小时前
用 TRAE Work 把项目踩坑经验沉淀成「团队可复用工程规范」,新人再也不重复掉坑
前端·后端
神奇小汤圆1 小时前
一文吃透 Spring 框架:原理、实践与面试全解析
后端
站大爷IP1 小时前
Python 的切片把我坑惨了,原来 `[:]` 是浅拷贝,而 `copy.deepcopy` 才是我的救命稻草
后端
神奇小汤圆1 小时前
Java 万字长文:从零基础到高级应用的完整教程——把面向对象讲透
后端
孓最求完美1 小时前
实战经验:JT808/JT809 车联网高并发服务端性能优化指南
后端
shengjk11 小时前
深度拆解:从 LC-3 汇编到 Java/Rust,数组越界与硬件中断的底层真相
后端
Gorway1 小时前
理解 Spring 依赖注入:从构造器注入到集合与条件 Bean
java·后端
颜进强2 小时前
Claude Code - 26 效率三件套:cc-switch 切模型 · codeburn 算成本 · claude-hud 看状态
前端·后端·ai编程