wiki/z-archive/implementation/spec-workflow-architecture.md

3.7 KiB
Raw Permalink Blame History

Title: PlanActObserveRefine Workflow Architecture (PowerOn)

Overview

  • Objective: Replace bulk “task plan → full action plan → execute later” with a compact iterative loop: plan (select one action) → act (execute with minimal params) → observe (summarize results) → refine (decide next step or stop).
  • Benefits: Lower token usage, higher accuracy via tight feedback, less overplanning, clearer document routing, and better failure recovery.

Core Loop

  1. Plan (Select)

    • Input: objective, success criteria, tiny tool catalog (names + parameter names only), minimal available documents/connections, and short rules.
    • Output (JSON): {"action": {"method": "", "name": ""}}
    • Constraints: exactly one action per iteration.
  2. Act (Specify + Execute)

    • Input: selected action name from Plan.
    • Model returns only required parameters for that action: {"parameters": {...}}.
    • Host validates and applies in-code defaults (user language, depth, recency) then executes.
  3. Observe (Summarize Results)

    • Host returns a compact observation object, not raw payloads: { "success": true|false, "resultLabel": "roundX_taskY_actionZ_label", "documentsCount": N, "previews": [{"name":"..","mime":"..","snippet":".."}], "notes": ["short fact"], }
    • For web results, include per-URL relevance, key points, entities if available.
  4. Refine (Decide Next or Stop)

    • Model decides: stop with final answer or propose next single action (return to Plan).
    • Stop criteria: all success_criteria met; or no further actions can improve score; or max steps reached.

Minimal Tool Catalog (names + param names only)

  • web.search(query,maxResults,searchDepth,timeRange,topic,includeDomains,excludeDomains,language,includeAnswer,includeRawContent)
  • web.scrape(query,maxResults,searchDepth,timeRange,topic,includeDomains,excludeDomains,language,includeAnswer,includeRawContent,extractDepth,format)
  • web.crawl(documentList,extractDepth,format)
  • ai.process(documentList,aiPrompt,processingMode,includeMetadata,customInstructions,expectedDocumentFormats)
  • document.extract(documentList,aiPrompt)
  • document.generateReport(documentList,title)

Business Rules (Prompt-Level, ≤7 lines)

  • Pick exactly one action per step; then specify only its parameters.
  • Derive parameters from objective + criteria; use user language; add recency only if freshness is implied.
  • Only request machine-readable formats when explicitly required; otherwise narrative text/markdown.
  • Keep parameters minimal; avoid connector-specific knobs; chain outputs so next step is consumable.
  • Stop when criteria are met; otherwise iterate with a new single action.

Defaults (Code-Level, not Prompt)

  • Language default from user profile; depth advanced for analysis, basic for lookups.
  • Time window only when criteria imply freshness.
  • ai.process defaults to markdown narrative unless expectedDocumentFormats explicitly requests structured data.

State and Routing

  • Workflow context tracks (currentRound, currentTask, currentAction).
  • Each action execution attaches documents with a deterministic resultLabel: round{r}_task{t}action{a}{label}.
  • Observation objects reference only labels and previews to limit prompt size.

Failure Handling

  • After observe, a lightweight review step classifies: success | retry | failed, with improvements.
  • Retry increments a small counter; criteria progress tracked across attempts.

Security & Limits

  • Allowed methods per task type; deny-list for risky methods.
  • Max steps per task; token budget guard; truncate observations to safe size.

Final Output

  • When stopping, model produces a concise final message and, if applicable, invokes a last formatting action (e.g., ai.process → report md) before ending.