news 2026/9/15 9:30:24

AgentScope Java 从零(01):2 个依赖、半天时间,跑通你的第一个 Agent

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AgentScope Java 从零(01):2 个依赖、半天时间,跑通你的第一个 Agent

本文基于AgentScope Java 2.0.1(2026-09-02 GitHub Releases 核实的当前最新版)编写,框架 JDK 基线 17+,实战工程用 JDK 21;模型为 DeepSeek(OpenAI 兼容端点,deepseek-chat)。该领域迭代极快,API 细节请以官方文档为准。

开篇:它自报家门的那一刻

你 > 你是谁 agent > 我是 **ginkgo**,公司 IT 服务台的智能助手。 我用简洁的中文帮你处理各种 IT 求助——账号问题、软件安装、 网络故障、设备报修之类的事情。不知道的我不会瞎猜。 你 > /reset [会话已重置,上下文已清空] 你 > 你好 agent > 你好!我是 ginkgo,IT 服务台助理。有什么我可以帮你的?

这是本文成稿当天,我在自己机器的命令行里和一个 Agent 的真实对话。它背后没有 Python、没有 Spring Boot、没有向量数据库——只有一个 Maven 工程、2 个依赖、五十来行 Java 代码。

这个系列不教"怎么用框架"——是把一个企业智能体从零养到上线的过程全公开:PRD、每一行代码、每一次报错、每一个架构决策。今天是第一集:2 个依赖、半天时间,命令行里跑通一个接入 DeepSeek 的真 Agent。

本篇你能做出什么

  • 命令行里和接入 DeepSeek 的 Agent 多轮对话,回复逐字流出(打字机效果)
  • 输入/reset随时清空上下文重开一局;拔掉 API Key 启动,看到的是人话提示而不是堆栈
  • 全部代码在实战仓库ginkgo-agentdev-E01分支,可对照复现(每集一个分支,下集从本集合并,历史里看得见每一步)

系列地图:「手搓企业智能体」十二集路线

这个系列要养的最终形态:一个 IT 服务台智能体——员工一句话描述问题,它完成理解、答复、建单、流转的全链路。整个系列的需求文档(PRD)公开在仓库里,十二集对应十一个功能模块(E12 是复盘):

养出什么
能对话、能干活E01-E05对话基座(本篇)→ 查工单工具 → 会话记忆 → 知识库问答 → 智能建单
像个产品E06-E08Graph 流程编排 → 角色权限 → 低置信度转人工
进企业E09-E11企业 IM 接入 → 日志追踪与成本 → Docker 上线
收官E12复盘:框架教我的事

后文提到的 E02、E09 都是这张地图上的站点(比如 E09 就是"进 IM"那一集)。本篇是第一块砖:对话基座。

14:05 建仓:pom 里只多两行

框架是 AgentScope Java——阿里 7 月 GA 的 Agent 框架(2.0.0 GA 发布于 2026-07-10,2.0.1 是首个维护版),2.0 把模型 provider 拆成了独立扩展包,所以接入 DeepSeek(走 OpenAI 兼容协议)只需要两件:

<dependency><groupId>io.agentscope</groupId><artifactId>agentscope-harness</artifactId><version>2.0.1</version></dependency><dependency><groupId>io.agentscope</groupId><artifactId>agentscope-extensions-model-openai</artifactId><version>2.0.1</version></dependency>

一句话结论:harness 是整车(ReAct 循环、记忆、权限都在里面),openai 扩展包是发动机适配器——2 个依赖就是全部,没有 starter、没有父 pom 继承。选题时我标题草稿写的是"3 个依赖",实测只有 2 个,标题按实改——这个系列的规矩是数字必须真实。

14:20 第一个报错:不是代码的错,是 JDK 的

mvn compile迎面一句:无效的目标发行版:21

原因没任何技术含量:本机默认 JDK 停在 17,而工程 pom 写的是 21。官方 README 明确框架基线是 JDK 17+,所以 17 本来也能用——是我自己的工程骨架定了 21,那就指过去:

JAVA_HOME=$(/usr/libexec/java_home-v21)mvn compile

