Skip to content

Agent 三模式 #20

Description

@SATA260

Agent 三模式

功能职责

用户每次发送选一个内置 Agent 和一种审批尺度。发给模型的是全量工具表,真正能执行的由本轮 Agent 绑定;要不要停下来等人,由审批流水线裁定。

  • 三个内置 Agent:ask 只读问答,plan 只写计划,agent 可以改仓库和跑命令
  • 三种审批:manual 等人批,auto 由复审模型填单,失败升级给人,yolo 目录内自动过
  • 发给模型的工具表是全集;本轮可执行名单冻进这一次 Run
  • 模式规则以一条 developer 消息紧跟底座说明,不改底座正文
  • 流水线:工具默认和参数校验 → 本 Agent 绑定与覆盖表 → 审批尺度;每层只处理上一层仍为 ask 的调用
  • 一次模型回复里的待批工具合成一条审批;拒绝或单个工具失败不打死 Run

边界

  • 不实现具体工具;工具能不能跑、要不要审,只看绑定和流水线
  • 未列入本轮名单的工具直接拒绝;yolo 和已批准都不能抬进来
  • 工作区外的文件操作必须审批;Agent 覆盖表和 yolo 都不能直接放行
  • ask 不能写文件、跑命令、写记忆或改计划;做不到就直说,不要假装改好
  • plan 只许计划工具;用户要改代码时说明需切到 agent
  • agent 改计划用计划工具,不必为计划单独等人;写代码、跑命令仍走流水线
  • auto 只填已开出的审批单,失败或拿不准就升级成 manual,不自己开新单
  • 会话上的逻辑 Agent ID 不随这次发送改成 ask / plan / agent

内部拆分

工作模式(WorkMode)

用户这一轮要哪个内置 Agent。不管审批尺度,不执行工具。

type WorkMode string // ask | plan | agent

func ParseWorkMode(raw string) WorkMode // 解析工作模式;空或不认识则回落到 agent。

Agent 配置(Profile)

一份内置 Agent:可执行工具名、覆盖表、这一轮的模式规则。不跑流水线,不调模型。

type Profile struct {
    ID      string          // ask | plan | agent
    Mode    WorkMode
    Names   []string        // 本轮可执行的工具名
    Effects map[string]Effect // 第 2 层覆盖;只审上一层仍为 ask 的调用
    Duty    string          // 本轮模式规则,发给模型时紧跟底座说明
}

func For(mode WorkMode) Profile           // 返回该工作模式的内置配置。
func DeveloperPrompt(p Profile) string    // 拼出本轮 developer 正文;空则不注入。
func Bound(p Profile, name string) bool   // 该工具是否在本轮可执行名单里。

审批尺度(ApprovalMode)

用户这一轮允许多自动。不管绑定名单。

type ApprovalMode string // manual | auto | yolo

func ParseApprovalMode(raw string) ApprovalMode // 解析审批尺度;空则 manual。

审批流水线(Pipeline)

按层裁定一次工具调用:默认与校验 → 绑定与覆盖表 → 审批尺度。不执行工具。

type Effect string // allow | ask | deny

type PipelineInput struct {
    Default          Effect
    InspectErr       error        // 参数校验失败则 deny
    Bound            bool         // 未绑定则 deny
    OutsideWorkspace bool         // 目录外必须 ask,表和 yolo 不能抬
    AgentEffect      Effect
    HasAgentEffect   bool
    Approval         ApprovalMode
    Approved         bool // 审批单已批准本调用
}

func Decide(in PipelineInput) Effect // 逐层裁定;每层只处理上一层仍为 ask 的结果。

自动复审(Review)

auto 开单后,由独立复审模型填同一张单。不执行工具,不开新审批。

type ReviewSheet struct {
    ApprovalID string
    Calls      []string // 待填的 tool_call_id
}

type ReviewDecision struct {
    ToolCallID string
    Status     string // approved | denied
    Reason     string
}

func Fill(sheet ReviewSheet) ([]ReviewDecision, error) // 填单;失败则交给人。

流程

用户选模式和审批尺度后发一句话;模型若要动工具,按本轮名单和流水线走。也可以改选再发,或审一张已开的单。

// 用户用 ask + manual 提问
Run.Start(..., ask, manual)
Profile.For(ask)
Model.Stream(...)
Pipeline.Decide(...) // 写文件未绑定 → deny
Tool.Dispatch(...)

// 用户改用 plan 写大纲
Run.Start(..., plan, manual)
Profile.For(plan)
Plan.WritePlan(...)

// 用户改用 agent + yolo 改工作区内文件
Run.Start(..., agent, yolo)
Profile.For(agent)
Pipeline.Decide(...) // 目录内写文件 → allow
Write.Edit(...)

// 用户用 agent + auto,工具默认要审
Pipeline.Decide(...) // ask
Approval.Create(...)
Review.Fill(...)     // 失败则升级给人
Approval.Decide(...)
Run.Continue(...)

// 用户用 agent + manual,路径在工作区外
Pipeline.Decide(...) // 即使 yolo 也不能抬;这里是 manual → ask
Approval.Decide(...) // 人批准后才能执行

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    moduleSingle-module objects, interfaces, and design

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions