第 49 章 / 共 51 章
卷五 · 扩展、运维与实战

xwork:Agent 编排

xllm 负责"和模型说话"、xllm-session 负责"记住说过什么"——xwork 在其上负责"把模型变成能干活的 Agent":工具注册与执行、工作区策略、多轮编排、通知与压缩调度。

本章导读

站位:AI 应用栈的顶石(第 15 扩展)。xwork v2.3.1(42 符号)持有编排、工作区策略、工具执行、artifact 与压缩调度;不持有 provider 协议与 CLI 渲染——分层与 xllm / xllm-session 的边界清晰。

49.1 三层边界

层职责不管
xllm(ch34)请求构造、三方言、SSE、代理工具执行、历史
xllm-session(ch35)上下文预算、压缩、journal编排、工具
xworkAgent 编排、工具注册/执行、工作区策略、artifact、子 Agent、通知、压缩调度provider 协议、CLI

49.2 Agent 生命周期

创建 → 注册工具 → 运行 → 收通知
xwork_agent_config cfg;
xworkAgentConfigInit(&cfg);              /* 工作区根、模式、预算 */
xwork_agent* agent = xworkAgentCreate(&cfg);

xworkAgentRegisterBuiltinTools(agent);     /* 内建读写/列目录等 */
xworkAgentRegisterTool(agent, &myTool);   /* 自定义工具 */

xwork_agent_run run = xworkAgentRunBegin(agent, "帮我分析这个目录");
while ( xworkAgentRun(agent, &run) ) {
    xwork_task_notice notices[8];
    uint32 n = xworkAgentTakeTaskNotices(agent, notices, 8);
    for ( uint32 i = 0; i < n; i++ ) { /* 工具调用/结果通知 */ }
}
xworkAgentRunEnd(agent, &run);
xworkAgentDestroy(agent);

42 个公开符号按生命周期分组:配置/创建销毁 5、运行控制 6(含取消/恢复)、工具注册 10、子 Agent 类型 5、通知与查询 8、压缩 3、其他 5。全部导入脚本与嵌套 TCC。

49.3 工作区策略与子 Agent

xwork 的工作区是 Agent 的沙箱边界:读写探索(内部实现或委托 rg/fd 外部工具)、read 标记与目录回退、预算接线。子 Agent 类型系统(xworkAgentRegisterSubagentType)让一个 Agent 可以按类型派生只读子 Agent(RunReadOnlySubagent)或全权子 Agent,形成多 Agent 协作拓扑。

压缩调度(xworkAgentCompact / MaybeCompact)与 xllm-session 的压缩算子联动,长对话自动收敛上下文,配合 read 标记保证工具产物不丢失。

49.4 实战:agent-demo

仓库 release/agent-demo/ 是 xwork 的全栈实战:xs 单文件模式 + NativeHarness 浏览器前端 + C 脚本回合引擎(HTTP 轮询线协议),浏览器全流程验收通过——含审批闸门(工具调用需人工批准)、diff/plan 面板与执行轨迹列。它是"xwork + xllm + xllm-session + 站点 VFS"四库组合的完整范例。

webview 扩展(第 15 库,2 探测符号)与 class: "app" 服务节点为这套组合加桌面形态:本地 HTTP + WebView2 窗口,与单文件发布组合 = 双击即用的桌面 Agent 应用。

常见错误

坑:工具回调里的线程安全工具执行可能在 worker 线程回调——共享状态用 xrt 原语或 post 回 Agent 线程处理(参考 agent-demo 的回合引擎写法)。
坑:预算不生效预算经 xllm-session 接线——确认 xllm-session 变体已编入(build 参数选了 xwork 会自动携带依赖链)。

编程练习

基础
用 RegisterBuiltinTools + Run 跑通一次"列出工作区文件"的 Agent 回合。
进阶
注册一个自定义工具(如读数据库),在通知流中打印每次工具调用与结果。
验收
把 ch49.4 的 agent-demo 思路简化为自己的审批闸门:工具调用前暂停等待 HTTP 审批接口返回。

小结速查

xwork = Agent 编排层(42 符号,第 15 扩展)· 三层 = xllm(调用)/ session(记忆)/ work(编排) · 工具注册 + 子 Agent + 通知 = 完整 Agent 形态 · agent-demo = 四库组合实战