Files
TJWaterAgent/.opencode/skills/examples.md
T

5.2 KiB
Raw Blame History

示例(基于 opencode Agent chat/stream 工具调用链)

示例 1:前端发起对话,opencode agent 触发工具调用

用户意图:查询设备 170490 在时间范围内的 monitored_value

前端调用 POST /api/v1/agent/chat/stream

{
  "message": "请查询设备170490在最近24小时的monitored_value历史数据",
  "session_id": "agent-demo-001"
}

请求头至少包含(由前端传入):

  • Authorization: Bearer <token>
  • x-project-id: <project-id>

服务端内部行为:

  • 持续通过 SSE progress 输出处理阶段,例如“正在规划分析步骤”“正在调用后端数据查询”
  • opencode agent 选择工具 dynamic_http_call
  • 工具参数示例:
{
  "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"
  }
}

示例 2opencode agent 多步规划 + 多次工具调用

用户消息:

  • “先查这个设备历史数据,再给我异常点摘要。”

典型链路:

  • 第一步工具调用:查询历史数据接口。
  • 第二步(可选)工具调用:查询补充数据接口。
  • opencode agent 汇总工具结果,持续通过 SSE 输出 progresstoken,最终返回 done

progress 示例:

{
  "session_id": "agent-demo-001",
  "id": "tool-dynamic-http",
  "phase": "tool",
  "status": "running",
  "title": "正在调用后端数据查询"
}

示例 3:前端工具 — 定位要素

用户消息:

  • "帮我找到管道 P-001 和 P-002"

opencode agent 调用工具 locate_features

{
  "ids": ["P-001", "P-002"],
  "feature_type": "pipe"
}

前端收到 SSE 事件后缩放地图并高亮管道。opencode agent 回复文字:"已在地图上定位到管道 P-001 和 P-002。"

示例 4:前端工具 — 对话内图表

用户消息:

  • "展示节点 J-001 最近一天的压力变化曲线"

典型链路:

  1. opencode agent 先调用 dynamic_http_call 查询数据
  2. 拿到数据后,调用 show_chart 将处理好的数据传给前端渲染

第一步 — opencode agent 调用 dynamic_http_call

{
  "path": "/api/v1/composite/element-simulation",
  "method": "GET",
  "arguments": {
    "feature_infos": "[\"J-001\", \"node\"]",
    "start_time": "2026-03-29T00:00:00Z",
    "end_time": "2026-03-30T00:00:00Z"
  }
}

第二步 — opencode agent 处理数据后调用 show_chart

{
  "title": "节点 J-001 压力变化",
  "chart_type": "line",
  "x_data": ["03-29 00:00", "03-29 01:00", "03-29 02:00", "..."],
  "series": [
    {
      "name": "J-001 压力",
      "data": [32.5, 31.8, 30.2, "..."]
    }
  ],
  "y_axis_name": "压力 (m)"
}

前端直接用 AI 提供的数据渲染 ECharts 图表,不再请求后端。

示例 5:前端工具 — 查看 SCADA 监测面板

用户消息:

  • "我想看看 J-001 的监测数据"

opencode agent 调用工具 view_scada

{
  "device_ids": ["J-001"],
  "start_time": "2026-03-29T00:00:00Z",
  "end_time": "2026-03-30T00:00:00Z"
}

前端打开 SCADA 监测面板,展示该节点的历史监测曲线。

示例 6:记住用户长期偏好

用户消息:

  • "以后回答尽量简洁,先给结论再解释。"

opencode agent 调用工具 memory_manager

{
  "action": "add",
  "reason": "用户明确给出了长期有效的回答风格偏好,后续会话也应遵守。",
  "scope": "user",
  "content": "用户偏好先给结论、再补必要解释,整体风格尽量简洁。"
}

示例 7:检索历史案例而不是误写入 memory

用户消息:

  • "我们之前是不是分析过类似的爆管定位问题?"

opencode agent 调用工具 session_search

{
  "reason": "用户在询问过往会话中的类似案例,应先检索历史 transcript 而不是写入新的 memory。",
  "query": "爆管定位 类似案例",
  "max_results": 5
}

示例 8:沉淀可复用 workflow 模式

用户消息:

  • "这套瓶颈分析流程之后可以复用。"

opencode agent 调用工具 skill_manager

{
  "action": "append_pattern",
  "reason": "本轮已验证一套稳定可复用的瓶颈分析 workflow,适合沉淀到已有 skill。",
  "skill_path": "workflow/bottleneck-analysis",
  "pattern": "当瓶颈分析依赖大体量属性数据和模拟结果时,先用 dynamic_http_call 获取 preview,再用 fetch_result_ref 回读完整数据后再做合并与排序。"
}

示例 9:给单个 workflow skill 写入可复用脚本

当某个 workflow 的本地 Python 处理逻辑已经稳定、未来同类任务会重复使用时,可写入该 skill 自己的 scripts/*.py

{
  "action": "write_script",
  "reason": "本轮已验证瓶颈分析中的合并与排序脚本,后续同类 workflow 可直接复用。",
  "skill_path": "workflow/bottleneck-analysis",
  "file_path": "scripts/merge_and_rank.py",
  "content": "import json\n\n\ndef rank_links(rows):\n    return sorted(rows, key=lambda row: row['composite_score'], reverse=True)\n"
}

脚本应只归属当前 skill_path,不要写到 data/ 或其他 skill 目录。