Skip to content

Releases

v2.0.0

Choose a tag to compare

@sinabs sinabs released this 06 Nov 04:02
2cb1e12

Yoke 2.0.0

Agent 从 ReActAgent 换成 HarnessAgent,会话历史放进 Redis:重启不丢,多个副本共享。

不兼容变更

  • 必须有 Redis。 连接串写在 yoke.redis.uri(prod 读环境变量 YOKE_REDIS_URI,没有默认值),启动期校验格式并 ping,连不上启动即失败,报错里的连接串已脱敏。本地用 docker compose up -d 拉起。
  • 会话按 (userId, sessionId) 寻址,两个 ID 都受 @SafeId 约束(字母、数字、_.-,1~64 位,不能全是点)。
  • 模型能用的工具大幅收紧:文件系统、shell、联网、子 Agent 在装配期关掉;web_fetch、web_search 和读类的记忆与会话工具(memory_get、memory_search、session_history、session_list、session_search)被拒绝,避免模型读到别的用户的数据;工作区里的 tools.json 不再生效。
  • POST /api/chat/stream 的请求体里,content 是内容块形式(包括全是文本块、带图片)时返回 400,目前只支持字符串。

新功能

  • HarnessAgentFactory 每请求新建 HarnessAgent,用完关闭(HarnessAgent.Builder 不能共享,连续 build() 中间件会越积越多)。
  • Compaction:yoke.compaction.triggerMessages / keepMessages 按条数触发压缩,非法值回落到默认;压缩后的摘要放在 context 的第一条消息里。
  • LoggingMiddleware 记录每次调用的耗时,不记录工具参数与输出。
  • 启动时在工作区创建默认 AGENTS.md,消除 AgentScope 的启动警告。
  • 根目录 docker-compose.yml,集成测试用 Testcontainers 拉起真实 Redis。

修复

  • Agent 在结果交给调用方之后才关闭,关闭失败只记日志,不会把已经成功的对话变成 500,流式接口也不会在 RUN_FINISHED 之后再追加 RUN_ERROR。

其他

  • 版本号 1.0.1 → 2.0.0。
  • 清理 IDEA 警告,README 中英同步。

v1.0.1

Choose a tag to compare

@sinabs sinabs released this 04 Nov 09:54
9af73c2

Yoke 1.0.1

流式接口改用 AG-UI 标准协议:SSE 只做传输,事件契约交给官方 agentscope-extensions-agui(只引库,不引 starter)。

不兼容变更

  • POST /api/chat/stream 的请求体改为标准 AG-UI RunAgentInput(threadId 即会话 ID,runId 必填),必须是 application/json;旧的 {"sessionId", "message"} 请求体和私有事件(textDelta、toolCall、toolResult、hint、done、error)已移除,没有并存。
  • 响应事件换成 AG-UI 事件:RUN_STARTED、TEXT_MESSAGE_*、TOOL_CALL_*、CUSTOM(token_usage、hint)、RUN_FINISHED 或 RUN_ERROR。没有 done 事件,完整回复由客户端拼接 TEXT_MESSAGE_CONTENT。
  • POST /api/chat 的 sessionId 改用与 threadId 相同的规则校验(字母、数字、_.-,1~64 位,不能全是点),如 user:42 这类值现在返回 400;空白仍视同未传。

新功能

  • AguiStreamCodec 解析并校验请求体,只采用最后一条 user 消息,丢弃客户端的 tools 等字段,适配器上设 AGENT_ONLY,客户端不能给 Agent 加工具或改写历史。
  • HintEventConverter 把框架提示转成 CUSTOM name=hint,用量走 CUSTOM name=token_usage。
  • 错误通过 RUN_ERROR 体现,HTTP 状态码仍是 200,Agent 创建失败时也会先补 RUN_STARTED。

其他

  • 版本号 1.0.0 → 1.0.1。
  • 删除 ChatEvent、EventCodec;ArchUnit 规则放行 codec 与 config 中的 AG-UI 类型。

v1.0.0

Choose a tag to compare

@sinabs sinabs released this 02 Nov 13:54
3021f30

Yoke 1.0.0

首个正式版本:Spring Boot 4.1 + AgentScope Java 2.0 的单模块 Agent 服务,支持同步与 SSE 流式对话,内置天气工具。

新功能

  • SSE 流式对话 POST /api/chat/stream:边推理边推送事件(textDelta、toolCall、toolResult、done、error)。框架吐出的工具参数碎片在服务端攒齐;模型出错时发 error 事件而不是断连。
  • 天气工具 get_weather:通过开源的 Open-Meteo 查询当前天气,无需密钥。
  • 同步对话 POST /api/chat:一次返回整段回复。
  • 本地环境接火山方舟(OpenAI 兼容协议),密钥读环境变量 ARK_API_KEY。

修复与加固

  • 流式响应补上 charset=UTF-8,解决 IDEA 等客户端把中文显示成乱码的问题。
  • 天气工具:上游响应限长读取(最多 64KB);上游缺必须字段时提示服务不可用,不再用 0 编造天气;很小的经纬度不再被拼成科学计数法。

其他

  • 对外事件定义在 model.ChatEvent(sealed),框架类型只允许出现在 codec 和 middleware,由 ArchUnit 测试守着。
  • 代码风格统一:空白判断用 Hutool StrUtil,判空用 Objects.isNull/nonNull,默认值用 Optional。
  • 新增 src/test/java/com/yoke/curl/01-sse-streaming.http,在 IDEA 里点绿色三角即可运行示例请求。

注意

  • Open-Meteo 免费接口仅限非商业使用,商用需换付费版或别的数据源。
  • 同一会话的并发请求不会被串行化,由调用方保证同一会话同一时间只发一个请求。

完整变更见 #1