xwork:Agent 编排
xllm 负责"和模型说话"、xllm-session 负责"记住说过什么"——xwork 在其上负责"把模型变成能干活的 Agent":工具注册与执行、工作区策略、多轮编排、通知与压缩调度。
本章导读
49.1 三层边界
| 层 | 职责 | 不管 |
|---|---|---|
| xllm(ch34) | 请求构造、三方言、SSE、代理 | 工具执行、历史 |
| xllm-session(ch35) | 上下文预算、压缩、journal | 编排、工具 |
| xwork | Agent 编排、工具注册/执行、工作区策略、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"四库组合的完整范例。
class: "app" 服务节点为这套组合加桌面形态:本地 HTTP + WebView2 窗口,与单文件发布组合 = 双击即用的桌面 Agent 应用。常见错误
编程练习
小结速查
xwork = Agent 编排层(42 符号,第 15 扩展)· 三层 = xllm(调用)/ session(记忆)/ work(编排) · 工具注册 + 子 Agent + 通知 = 完整 Agent 形态 · agent-demo = 四库组合实战