3.7 KiB
3.7 KiB
Title: Plan–Act–Observe–Refine 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
-
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.
-
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.
-
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.
-
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.