一句话结论:报错先读全半句再慌——"无效的目标发行版"从来不是框架问题,是 javac 版本够不着 target。这个坑不值钱,但每个跟练的人都会踩到,如实记下。

14:35 第二个报错:Maven 仓库里躺着两个坏 jar

编译再次失败,这次报错长这样:zip END header not found——传递依赖里的opentelemetry-instrumentation-apisqlite-jdbc两个 jar 下载损坏,本地仓库里躺着 0 字节残骸。这个报错跟代码无关、跟框架也无关,纯属本地仓库事故,但它出现在编译期,会伪装成依赖问题精准浪费你十分钟。

修法一句话:删掉本地仓库里这两个 artifact 目录,mvn compile重新下载,编译通过。

一句话结论:Maven 对"文件存在"的信任是盲目的——它只认文件在不在,不认文件坏没坏;遇到 zip 类报错,删了重下是唯一正解。

15:00 五十行代码:Agent 跑起来

核心代码三段。第一段,模型与 Agent 构建(完整代码见仓库,此处只贴骨架):

OpenAIChatModelmodel=OpenAIChatModel.builder().apiKey(config.apiKey()).baseUrl(config.baseUrl())// https://api.deepseek.com.modelName(config.modelName())// deepseek-chat.stream(true).build();HarnessAgentagent=HarnessAgent.builder().name("ginkgo-service-desk").sysPrompt("你是企业 IT 服务台智能体 ginkgo……").model(model).workspace(Path.of(".agentscope","workspace")).build();

一句话结论:HarnessAgent是框架给的现成整车——Builder 填完参数,ReAct 循环、记忆、状态落盘已经全在里面;workspace指定后,会话状态自动按(userId, sessionId)隔离落盘。

第二段,对话循环里的流式输出:

agent.streamEvents(newUserMessage(input),ctx).doOnNext(event->{if(event.getType()==AgentEventType.TEXT_BLOCK_DELTA){System.out.print(((TextBlockDeltaEvent)event).getDelta());}}).blockLast();

一句话结论:AgentScope 的流式不是 token 流而是事件流——文本增量只是 31 种事件之一,后面做工具调用直播、人工审批时,消费的是同一套Flux<AgentEvent>

第三段,会话重置——没有专门 API,就是换一个新的sessionId重建RuntimeContext。多轮上下文能自动保持,靠的也是同一个RuntimeContext反复传入。

配置外置单独说:API Key 走"环境变量 >config/application.properties> 内置默认"三级优先,真实配置文件加进.gitignore。拔掉 Key 启动,输出的是操作指引而非堆栈——这是 PRD 里写死的验收标准,也是给跟练读者的温柔:

[启动失败] 未找到模型 API Key,Agent 无法启动。请任选一种方式配置: 1. 设置环境变量 DEEPSEEK_API_KEY 2. 复制 config/application.properties.example 为 config/application.properties,填写 ginkgo.model.api-key

15:40 一个差点背上的 Spring Boot

代码跑到一半,我停下来问了自己一个问题:“是不是直接用 Spring Boot 更方便一点?”——配置体系白捡、DI 现成、读者也熟,反正后面 IM 接入也得要 HTTP。认真盘算之后的决策是不引,留到 E09——理由三条:

  1. 本集验证入口是命令行,Spring Boot 的 DI/Web 优势在 CLI 场景几乎为零,纯属先背上;
  2. 标题承诺"2 个依赖",引入 starter 后数字就站不住了;
  3. 真正需要 HTTP 的地方是 E09 的 IM 回调(钉钉/企微/飞书的 webhook + 签名鉴权)——需求驱动框架进场,届时无论手搓@Bean还是接官方 starter,都是小工程,迁移成本近零。

这个决策连同依据写进了 PRD 的决策记录(第 9 节,编号 Q6)。这个系列里每个架构选择都会这样留痕——你可以拿着 PRD 对照代码,验证"文章里说的是不是真做了"。

本集判断

