3.5 KiB
3.5 KiB
API Skills 使用 Runbook(工具调用链)
1) 总体原则
- Skills 负责“告诉模型可做什么”。
chat/stream内部启动 opencode 会话,并注册工具dynamic_http_call。- opencode agent 通过工具调用后端能力,不直接发 HTTP。
- TJWaterAgent 执行器负责“代表当前用户调真实后端 API”(动态路径,无白名单)。
2) 请求入口(前端)
POST /api/v1/agent/chat/stream(唯一前端入口)
不提供 /execute 对外调用路径,统一通过 chat/stream + 工具调用链执行。
请求体:
{
"message": "帮我分析当前管网中的水力瓶颈管道,并给出改造建议",
"session_id": "agent-demo-001"
}
SSE 事件:
| event | 用途 | 关键字段 |
|---|---|---|
progress |
展示 Agent 处理过程、规划和工具进度 | session_id, id, phase, status, title, detail |
token |
渲染面向用户的最终回答文本 | session_id, content |
tool_call |
驱动前端地图/面板/图表动作 | session_id, tool, params |
done |
当前轮对话结束 | session_id |
error |
当前轮失败 | session_id, message, detail |
progress.status 取值为 running、completed、error;前端应按相同 id 覆盖更新同一条进度,而不是重复追加。
3) 工具参数约定(opencode agent 调用工具时)
{
"path": "/api/v1/scada/by-ids-field-time-range",
"method": "GET",
"arguments": {
"device_ids": "170490",
"field": "monitored_value",
"start_time": "2026-03-29T07:57:47.338Z",
"end_time": "2026-03-30T07:57:47.338Z"
}
}
说明(工具 dynamic_http_call):
path必须以/开头。method支持:GET/POST/PUT/PATCH/DELETE。arguments会编码为 query 参数(列表会转为逗号拼接)。
4) 用户上下文注入(后端执行阶段)
Authorization(Bearer Token)x-project-id
执行器会附带 x-trace-id 用于链路排查(可透传或自动生成)。
5) 排障要点
400:检查工具参数path/method/arguments格式。401/403:检查 token 与项目权限。404:检查path是否正确。422:检查arguments字段名与类型。5xx:记录trace_id,结合后端日志排查。
6) 前端工具调用链
前端工具(locate_features, view_history, view_scada, show_chart)的调用链与 dynamic_http_call 不同:
用户消息 → opencode agent → tool calling → 调用前端工具 (如 locate_features)
↓
tool handler:
1) 推送 SSE tool_call 事件到前端
2) 返回简短确认给 opencode agent("已定位到管道")
↓
前端同时收到:
- SSE event: progress → 展示规划/工具执行/完成状态
- SSE event: tool_call → 前端执行操作(定位地图/打开面板/渲染图表)
- SSE event: token → 渲染 opencode agent 文字回复
关键区别:
dynamic_http_call:TJWaterAgent 代理 HTTP 请求,结果返回给 opencode agent 做后续分析。- 前端工具:TJWaterAgent 仅推送 SSE 事件,前端直接执行,结果不返回 opencode agent。
show_chart:opencode agent 先通过dynamic_http_call查询数据,处理为 x_data + series 格式后调用show_chart,前端直接渲染图表,不再请求后端。