)
【免费下载链接】thClawsOpen-source AI agent harness in native Rust — GUI, CLI, headless, and webapp from one binary. Multi-provider, MCP, skills, plugins, agent teams.项目地址https://gitcode.com/gh_mirrors/th/thClaws点击查看免费下载thClaws 是用原生 Rust 编写的开源 AI Agent 框架GUI、CLI、headless 和 webapp 四种界面共用同一个引擎。当你向 thClaws 发送一条消息时背后由一套名为Agentic Loop的状态机驱动它组装系统提示词、压缩历史、流式请求模型、解析并派发工具调用再把结果喂回模型继续迭代——直到模型不再需要任何工具一轮对话turn才结束。本文将完整拆解这条流水线帮你理解 thClaws 流式对话 工具调用的实现原理无需阅读上万行 Rust 源码。什么是 Agentic Loop一句话概括Agentic Loop 就是把「用户的一条消息」变成「带工具调用的流式多轮对话」的循环引擎。它位于核心模块 crates/core/src/agent.rs入口是Agent::run_turn与run_turn_multipart后者支持带图片附件的消息。整个循环对外吐出的是一串语义化事件AgentEventText文本增量、ToolCallStart即将调用工具、ToolCallResult工具结果、Done本轮结束。GUI、终端、CLI 消费的是同一条事件流所以行为在任何界面下都一致。官方文档对该循环有权威描述可直接对照阅读agentic-loop.md。三种界面同一个引擎thClaws 的四种运行模式GUI、CLI REPL、headless 打印、--serveWeb 模式共享同一个 Loop 实现区别只在「谁来驱动、如何渲染」界面驱动方式说明GUI 聊天 / 终端drive_turn_streamworker 线程事件翻译成 IPC 推给前端CLI REPLrepl.rs 的顶层循环直接消费AgentEvent用 ANSI 渲染headless /--serve同一Agent::run_turn输出到 stdout 或 HTTP/WebSocket一个关键设计worker 对循环的派发是单线程的——同一时刻只有一个 turn 在跑。如果你在对话进行中再按回车新消息会进入队列带[queued]标记等本轮结束后再被处理。模式选择细节见 running-modes.md。一条消息的完整旅程6 步流水线每一轮迭代iteration内部循环按固定顺序执行以下步骤伪代码流程见 agentic-loop.md §3第 1 步现场组装系统提示词每轮迭代重新拼接一次系统提示词 基础提示词含 AGENTS.md/记忆库/KMS 附件 Plan 模式提醒 Todo 清单提醒。成本只是一次字符串拼接却保证了你在对话中途切换权限模式、更新 Todo 后下一轮迭代立即生效不用重启会话。第 2 步历史压缩Compaction对话越聊越长上下文会撑爆模型的窗口。compact按 token 预算从最旧的消息开始丢弃并遵守两条铁律工具对永不拆散——ToolUse和它的ToolResult必须同进同出至少保留最后一条消息且超长内容会被原地截断并附上提示而不是直接发给模型然后吃一个 400 错误。GUI 里当上下文逼近上限时你会看到顶部的上下文警告横幅它就是这套预算机制在界面上的投影压缩策略全文见 compaction.md。第 3 步流式请求 Provider带指数退避重试组装好StreamRequest模型 系统提示词 消息 工具定义后调用Providertrait 的stream()发起流式请求。失败时按 1s → 2s → 4s 指数退避重试但配置类错误缺 API Key、模型名写错不重试——因为这类错误重试也不会自愈。第 4 步assemble——把原始 SSE 折叠成语义事件各家 ProviderAnthropic、OpenAI、Gemini、Ollama……的原始流格式五花八门。assemble是统一的事件组装器缓冲半截的 JSON 工具参数、识别thinking与正文、甚至处理 Qwen/DeepSeek 这类把推理包在think标签里当普通文本输出的模型。最终统一折叠成Text / Thinking / ToolUse / Done四类语义事件——换 Provider 不需要动循环代码这是 thClaws 多 Provider 架构的关键解耦点详见 providers.md。第 5 步工具派发——「先解析、后执行」模型每声明一次工具调用循环立即发出ToolCallStart事件——注意这是解析时刻而非执行时刻所以你在聊天窗口里看到[tool: Bash]的瞬间比工具真正跑起来更早体验上毫无卡顿。之后每个工具调用要依次穿过一串关卡解析错误短路——JSON 坏了直接回一条错误结果不炸掉整轮Plan 模式拦截——只读模式下的写操作会被挡回模型读到错误提示后自我纠正审批门——Ask模式下需要审批的工具Bash/Write/Edit 等弹出确认框执行——通过Tooltrait 的call_multimodal真正调用工具超大输出落盘——超过 50KB 的工具输出先存临时文件上下文里只留预览防止挤爆下一轮窗口。审批门由ApprovalSinktrait 定义三个实现各司其职AutoApprover测试/自动模式全放行、GuiApproverGUI 弹窗可允许/拒绝/本会话允许、CliApprover终端交互确认。完整权限模型见 permissions.md。第 6 步结果回喂进入下一轮所有工具结果打包成一条 User 消息塞回历史然后循环回到第 1 步——模型此刻「看到了」工具输出于是决定继续调工具或给出最终回答。这就是 Agent 的「思考—行动—观察」循环直到某轮消息里没有任何工具调用turn 自然结束。循环何时停止6 种出口停止条件结果本轮无工具调用最常见正常Done触发max_tokens且未升级过一次性把上限升到 64K 再试一次第二次触发则结束达到max_iterations默认 50stop_reason: max_iterationsProvider 重试耗尽仍失败流报错结束界面包上(interrupted)用户在重试等待期点 Stop立即短路不用干等 7 秒用户在流式输出中点 Stop立即中断历史照常落盘一键 Stop 的秘密CancelToken很多人问过「为什么 thClaws 点 Stop 是秒停」答案在CancelToken一个AtomicBoolNotify的组合在三个关键点被检查——worker 的事件消费循环用biased的select!让取消优先于取事件、Provider 重试的退避睡眠、以及每一轮新消息开始时的reset()。所以无论是模型正在吐字还是卡在重试等待Stop 按钮都能在 50ms 内响应。延伸阅读源码与文档地图想继续深入按主题跳转即可 循环本体agentic-loop.md · agent.rs 系统提示词怎么拼context-composer.md✂️ 历史压缩五入口compaction.md 三层权限门permissions.md 内置工具全集built-in-tools.md️ 四种运行模式对比running-modes.mdthClaws 的 Agentic Loop 证明了「一个循环 事件流」足以撑起 GUI、CLI 与 Web 三种形态循环只关心语义事件界面各自消费渲染——这正是它「多 Provider、MCP、Skills、Plugins 全从一个二进制出发」的架构底气。赞分享【免费下载链接】thClawsOpen-source AI agent harness in native Rust — GUI, CLI, headless, and webapp from one binary. Multi-provider, MCP, skills, plugins, agent teams.项目地址https://gitcode.com/gh_mirrors/th/thClaws点击查看免费下载相关推荐mistral.rs Agent 实战用 Rust 构建带并行工具调用的 Agentic Loopmistral.rs Agent 实战用 Rust 构建带并行工具调用的 Agentic Loop 本文以 mistral.rs 仓库中 agent 示例推理引擎模型推理服务AI Agent多模态DeepSeek Harness 跨会话引用让一条消息安全携带另一场对话的只读上下文DeepSeek Harness 跨会话引用让一条消息安全携带另一场对话的只读上下文 会话之间如何互相引用而不破坏各自的历史与权限边界DeepSeek Ha人工智能AI AgentAgent 框架DeepSeek消息保护工具完整指南让重要对话不再消失消息保护工具完整指南让重要对话不再消失 在日常沟通中重要信息被撤回的情况屡见不鲜无论是工作中的项目细节还是生活中的珍贵对话都可能因对方的撤回操作而永久丢桌面应用即时通讯创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考