跑通第一天的真实感受:AgentScope Java 的"整车感"从第一行代码就成立了streamEvents()一套事件流把"打字机"和未来的"工具直播、审批流"统一了;RuntimeContext强制传入(userId, sessionId),把"多用户多会话隔离"从第一天就焊死在 API 上——不是后期补丁,是入口设计。

也要说实话:今天只摸到了它 10% 的面——工具注册、记忆策略、权限引擎都还没动,文档站的 API 细节比 README 散落,下一集的工具注册就是第一个要硬核的地方。

下集预告:给它装上第一个工具

E02 做工单查询:让 Agent 能回答"我的工单 1024 什么状态"。这是它从"会聊天"到"能干活"的第一步——也是上一篇对比文里我特意标注"以官方文档为准"的 Toolkit 注册 API 的实战兑现,版本差异如实记录。

下集见。

系列导航

实战仓库:本集全部代码已开源,Gitee:lambert-ginkgo/ginkgo-agent,对应dev-E01分支(每集一个分支,下集从本集合并,历史里看得见每一步);PRD 在仓库docs/下,欢迎对照代码验证"文章说的是不是真做了"。公众号后台回复「手搓」获取系列合集。

  • 同一个 Agent,用 Spring AI 2.0 和 AgentScope Java 各实现一遍:差的不止代码量——系列前传:零件 vs 整车的五维对照
  • AgentScope Java 2.0 深度拆解:阿里为什么用 Java 重写 Agent 框架——ReAct 内核与六大生产级能力
  • 测不住的 Agent 上不了线:像写单测一样给 Agent 写 Evals——本系列 E10 可观测的预习课
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 9:24:43

太原网站建设优化避坑速查手册:3步搞定备案与报价

太原网站建设优化避坑速查手册:3步搞定备案与报价 很多太原的老板找我聊建站,问的第一句话往往不是“多少钱”,而是“备案到底怎么弄?”这真不是矫情。我见过太多案例,网站代码写得再漂亮,UI设计得再高大上,卡在ICP备案这一关,上线日期一拖再拖,甚至因为资料不全被驳回三次,最后项目烂尾。…

作者头像 李华
网站建设 2026/9/15 9:23:24

Python实现中文Excel解释器:降低自动化门槛

1. 项目背景与核心价值在数据处理领域&#xff0c;Excel自动化一直是个高频需求。传统VBA方案虽然成熟&#xff0c;但学习曲线陡峭且对中文用户不够友好。我最近用Python实现了一个支持中文脚本语法的Excel解释器&#xff0c;让非技术背景的用户也能用自然语言风格指令操作表格…

作者头像 李华
网站建设 2026/9/15 9:21:37

AmberTools25:分子模拟性能提升与跨学科应用

1. AmberTools25&#xff1a;分子模拟领域的重大突破作为一名从事计算化学研究十余年的从业者&#xff0c;我见证了分子模拟工具从简陋命令行到如今功能强大的完整套件的演进历程。AmberTools作为分子动力学模拟领域的标杆工具集&#xff0c;其最新发布的25版本带来了多项令人振…

作者头像 李华
网站建设 2026/9/15 9:20:51

大模型API稳定调用之道:OpenAI兼容层与多后端路由实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 9:19:00

2026最新太原网站建设优化避坑指南:流量翻倍实操

2026最新太原网站建设优化避坑指南:流量翻倍实操 网站做好了没人访问,这是太原本地企业最头疼的事。很多老板觉得花了钱做了个漂亮官网,结果百度搜不到,谷歌排名垫底,每天UV不到10个,这种尴尬在2026年的太原建站市场依然普遍存在。…

作者头像 李华
网站建设 2026/9/15 9:17:04

【2016-09-23】linux apt-get 命令代理简单笔记

[历史归档] 本文原发布于 cstriker1407.info 个人博客&#xff0c;内容为历史存档&#xff0c;仅供参考。 发布时间&#xff1a; 2016-09-23 &#xff5c; 标题&#xff1a;linux apt-get 命令代理简单笔记 &#xff5c; 分类&#xff1a; 操作系统 / linux &#xff5c; …

作者头像 李华