Documentation
¶
Overview ¶
Package task 提供 task 工具:一个"并行分身"工具(fork)。
主模型调用 task 干某个可并行的活时,不是注入一个独立 subAgent,而是 fork 当前 Agent(同一 provider / model warp / 超参 / 全部运行期 hook) 与当前上下文(截至本轮之前的消息快照),在隔离的消息历史上再跑一轮 model↔tool 循环:子循环内部的过程性上下文(中间的工具调用、思考步骤) 不回流主上下文,只有最终答案作为工具结果回传主循环。
特性:
- 并发:工具本就并发,多个 task 调用在同一轮内并行 fork;
- 一致:分身继承全部运行期 hook——审批照拦、可问用户(approve/askuser 的事件带 ForkID,渲染层据此区分是哪个分身在问)、session 照存 (localsession 按 ForkID 分流到独立文件,可回放);
- 单层:fork 的工具集剔除 task 自身,且 Agent.Fork 不重跑 startHooks、 子循环内不再注册 task,fork 不能再 fork;
- 标识:子循环所有事件(引擎事件与 hook 事件)由引擎统一打上 ForkID。
与 approve/askuser/taskplan 同构:OnToolStart 拦截 task 调用,等待的不是人, 而是 fork 子循环的完整运行。task 工具由 hook 在 OnStart 自动注册 (同 mcp/filetools),core.WithHooks(New()) 即可,无需 core.WithTools(Tool())。
tools.go 定义 task 壳工具:schema 是唯一实体(taskArgs tag 反射生成), 真正的"执行体"是 Hook.OnToolStart 拦截后跑隔离子循环,Invoke 不会被走到。
Index ¶
Constants ¶
const EventEnd = event.EventType("task.end")
EventEnd 是 fork 结束事件,Data 为 *types.LoopState(子循环最终状态)。
const EventStart = event.EventType("task.start")
EventStart 是 fork 启动事件,Data 为 *types.ToolCall。
const ToolName = "task"
ToolName 是上下文隔离工具的注册名。
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Hook ¶
type Hook struct {
// contains filtered or unexported fields
}
Hook 拦截 task 工具调用,复刻当前 Agent 与上下文跑一次隔离子循环。
func New ¶
New 创建 task hook。fork 复刻的主 Agent 从 ctx 取(引擎每次 Run 注入, 见 core.AgentFromContext),无需组装期绑定:core.WithHooks(New()) 一步到位。
type Option ¶
type Option func(*Options)
Option 配置 fork 的工具集。
func WithInheritTools ¶
WithInheritTools 控制是否继承主 Agent 当前 state 的工具(默认 true)。