🚀 第一次使用:快速开始 → 新人必读
📚 查功能、配置和接口:功能与配置全量参考 · 生产接口使用手册 · 部署手册
🛡️ 评估生产边界:企业级 AI 智能体能力与运维边界
我也是 AgentScope Java 的 PR 贡献者:PR #2546
已于 2026 年 9 月 21 日合并到 main,修复 HITL 人工拒绝工具调用时缺失工具结果事件的问题,并支持自定义拒绝原因。
customer-work 把典型客服流程落成一套可运行的 Java Agent 系统:从接入与身份校验、会话恢复、知识与工具调用,
到退款审批、转人工工单、CSAT,再到模型发布、评测门禁、FinOps、SLO 与多租户治理。它既能作为可运行的
客服产品参考实现,也能只引入 customer-work-starter,把 Agent 基础设施嵌入已有 Spring Boot 应用;
默认启动成功不等于已经完成真实业务、身份、数据主权与生产环境集成。
2.4.0,JDK 17、Spring Boot 3.2.5、AgentScope Java 2.0.3;默认模型为
阿里云百炼,同时已接入 OpenAI、Anthropic、Gemini 与 Ollama 模型扩展。tool.backend.* SPI 接入真实系统;用法见全量参考 §6.9。tenant_id 行级隔离、角色数据范围、主体/租户配额、配置版本、灰度发布、
访问 epoch 撤权、ModelOps / EvalOps / FinOps 与审计链路均已有代码和自动化测试。| 标记 | 含义 |
|---|---|
| ✅ 已交付 | 源码、接口/迁移契约和自动化测试均已落地 |
| 🟡 可选能力 | 已实现,但默认关闭或需要 MySQL、Redis、Nacos、模型凭据等外部条件 |
| 🧪 有限实现 | 主链路可用,但存在文档明确列出的能力或生产边界 |
| ⏳ 规划中 | 当前没有可直接启用的完整实现,Roadmap 只描述目标与验收出口 |
“企业级 / 生产级”描述的是代码中的治理目标与交付能力,不代表任意部署已经自动通过生产验收。 真实 Nacos 往返、多 Pod ACK、生产模型凭据、网络出站策略和浏览器端到端验证仍需在目标环境留证。
| 术语 | 本项目中的含义 |
|---|---|
| 主体(subject) | 已验签用户、匿名 IP、API Key 或后台用户,是配额、记忆与审计的身份边界 |
| access epoch | 租户 / 用户访问版本号;冻结、退租或撤权时递增,让旧 JWT / WebSocket 快照失效 |
| fencing | 发布 Worker 的单调令牌;旧 Worker 即使恢复,也不能覆盖新 Worker 已发布的配置 |
| contentHash / 缓存代际 | 配置内容指纹及其对应缓存版本,用来拒绝错配 ACK 和旧请求回写 |
| Outbox | 业务事务内先落事件,再异步至少一次投递;消费者必须按稳定事件 ID 幂等 |
| SecretRef | 只保存凭据引用和版本,不在业务表、接口或配置载荷中回显明文 |
| AG-UI / A2A | 前者是 Agent 与 UI 的事件协议;后者是 Agent 之间的发现与调用协议,两者不等同于模型 API |
| 模块 | 默认端口 | 职责 | 主要依赖 |
|---|---|---|---|
customer-work-starter |
— | 可复用 Agent 基础设施:模型、会话、记忆、RAG、工具 SPI、治理中间件、审批与工单 | AgentScope Java、Spring Boot AutoConfiguration |
customer-work-app-server |
8080 | 客服运行面:HTTP / SSE / WebSocket、用户工单与健康检查 | customer-work-starter、MySQL;Redis / 对象存储按能力启用 |
customer-channel |
8081 | 协议与渠道适配:chat-completions、AG-UI、Studio、钉钉 / 飞书 / 企业微信;另含钉钉与微信公众号生产接入 | customer-work-starter、渠道连接器 |
customer-admin-server |
8082 | 运营控制面:模型、Agent、MCP、评测、发布、账单、坐席工作台与 AI 编码助手;可选只读 Git 仓库检索 MCP 端点(admin.gittools.enabled,默认关闭) |
customer-work-starter、独立 customer_admin 库 |
customer-work-gateway |
8888 | 可选统一入口,通过 Nacos 发现并路由 app / admin | Spring Cloud Gateway、Nacos |
customer-admin-web |
5174 | Vue 3 运营后台 | 8082 API |
customer-work-app |
5175 | Vue 3 用户 H5:登录、聊天、工单、CSAT | 8080 API / WebSocket |
flowchart LR
subgraph CLIENT["客户端与渠道"]
H5["用户 H5 · 5175"]
OPEN["HTTP / SSE 调用方"]
IM["IM 渠道"]
ADMINWEB["运营后台 · 5174"]
end
subgraph RUNTIME["运行面"]
GW["可选网关 · 8888"]
APP["app-server · 8080"]
CHANNEL["channel · 8081"]
STARTER["starter<br/>Agent 基础设施"]
end
subgraph CONTROL["控制面"]
ADMIN["admin-server · 8082"]
end
subgraph STATE["状态与配置"]
CWDB[("agent_scope_customer_work<br/>业务表")]
ADMINDB[("customer_admin<br/>管理表")]
REDIS[("Redis")]
MINIO[("MinIO")]
NACOS[("Nacos")]
end
H5 --> APP
OPEN --> GW --> APP
IM --> CHANNEL
ADMINWEB --> ADMIN
APP --> STARTER
CHANNEL --> STARTER
ADMIN --> STARTER
APP --> CWDB & REDIS & MINIO
GW -. "可选 admin 路由" .-> ADMIN
ADMIN --> ADMINDB
ADMIN -. "CustomerWorkFacade 受控访问" .-> CWDB
ADMIN --> NACOS
NACOS -. "租户专属运行时配置" .-> APP
docker-compose.yml 只编排 app-server 与 Redis、MySQL、MinIO、Nacos、XXL-JOB、PaddleOCR,
不包含 admin-server、channel、gateway、两个前端和监控栈。CustomerWorkFacade,不能直接复用管理库 Mapper。应用默认暴露 Prometheus 指标;显式开启 OTel 后可导出 agent / model / tool / HTTP span。
独立监控栈 提供 Prometheus、Grafana、Alertmanager、Tempo 与钉钉告警,
启动前需先运行业务服务并配置监控栈自己的 .env。详细配置见
全量参考 §6.13c。
查看可编辑 SVG · 查看高清 PNG(4096 × 3072)
图示按 2026-09-16 的 efc2f159 源码快照绘制。蓝色箭头表示请求与调用,橙色表示运行配置,绿色表示
结果与反馈;虚线框表示可选能力或独立入口。五栏按职责组织,具体入口之间的依赖关系见上一节模块图。
ChatTurnService 复用单一客服 ReActAgent;/consult 多 Agent、
Harness、渠道和网关分别按入口或配置启用。图中关键实现:ChatTurnService、
CustomerServiceAgentFactory、
AgentGovernanceAssembler、
PendingApprovalService、
RuntimePublishWorker。
rsvg-convert --width 4096 --height 3072 \
--output docs/assets/architecture-overview.png docs/assets/architecture-overview.svg
两份图稿一并更新,并检查中文缺字、文字越界、连线和源码边界。
H5 的逐消息主链路是单一客服 ReActAgent。多 Agent 编排是独立能力,不在 WebSocket 每条消息中隐式执行。
```mermaid
flowchart TD
H5["H5 Chat.vue"] -->|"创建会话"| SESSION["POST /api/customer/user/sessions
创建 AI_SERVING 工单"]
H5 -->|"WS /ws/user?token=JWT"| UWS["UserChatWebSocketHandler
JWT、租户、accessEpoch 校验"]
UWS -->|"chat 帧"| DISPATCH["ChatDispatchService
归属校验、主体配额、用户消息落库"]
DISPATCH --> KEYWORD{"命中转人工关键词?"}
KEYWORD -->|是| HANDOFF["TicketService.requestHandoff<br/>AI_SERVING → WAITING_AGENT"]
KEYWORD -->|否| STATUS{"工单状态"}
STATUS -->|AI_SERVING| TURN["ChatTurnService.stream<br/>统一对话编排"]
TURN --> CHAT["CustomerServiceService.chatStream"]
STATUS -->|PROCESSING / ON_HOLD| AGENTWS["转发给已受理坐席 /ws/agent"]
STATUS -->|WAITING_AGENT / WAITING_CONFIRM| NOTICE["返回排队或待确认提示"]
CHAT --> CACHE{"语义缓存命中?<br/>安全意图 + 租户分区 + 配置代际"}
CACHE -->|命中| REFILTER["缓存答案切片<br/>重新执行出站敏感词过滤"]
CACHE -->|未命中| FACTORY["CustomerServiceAgentFactory<br/>构建主 ReActAgent"]
FACTORY --> GOV["AgentGovernanceA
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|