iT邦幫忙

2026 iThome 鐵人賽

DAY 29
0
AI 自動化

AaaS from Scratch: 從一次性定義,到規模化分析系列 第 29 篇

[Day 29] Build Workflow from Chat

  • 分享至 

  • xImage
  •  

前面幾天,我們已經有:

  • Saved Analysis
  • Workflow
  • Parallel Execution
  • Performance Measurement
  • Rebalancing

但要建立 Workflow,還是要自己進 Workflow page:

  • 把 Analysis 拉進 canvas
  • 建 Batch
  • 建 Report
  • 設 datasource
  • Save
  • Run

這些資訊其實很多都可以從 user intent 推出來。

所以這次把 Workflow 接回 Chat。

User 可以直接說:

幫我做一份 Monday Report。Users 放 Median Session Length 和 Daily Active Users,Content 放 Views per YouTube Category 和 Average Views by Publish Hour,Business 放 Monthly Bookstore Revenue。Session Length 用 events_enterprise,然後直接跑。

Agent 會自己:

  1. 找到對應的 saved Analysis
  2. 組成 Workflow
  3. 設定 datasource
  4. 建立 sections / report
  5. Run Workflow
  6. 把結果放回 Chat

這次實際跑了 5 個 Analysis,分成 3 個 sections,最後 5 / 5 都完成,整個 Workflow 花了 21 秒。

Agent 不直接操作 Nodes 和 Edges

我沒有讓 Agent 自己產生 canvas 座標或 edges。

Agent 使用的是比較接近 user intent 的結構:

Workflow
├── Users
│   ├── Median Session Length
│   └── Daily Active Users
├── Content
│   ├── Views per YouTube Category
│   └── Average Views by Publish Hour
└── Business
    └── Monthly Bookstore Revenue

Agent 只需要描述:

  • Workflow title
  • sections
  • 每個 section 裡有哪些 Analysis
  • datasource mapping
  • 哪些 Analysis 要 run_first
  • sandbox 數量
  • Report title

真正的 nodes、edges 和 layout 由 code 產生。

這樣 Agent 處理的是:

這份 report 應該包含什麼?

而不是:

node A 的 x / y 座標是多少?

三個 Workflow Tools

目前給 Agent 三個 tools。

list_workflows

讓 Agent 找已經存在的 Workflow,包括:

  • title
  • sections
  • Analysis
  • datasource
  • last run status

所以 user 說:

再跑一次 Monday Report

Agent 不需要重新建立,只要先找到它。

save_workflow

建立或修改 Workflow。

Input 主要是:

  • title
  • sections
  • report_title
  • sandboxes
  • replaces

每個 section 裡再放 Analysis 和 datasource mapping。

如果 Workflow 不合法,例如:

  • Analysis 不存在
  • datasource 不相容
  • section 是空的

就不會 save,原因會直接回給 Agent,讓它修正後再送一次。

run_workflow

執行 saved Workflow。

它走的還是 Day 27、28 同一套 runtime:

  • Pre-run Check
  • scheduler
  • lanes
  • sandbox reuse
  • Analysis execution
  • Report
  • Performance measurement

Chat 沒有另一套特別的 Workflow execution。

Chat 裡直接看到 Workflow

Agent 建好 Workflow 後,Chat 下面會直接顯示同一個 canvas。

這不是另外做一套 preview,而是 reuse Workflow page 本來的 node / edge components,只是改成 read-only:

  • 不能 drag
  • 不能 reconnect
  • 不能刪 node
  • scroll Chat 不會 zoom canvas

執行時,canvas 也會跟著更新:

  • waiting for a sandbox...
  • running...
  • done
  • needs optimization

edges 也會反映 execution state。

User 不需要離開 conversation,就能看到 Workflow 現在跑到哪裡。

Chat 裡也會直接顯示:

  • execution time
  • Analysis count
  • sandbox count
  • Open workflow
  • Open report

Open Workflow 直接回到 Workflow Page

Chat preview 不是 Workflow editor 的替代品。

如果 user 想進一步調整 Workflow,可以直接按 Open workflow。

會直接回到原本的 Workflow page。

在這裡還是可以:

  • 加 / 刪 Analysis
  • 改 Batch
  • 改 Report
  • 調整 datasource
  • 改 sandboxes per run
  • Save
  • Run

所以兩個入口的角色很清楚:

  • Chat:用自然語言快速建立、修改、執行 Workflow
  • Workflow Page:直接看到和編輯完整 graph

同一套 Rule,不因為從 Chat 執行就放寬

這裡我刻意讓 Chat tools reuse Workflow API 本來的 implementation。

因此從 Chat 建的 Workflow 和 UI 建的 Workflow,會經過同樣的 checks。

例如 Analysis 換到 incompatible datasource,一樣不能 save。

某個 Analysis Run 超過 execution limit,一樣會變成:

needs_optimization

Agent 不會自己繞過 Validation,也不會偷偷改 Analysis。

Optimize 還是走前面 Day 24、25 建好的流程。

所以 Chat 只是另一個入口,不是另一套 runtime。

Live Preview 也踩了一個 Timing 問題

Chat 裡的 Workflow preview 一開始不是 live 的。

第一版只在 Workflow 出現時 load 一次,結果 save_workflow 完成後 preview 就顯示:

Not run yet.

即使後面的 Workflow 已經跑完,它也不知道。

第二版在 run_workflow 出現時 reload,但 reload 得太早,拿到的反而是 previous run。

最後改成:

  • run_workflow 還沒有 response 時
  • 每 2 秒 check 一次
  • run 結束後再 reload 一次

這樣才真的能看到:

waiting → running → done

這裡又碰到一次 streaming UI 很常見的問題:

backend state 是對的,不代表 frontend refresh timing 就是對的。

還有一個 Sandbox Capacity 問題

實際跑了幾次後,又發現一個之前 Workflow 沒碰到的情況。

Chat 的 sandbox 會在最後一則訊息後保留 15 分鐘。

有一次 account 裡剛好有 3 個 idle Chat sandboxes,而 account limit 也是 3。

這時 Workflow 完全拿不到 sandbox:

  • 3 個 Analysis 全部失敗
  • 0 / 3 done
  • 原因都是 account sandbox limit

這不是 Chat Workflow 特有的 bug。

從 Workflow page Run 也會遇到一樣的問題。

目前比較合理的方向是:

  • Workflow 需要 capacity 時,可以回收同 account 最久沒使用的 idle Chat sandbox
  • 如果當下還拿不到,就比現在 30 秒等更久

Conversation history 不會消失;下次 Chat 需要執行 code 時,再拿一個新的 sandbox。

這部分目前還沒有做完。

Chat 開始變成 Control Plane

做到這裡,Chat 不只是拿來問一次性的 analysis。

它開始可以操作前面建立的 reusable artifacts:

  • 找 Saved Analysis
  • 建立 Workflow
  • 修改 Workflow
  • 執行 Workflow
  • 看 live status
  • 打開 Workflow
  • 打開 Report

整條路徑現在變成:

User Intent
→ Agent
→ Saved Analyses
→ Workflow
→ Parallel Execution
→ Report
→ Performance

Agent 負責把 intent 轉成操作。

真正的 execution、validation、scheduling 和 resource control,還是由 deterministic system 負責。


上一篇
[Day 28] Improving Workflow Performance with Rebalancing
系列文
AaaS from Scratch: 從一次性定義,到規模化分析 共 29 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言