跳到正文
DEV Community· Tej Pandya·· 2 小時前AI 評分52

AI 營運公司的控制平面:工作流、智能體與人工通道

A Control Plane for an AI-Run Firm: Workflow, Agent and Human Lanes

AI 導讀

Tej Pandya 提出一套供小型服務公司接收潛在客戶使用的 AI 控制平面設計,將任務分為工作流、智能體及人工三條通道。工作流執行固定步驟,智能體在限制內選擇步驟並使用指定工具;程式碼亦設定各任務可用工具、審批要求及日誌記錄。涉及金錢、合約和客戶承諾的任務交由人員處理,智能體行動須記錄輸入和輸出;作者説明這只是示意設計,並非公司能自行運作的證明,亦沒有可分享的結果。

正文

Tej Pandya

"Autonomous company" sounds like a model choice. In practice it is a control-plane design. This post sketches one for a small service firm doing lead intake. The firm is illustrative, not a customer story, and I have no results to share.

The idea

Split every task into one of three lanes and enforce the lane in code.

from enum import Enum
from dataclasses import dataclass

class Lane(Enum):
    WORKFLOW = "fixed steps, no model decisions"
    AGENT = "model picks steps, inside limits"
    HUMAN = "person decides"

@dataclass
class Task:
    name: str
    lane: Lane
    tools: list[str]
    needs_approval: bool = False

TASKS = [
    Task("capture_lead",   Lane.WORKFLOW, ["crm.create"]),
    Task("send_reminder",  Lane.WORKFLOW, ["email.send_template"]),
    Task("draft_reply",    Lane.AGENT,    ["crm.read", "email.draft"]),
    Task("quote_price",    Lane.HUMAN,    []),
]

Anthropic's guide says coded workflows give predictability for well-defined tasks, and that agents bring higher cost and compounding errors, so test them in sandboxes with guardrails. Salesforce describes "hybrid reasoning" that combines deterministic logic and adaptive AI. The lanes above are one simple way to do that.

The router

def route(task: Task, payload):
    log("start", task.name, payload)
    if task.lane is Lane.HUMAN or task.needs_approval:
        return queue_for_human(task, payload)
    if task.lane is Lane.WORKFLOW:
        return run_steps(task, payload)
    return run_agent(task, payload, allowed_tools=task.tools)

Three things live here and not in a prompt: which tools a task may touch, which tasks need approval, and what gets logged.

Incident handling

PAUSED = set()

def pause(task_name: str, who: str):
    PAUSED.add(task_name)
    log("paused", task_name, who)

Check PAUSED at the start of route. Someone must own the pause, and the log must say who used it.

Red lines to code first

  • Money, contracts and customer promises always go to a person.
  • Every agent action has a log entry with inputs and outputs.
  • Every task has a named owner and an off switch.

What this is not

It is not proof that a company can run itself. Microsoft's 2025 Work Trend Index describes humans setting direction and "checking in as needed". The control plane is how that check-in becomes real.

Tej Pandya, founder of GrowEasy.ai.

來源:DEV Community · dev.to