DSH Java Native Plugin 场景案例:社区自习室。用户通过 AI 自习管家完成「查座位 → 挑督导 → 订座下单 → 订座单查询 → 经营统计」全流程,业务应用以 Spring Boot 提供页面与 REST,插件以 JAVA_NATIVE 方式把 5 个工具注册进 DSH Agent。
| 模块 | 内容 |
|---|---|
| 座位 | 开放式明档座 ¥25/天 · 静音隔间座 ¥38/天 · 单人卡座 ¥49/天 · 双人研讨间 ¥88/天 · VIP 独立自习室 ¥128/天 |
| 值班管理员 | A01 学姐·安然(考研规划 4.9)· A02 馆员·老纪(文献检索 4.8)· A03 教练·大力(专注力训练 4.7),陪学督导 30 元/天,可选自助自习 |
| 订座单号 | SD1001 起,状态流转:已订座 → 使用中 → 已完成 |
| 规则 | 连订 7 天 9 折;考试月(6月/12月)提前 5 天放号;免费 WiFi/茶水/充电;23:00 闭馆可申请延时 |
| 工具 | 说明 | 对应 REST |
|---|---|---|
plugin__study-ah__seat_list |
座位列表(价格/配置/优惠规则) | GET /api/seats |
plugin__study-ah__admin_list |
值班管理员列表(专长/评分/在督量) | GET /api/admins |
plugin__study-ah__book |
座位预订(owner/phone/seat/days 必填,adminId/date 可选) | POST /api/book |
plugin__study-ah__order_info |
订座单查询(SD1001 格式单号) | GET /api/order?orderId= |
plugin__study-ah__stats |
运营统计(单量/状态分布/收入/分座位分管理员) | GET /api/stats |
study-ah/
├── pom.xml # 父工程(study-room-ah)
├── ah-app/ # 业务应用(Spring Boot,端口 18132)
│ ├── pom.xml # artifactId: ah-app
│ └── src/main/
│ ├── java/cn/xiaofuge/ah/app/
│ │ ├── StudyRoomApplication.java
│ │ ├── AhStore.java # 数据中心:座位/管理员/订座单/统计
│ │ ├── AhController.java # REST 接口
│ │ └── AssistantController.java# /api/assistant/stream SSE 代理 → DSH
│ └── resources/
│ ├── application.yml # 端口 18132 / agent-id study-ah
│ └── static/index.html # 📚 蓝色系对话页面
├── ah-plugin/ # DSH 插件(JAVA_NATIVE)
│ ├── pom.xml # artifactId: ah-plugin
│ └── src/main/
│ ├── java/cn/xiaofuge/ah/plugin/StudyPlugin.java # 5 工具
│ └── resources/META-INF/
│ ├── plugin.yaml # id: study-ah
│ └── services/cn.xiaofuge.deepseek.harness.domain.spi.JavaHarnessPlugin
├── study_ah_e2e.py # E2E 验证脚本(5 用例)
└── docs/images/ # 截图
# 1. 构建并启动业务应用
mvn clean package -DskipTests
java -jar ah-app/target/ah-app-1.0.0-SNAPSHOT.jar --server.port=18132
# 2. 安装并激活插件(DSH standalone 运行于 8090)
cp ah-plugin/target/ah-plugin-1.0.0-SNAPSHOT.jar ~/.dsh/standalone/plugins/study-ah.jar
curl -X POST http://127.0.0.1:8090/api/harness/plugins/install \
-H 'Content-Type: application/json' \
-d '{"pluginId":"study-ah","displayName":"静光社区自习室","pluginVersion":"1.0.0","runtimeType":"JAVA_NATIVE","sourcePath":"/Users/<you>/.dsh/standalone/plugins/study-ah.jar","entrypoint":"cn.xiaofuge.ah.plugin.StudyPlugin"}'
curl -X POST http://127.0.0.1:8090/api/harness/plugins/activate \
-H 'Content-Type: application/json' -d '{"pluginId":"study-ah"}'
# 3. 打开页面 http://127.0.0.1:18132 与 AI 管家对话
# 或运行 E2E
python3 study_ah_e2e.py[PASS] T1 座位列表(25/38/49/88/128)
[PASS] T2 管理员列表(安然/老纪/大力)
[PASS] T3 订座下单(SD1006/SD1007,隔间座 × 7 天 9 折 ¥239.4)
[PASS] T4 订座单查询(SD1002 VIP 室)
[PASS] T5 运营统计(总单量/收入/分布)
===== study-ah E2E: 5/5 PASS =====
- JAVA_NATIVE 插件:
AbstractHarnessPlugin+ 内部AbstractTool子类,run()返回CompletableFuture<ToolExecutionResult>,HTTP 调用业务应用 REST。 - 系统提示注入:
configure()中registerSystemPrompt写入报价/确认/单号播报与自习规范;registerHook(PRE_TOOL_USE)做调用审计。 - SSE 透传:
AssistantController把页面消息代理到 DSH/api/agent/stream(StreamingResponseBody,上游超时 170s,MVC async 180s)。 - SSE 事件格式:DSH 输出
event:meta/step_break/tool_result/chunk/finish/done+data:{...};chunk 载荷为{"content":"..."},前端按event:分段解析。 - 数值容错:Controller 对
days做Number/String双格式解析,兼容 LLM 传"7"字符串。
- deepseek-harness-java-types 0.1.5(provided)
- Spring Boot 3.2.5 / Java 17
MIT




