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 提供了一条平滑且完整的工程化路径。

相关推荐
行百里er5 小时前
Redis 完结篇——Redis 热点问题在 Spring Boot 项目中实战
redis·后端
高频因子挖掘机6 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
孟健6 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
码事漫谈7 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端
迪飞特科技7 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑7 小时前
@JsonInclude注解使用
spring boot·后端·spring
IT_陈寒8 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端
网易云信8 小时前
大模型能上岗做销售吗?我们让 12 款国产模型交了 420 份作业
前端·后端
CCblandy8 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
蜗牛互联网8 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python