From 1532db220837f4a7abbd5ca63b56874c9183c993 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 31 Mar 2026 12:24:37 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E6=B5=81=E6=B4=BE=E5=88=86=E7=B1=BB=EF=BC=9AGemini=20CLI/Qwen?= =?UTF-8?q?=20Code=20=E5=BD=92=E5=85=A5=E5=B7=A5=E5=85=B7=E8=B0=83?= =?UTF-8?q?=E7=94=A8=EF=BC=8C=E8=A1=A5=E5=85=85=207=20=E4=B8=AA=E9=81=97?= =?UTF-8?q?=E6=BC=8F=20Agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - 原分类将 Gemini CLI、Qwen Code 归为「ReAct 循环」与「工具调用」并列, 但两者使用 @google/genai 结构化 function calling,与 Claude Code 本质相同 - 「工具调用」和「ReAct 循环」并非互斥分类,所有 Agent 内部都遵循 ReAct 模式 - 遗漏 Copilot CLI、Kimi CLI、Qoder CLI、Cursor、Warp、Continue 共 7 个 Agent 修改: - README.md 架构流派表:4 流派改为按「动作表达方式」区分 - 工具调用:补充 Gemini CLI、Qwen Code 及 7 个遗漏 Agent(共 12 个) - 文本 ReAct:仅 SWE-agent(支持纯文本动作解析) - 新增注释说明「工具调用」与「ReAct」非互斥 - architecture-deep-dive.md:代理循环模式重排序,工具调用循环列为主流, Gemini CLI/Qwen Code 移入工具调用流派,三大→四大架构流派 - features.md:Gemini CLI/Qwen Code 架构标签从「ReAct 循环」改为「工具调用」 Co-authored-by: Qwen-Coder --- README.md | 10 +++-- docs/comparison/architecture-deep-dive.md | 51 +++++++++++++---------- docs/comparison/features.md | 6 +-- 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 1438a3e1..22f932e7 100644 --- a/README.md +++ b/README.md @@ -99,10 +99,12 @@ | 流派 | 代表 Agent | 核心模式 | |------|---------|---------| -| **编辑优先** | Aider | LLM 直接输出代码修改(14 种格式) | -| **工具调用** | Claude Code, Codex CLI, OpenCode, Cline, Goose | 结构化 function calling | -| **事件驱动** | OpenHands | EventStream 发布/订阅 | -| **ReAct 循环** | Gemini CLI, Qwen Code, SWE-agent | Reason→Act→Observe→Repeat(思考→行动→观察→重复) | +| **编辑优先** | Aider | LLM 直接输出代码修改(14 种格式),需文本解析 | +| **工具调用** | Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenCode, Cline, Goose, Copilot CLI, Kimi CLI, Qoder CLI, Cursor, Warp, Continue | 结构化 function calling,LLM 通过 API 返回 tool calls | +| **文本 ReAct** | SWE-agent | Reason→Act→Observe→Repeat,支持纯文本动作解析(非原生 function calling) | +| **事件驱动** | OpenHands | EventStream 发布/订阅,Action/Observation 完全解耦 | + +> **注**:"工具调用"和"ReAct 循环"并非互斥——所有 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复)。上表按**动作表达方式**区分:是否通过结构化 API(function calling)还是文本解析来表达动作。 ## 技术栈 diff --git a/docs/comparison/architecture-deep-dive.md b/docs/comparison/architecture-deep-dive.md index 6e59e3bc..7e2c4d9b 100644 --- a/docs/comparison/architecture-deep-dive.md +++ b/docs/comparison/architecture-deep-dive.md @@ -95,41 +95,47 @@ graph TD 所有工具的核心都是一个代理循环,但实现方式差异显著: -### 纯 ReAct 循环 +### 工具调用循环(主流) ``` -思考 → 行动 → 观察 → 重复 +消息 → LLM → function calling → 工具执行 → 结果 → 重复 ``` -**使用者**:Gemini CLI、Qwen Code、SWE-agent +**使用者**:Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose、Copilot CLI、Kimi CLI、Qoder CLI、Cursor、Warp、Continue -- Gemini CLI 的 `GeminiClient` 最多 100 轮,通过 `Scheduler` 调度工具 -- SWE-agent 的 `DefaultAgent.step()` 逐步执行,支持多种解析器 -- Qwen Code 继承 Gemini CLI 架构,增加了 Loop 检测(Levenshtein 距离) +- Claude Code 使用 Anthropic `tool_use` API,20+ 内置工具 +- Gemini CLI/Qwen Code 使用 `@google/genai` function calling,`CoreToolScheduler`(1790 行)调度工具 +- Codex CLI 使用 OpenAI function calling + `apply_patch` +- OpenCode 使用 Vercel AI SDK v5 统一接口,19+ 工具 +- Cline 在 VS Code 内执行,24+ 工具,每步自动 Git Checkpoint +- Goose 通过 MCP 协议统一工具接口(所有工具走 MCP) +- Copilot CLI 使用 YAML 定义的代理 + 67 工具 -### 编辑-提交循环 +> **注**:所有工具调用 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复),差异在于通过结构化 API 返回 tool calls。 + +### 文本 ReAct 循环 ``` -发送 → 解析编辑 → 应用修改 → Git 提交 → Lint/测试 → 反思 +思考 → 文本动作 → 解析 → 执行 → 观察 → 重复 ``` -**使用者**:Aider +**使用者**:SWE-agent -- 独特的编辑格式系统(14 种),模型输出直接包含代码修改 -- 反思循环:lint/测试失败自动重试(最多 3 次) -- 每次修改自动 Git 提交,天然版本控制 +- SWE-agent 的 `DefaultAgent.step()` 支持多种解析器,包括纯文本 `ThoughtActionParser` 和 `ActionOnlyParser` +- 也支持 `FunctionCallingParser`(原生 function calling),但核心设计围绕文本动作解析 +- 与"工具调用"流派的区别:动作通过文本表达而非结构化 API -### 工具调用循环 +### 编辑-提交循环 ``` -消息 → LLM → 工具调用 → 执行 → 结果 → 重复 +发送 → 解析编辑 → 应用修改 → Git 提交 → Lint/测试 → 反思 ``` -**使用者**:Claude Code、OpenCode、Cline、Goose +**使用者**:Aider -- Claude Code/OpenCode 使用结构化工具调用(function calling) -- Cline 在 VS Code 内执行,每步自动 Git Checkpoint -- Goose 通过 MCP 协议统一工具接口 +- 独特的编辑格式系统(14 种),模型输出直接包含代码修改 +- 反思循环:lint/测试失败自动重试(最多 3 次) +- 每次修改自动 Git 提交,天然版本控制 ### 事件驱动循环 @@ -363,12 +369,15 @@ Tree-sitter AST 解析(30+ 语言) ## 关键洞察 -### 1. 三大架构流派 +### 1. 四大架构流派 -- **编辑优先**(Aider):LLM 直接输出代码修改,工具是辅助 -- **工具调用**(Claude Code、OpenCode、Cline、Goose):LLM 通过结构化工具调用操作环境 +- **编辑优先**(Aider):LLM 直接输出代码修改,需文本解析,工具是辅助 +- **工具调用**(Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose 等):LLM 通过结构化 function calling 操作环境,是主流模式 +- **文本 ReAct**(SWE-agent):通过文本解析动作(非原生 function calling),适合学术评估 - **事件驱动**(OpenHands):完全解耦的事件总线,最灵活但最复杂 +> **关键认知**:"工具调用"与"ReAct 循环"并非互斥。所有 Agent 内部都遵循 ReAct 模式,差异在于**动作表达方式**:结构化 API(function calling)还是文本解析。 + ### 2. Gemini CLI 是事实上的"开源 Claude Code 模板" Gemini CLI 的架构被 Qwen Code 直接分叉,其设计模式(声明式工具 + 事件调度器 + 策略引擎)影响了多个后续项目。 diff --git a/docs/comparison/features.md b/docs/comparison/features.md index 45b5c6a2..a4e1e18d 100644 --- a/docs/comparison/features.md +++ b/docs/comparison/features.md @@ -50,9 +50,9 @@ | OpenCode | TypeScript | 多代理(7 内置) | 多客户端 AI 平台(TUI + Web + 桌面) | | Continue | TypeScript | IDE + CLI + CI/CD | PR Checks + 语义索引 | | Warp | Rust | 终端替代品 | 现代终端 + AI | -| Gemini CLI | TypeScript | ReAct 循环 | Google 生态 | -| OpenHands | Python | 复合 AI | 完全自主 | -| Qwen Code | TypeScript | ReAct 循环(Gemini CLI 分叉) | 中文开发者生态 | +| Gemini CLI | TypeScript | 工具调用(function calling) | Google 生态 | +| OpenHands | Python | 事件驱动(EventStream) | 完全自主 | +| Qwen Code | TypeScript | 工具调用(Gemini CLI 分叉) | 中文开发者生态 | | Kimi CLI | Python | 多代理(4 内置)+ Wire 协议 | 双模式交互 + 多客户端(TUI + Web + IDE) | ### 核心功能对比 From 8435fd2ab56f0089b50160e48da08d14503de545 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 31 Mar 2026 12:43:11 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=20PR=20review=20?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E4=BF=AE=E6=AD=A3=E6=9E=B6=E6=9E=84=E6=B5=81?= =?UTF-8?q?=E6=B4=BE=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 收窄「工具调用」成员:移除 Cursor/Warp/Continue/Qoder CLI(证据不足以 确认原生 API function calling),新增注释说明 2. 修正 SWE-agent 表述:「文本 ReAct」→「混合 ReAct」,明确默认使用 FunctionCallingParser,文本解析是兼容路径 3. features.md 架构列:列名「架构」→「架构/定位」,所有行统一为 「产品形态(架构特征)」格式,消除多维度混用问题 Co-authored-by: Qwen-Coder --- README.md | 8 +++--- docs/comparison/architecture-deep-dive.md | 16 ++++++------ docs/comparison/features.md | 30 +++++++++++------------ 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 22f932e7..fbe756aa 100644 --- a/README.md +++ b/README.md @@ -100,11 +100,13 @@ | 流派 | 代表 Agent | 核心模式 | |------|---------|---------| | **编辑优先** | Aider | LLM 直接输出代码修改(14 种格式),需文本解析 | -| **工具调用** | Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenCode, Cline, Goose, Copilot CLI, Kimi CLI, Qoder CLI, Cursor, Warp, Continue | 结构化 function calling,LLM 通过 API 返回 tool calls | -| **文本 ReAct** | SWE-agent | Reason→Act→Observe→Repeat,支持纯文本动作解析(非原生 function calling) | +| **工具调用** | Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenCode, Cline, Goose, Copilot CLI, Kimi CLI | 结构化 function calling,LLM 通过 API 返回 tool calls | +| **混合 ReAct** | SWE-agent | 兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 | | **事件驱动** | OpenHands | EventStream 发布/订阅,Action/Observation 完全解耦 | -> **注**:"工具调用"和"ReAct 循环"并非互斥——所有 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复)。上表按**动作表达方式**区分:是否通过结构化 API(function calling)还是文本解析来表达动作。 +> **注 1**:"工具调用"和"ReAct 循环"并非互斥——所有 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复)。上表按**动作表达方式**区分:是否通过结构化 API(function calling)还是文本解析来表达动作。 +> +> **注 2**:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 具有工具系统能力(多支持 MCP),但本仓库现有证据不足以确认其使用原生 API function calling,暂不列入「工具调用」流派。 ## 技术栈 diff --git a/docs/comparison/architecture-deep-dive.md b/docs/comparison/architecture-deep-dive.md index 7e2c4d9b..9eecabde 100644 --- a/docs/comparison/architecture-deep-dive.md +++ b/docs/comparison/architecture-deep-dive.md @@ -113,17 +113,17 @@ graph TD > **注**:所有工具调用 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复),差异在于通过结构化 API 返回 tool calls。 -### 文本 ReAct 循环 +### 混合 ReAct 循环 ``` -思考 → 文本动作 → 解析 → 执行 → 观察 → 重复 +思考 → 动作 → 解析 → 执行 → 观察 → 重复 ``` **使用者**:SWE-agent -- SWE-agent 的 `DefaultAgent.step()` 支持多种解析器,包括纯文本 `ThoughtActionParser` 和 `ActionOnlyParser` -- 也支持 `FunctionCallingParser`(原生 function calling),但核心设计围绕文本动作解析 -- 与"工具调用"流派的区别:动作通过文本表达而非结构化 API +- SWE-agent 的 `DefaultAgent.step()` 支持多种解析器,`FunctionCallingParser`(原生 function calling,**默认**)和纯文本 `ThoughtActionParser`、`ActionOnlyParser` +- 文本动作解析是兼容路径,适用于不支持 function calling 的模型,也是其鲜明特征之一 +- 与"工具调用"流派的区别:SWE-agent 同时支持两种动作表达方式,而非仅依赖原生 function calling ### 编辑-提交循环 @@ -372,11 +372,11 @@ Tree-sitter AST 解析(30+ 语言) ### 1. 四大架构流派 - **编辑优先**(Aider):LLM 直接输出代码修改,需文本解析,工具是辅助 -- **工具调用**(Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose 等):LLM 通过结构化 function calling 操作环境,是主流模式 -- **文本 ReAct**(SWE-agent):通过文本解析动作(非原生 function calling),适合学术评估 +- **工具调用**(Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose、Copilot CLI、Kimi CLI):LLM 通过结构化 function calling 操作环境,是主流模式 +- **混合 ReAct**(SWE-agent):兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 - **事件驱动**(OpenHands):完全解耦的事件总线,最灵活但最复杂 -> **关键认知**:"工具调用"与"ReAct 循环"并非互斥。所有 Agent 内部都遵循 ReAct 模式,差异在于**动作表达方式**:结构化 API(function calling)还是文本解析。 +> **关键认知**:"工具调用"与"ReAct 循环"并非互斥。所有 Agent 内部都遵循 ReAct 模式,差异在于**动作表达方式**:结构化 API(function calling)还是文本解析。Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 暂因证据不足未列入「工具调用」流派。 ### 2. Gemini CLI 是事实上的"开源 Claude Code 模板" diff --git a/docs/comparison/features.md b/docs/comparison/features.md index a4e1e18d..084396d9 100644 --- a/docs/comparison/features.md +++ b/docs/comparison/features.md @@ -38,22 +38,22 @@ ### 架构与设计 -| Agent | 语言 | 架构 | 主要设计目标 | +| Agent | 语言 | 架构/定位 | 主要设计目标 | |------|----------|--------------|-------------------| -| Claude Code | Rust | 原生 CLI | 代理式编程工具 | -| Aider | Python | Git 原生 | 结对编程 | -| Copilot CLI | TypeScript (Node.js SEA) | 独立二进制 | 终端原生代理,GitHub 集成 | -| Cursor | TypeScript | IDE (VS Code) | AI 原生编辑器 | -| SWE-agent | Python | Agent-Computer Interface | 基准性能 | -| Cline | TypeScript | IDE 扩展 | 自主编码 | -| Goose | Rust | MCP 原生 | 模型灵活性 | -| OpenCode | TypeScript | 多代理(7 内置) | 多客户端 AI 平台(TUI + Web + 桌面) | -| Continue | TypeScript | IDE + CLI + CI/CD | PR Checks + 语义索引 | -| Warp | Rust | 终端替代品 | 现代终端 + AI | -| Gemini CLI | TypeScript | 工具调用(function calling) | Google 生态 | -| OpenHands | Python | 事件驱动(EventStream) | 完全自主 | -| Qwen Code | TypeScript | 工具调用(Gemini CLI 分叉) | 中文开发者生态 | -| Kimi CLI | Python | 多代理(4 内置)+ Wire 协议 | 双模式交互 + 多客户端(TUI + Web + IDE) | +| Claude Code | Rust | CLI Agent(工具调用) | 代理式编程工具 | +| Aider | Python | CLI Agent(编辑优先,Git 原生) | 结对编程 | +| Copilot CLI | TypeScript (Node.js SEA) | CLI Agent(工具调用,GitHub 集成) | 终端原生代理,GitHub 集成 | +| Cursor | TypeScript | IDE Agent(VS Code fork) | AI 原生编辑器 | +| SWE-agent | Python | CLI Agent(混合 ReAct,ACI) | 基准性能 | +| Cline | TypeScript | IDE Agent(VS Code 扩展) | 自主编码 | +| Goose | Rust | CLI Agent(工具调用,MCP 原生) | 模型灵活性 | +| OpenCode | TypeScript | CLI Agent(工具调用,多代理) | 多客户端 AI 平台(TUI + Web + 桌面) | +| Continue | TypeScript | IDE + CLI + CI/CD Agent | PR Checks + 语义索引 | +| Warp | Rust | 终端 Agent(GPU 渲染终端) | 现代终端 + AI | +| Gemini CLI | TypeScript | CLI Agent(工具调用,function calling) | Google 生态 | +| OpenHands | Python | CLI Agent(事件驱动,EventStream) | 完全自主 | +| Qwen Code | TypeScript | CLI Agent(工具调用,Gemini CLI 分叉) | 中文开发者生态 | +| Kimi CLI | Python | CLI Agent(工具调用,Wire 协议) | 双模式交互 + 多客户端(TUI + Web + IDE) | ### 核心功能对比 From 1aedc2f9d1e24183497d9c43a5dfec2d90bf536d Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 31 Mar 2026 13:16:54 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E8=BD=AE=20review=20=E4=BF=AE=E5=A4=8D=E5=86=85=E9=83=A8?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=20+=20=E8=A1=A5=E5=85=85=E9=81=97?= =?UTF-8?q?=E6=BC=8F=20Agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. architecture-deep-dive.md 移除 Cursor/Warp/Continue/Qoder CLI, 与 README 口径一致 2. 新增 mini-swe-agent 到混合 ReAct 流派 3. Oh My OpenAgent 标注为「工具调用」间接成员(基于 OpenCode Harness) 4. 两处注释统一说明未列入 Agent 的具体原因 Co-authored-by: Qwen-Coder --- README.md | 6 ++++-- docs/comparison/architecture-deep-dive.md | 15 ++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fbe756aa..27d67403 100644 --- a/README.md +++ b/README.md @@ -101,12 +101,14 @@ |------|---------|---------| | **编辑优先** | Aider | LLM 直接输出代码修改(14 种格式),需文本解析 | | **工具调用** | Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenCode, Cline, Goose, Copilot CLI, Kimi CLI | 结构化 function calling,LLM 通过 API 返回 tool calls | -| **混合 ReAct** | SWE-agent | 兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 | +| **混合 ReAct** | SWE-agent, mini-swe-agent | 兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 | | **事件驱动** | OpenHands | EventStream 发布/订阅,Action/Observation 完全解耦 | > **注 1**:"工具调用"和"ReAct 循环"并非互斥——所有 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复)。上表按**动作表达方式**区分:是否通过结构化 API(function calling)还是文本解析来表达动作。 > -> **注 2**:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 具有工具系统能力(多支持 MCP),但本仓库现有证据不足以确认其使用原生 API function calling,暂不列入「工具调用」流派。 +> **注 2**:以下 Agent 未列入上表,原因各异: +> - **Cursor、Warp、Continue、Qoder CLI**:闭源/IDE 嵌入式 Agent,具有工具系统能力(多支持 MCP),但本仓库现有证据不足以确认其使用原生 API function calling +> - **Oh My OpenAgent**:基于 OpenCode 的 Harness 层,继承工具调用架构但不直接调用 LLM API,视为「工具调用」的间接成员 ## 技术栈 diff --git a/docs/comparison/architecture-deep-dive.md b/docs/comparison/architecture-deep-dive.md index 9eecabde..922dc778 100644 --- a/docs/comparison/architecture-deep-dive.md +++ b/docs/comparison/architecture-deep-dive.md @@ -101,7 +101,7 @@ graph TD 消息 → LLM → function calling → 工具执行 → 结果 → 重复 ``` -**使用者**:Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose、Copilot CLI、Kimi CLI、Qoder CLI、Cursor、Warp、Continue +**使用者**:Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose、Copilot CLI、Kimi CLI - Claude Code 使用 Anthropic `tool_use` API,20+ 内置工具 - Gemini CLI/Qwen Code 使用 `@google/genai` function calling,`CoreToolScheduler`(1790 行)调度工具 @@ -109,9 +109,12 @@ graph TD - OpenCode 使用 Vercel AI SDK v5 统一接口,19+ 工具 - Cline 在 VS Code 内执行,24+ 工具,每步自动 Git Checkpoint - Goose 通过 MCP 协议统一工具接口(所有工具走 MCP) -- Copilot CLI 使用 YAML 定义的代理 + 67 工具 +- Copilot CLI 使用 YAML 定义的代理,`tool_choice` 列出现在模型配置矩阵 +- Kimi CLI "工具调用解析" + `ToolCall`/`ToolResult` Wire 事件,多提供商 -> **注**:所有工具调用 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复),差异在于通过结构化 API 返回 tool calls。 +> **注 1**:所有工具调用 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复),差异在于通过结构化 API 返回 tool calls。 +> +> **注 2**:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 具有工具系统能力(多支持 MCP),但本仓库现有证据不足以确认其使用原生 API function calling,暂不列入。Oh My OpenAgent 基于 OpenCode Harness 层,继承工具调用架构但不直接调用 LLM API。 ### 混合 ReAct 循环 @@ -373,10 +376,12 @@ Tree-sitter AST 解析(30+ 语言) - **编辑优先**(Aider):LLM 直接输出代码修改,需文本解析,工具是辅助 - **工具调用**(Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose、Copilot CLI、Kimi CLI):LLM 通过结构化 function calling 操作环境,是主流模式 -- **混合 ReAct**(SWE-agent):兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 +- **混合 ReAct**(SWE-agent、mini-swe-agent):兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 - **事件驱动**(OpenHands):完全解耦的事件总线,最灵活但最复杂 -> **关键认知**:"工具调用"与"ReAct 循环"并非互斥。所有 Agent 内部都遵循 ReAct 模式,差异在于**动作表达方式**:结构化 API(function calling)还是文本解析。Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 暂因证据不足未列入「工具调用」流派。 +> **关键认知**:"工具调用"与"ReAct 循环"并非互斥。所有 Agent 内部都遵循 ReAct 模式,差异在于**动作表达方式**:结构化 API(function calling)还是文本解析。 +> +> **未列入的 Agent**:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 暂因证据不足未列入「工具调用」流派。Oh My OpenAgent 基于 OpenCode Harness 层,继承工具调用架构但不直接调用 LLM API,视为「工具调用」的间接成员。 ### 2. Gemini CLI 是事实上的"开源 Claude Code 模板" From 544f79020d40b081e2072baa38439af921e51b18 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 31 Mar 2026 13:24:28 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=BD=AF=E5=8C=96=20ReAct=20=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E8=A1=A8=E8=BF=B0=EF=BC=9A=E9=81=B5=E5=BE=AA=20ReAct?= =?UTF-8?q?=20=E6=A8=A1=E5=BC=8F=20=E2=86=92=20ReAct-like=20=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据 review 建议,将注释从'所有 Agent 都遵循 ReAct 模式'改为 '许多 coding agent 都可以理解为 ReAct-like 循环',避免概念争议。 同步更新 README 和 architecture-deep-dive 两处注释。 Co-authored-by: Qwen-Coder --- README.md | 2 +- docs/comparison/architecture-deep-dive.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 27d67403..214649ea 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ | **混合 ReAct** | SWE-agent, mini-swe-agent | 兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 | | **事件驱动** | OpenHands | EventStream 发布/订阅,Action/Observation 完全解耦 | -> **注 1**:"工具调用"和"ReAct 循环"并非互斥——所有 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复)。上表按**动作表达方式**区分:是否通过结构化 API(function calling)还是文本解析来表达动作。 +> **注 1**:许多交互式 coding agent 都可以理解为 ReAct-like 循环(reasoning → acting → observation → repeat)。上表为了可操作地分类,主要按**动作表达/编排机制**区分:function calling、文本解析、编辑格式、事件流等。 > > **注 2**:以下 Agent 未列入上表,原因各异: > - **Cursor、Warp、Continue、Qoder CLI**:闭源/IDE 嵌入式 Agent,具有工具系统能力(多支持 MCP),但本仓库现有证据不足以确认其使用原生 API function calling diff --git a/docs/comparison/architecture-deep-dive.md b/docs/comparison/architecture-deep-dive.md index 922dc778..a2bd8d57 100644 --- a/docs/comparison/architecture-deep-dive.md +++ b/docs/comparison/architecture-deep-dive.md @@ -112,7 +112,7 @@ graph TD - Copilot CLI 使用 YAML 定义的代理,`tool_choice` 列出现在模型配置矩阵 - Kimi CLI "工具调用解析" + `ToolCall`/`ToolResult` Wire 事件,多提供商 -> **注 1**:所有工具调用 Agent 内部都遵循 ReAct 模式(思考→行动→观察→重复),差异在于通过结构化 API 返回 tool calls。 +> **注 1**:许多交互式 coding agent 都可以理解为 ReAct-like 循环(reasoning → acting → observation → repeat)。差异主要在于**动作表达/编排机制**:function calling、文本解析、编辑格式、事件流等。 > > **注 2**:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 具有工具系统能力(多支持 MCP),但本仓库现有证据不足以确认其使用原生 API function calling,暂不列入。Oh My OpenAgent 基于 OpenCode Harness 层,继承工具调用架构但不直接调用 LLM API。 @@ -379,7 +379,7 @@ Tree-sitter AST 解析(30+ 语言) - **混合 ReAct**(SWE-agent、mini-swe-agent):兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征 - **事件驱动**(OpenHands):完全解耦的事件总线,最灵活但最复杂 -> **关键认知**:"工具调用"与"ReAct 循环"并非互斥。所有 Agent 内部都遵循 ReAct 模式,差异在于**动作表达方式**:结构化 API(function calling)还是文本解析。 +> **关键认知**:许多交互式 coding agent 都可以理解为 ReAct-like 循环(reasoning → acting → observation → repeat)。本文为了可操作地分类,主要按**动作表达/编排机制**区分:function calling、文本解析、编辑格式、事件流等。ReAct 原论文的核心是 reasoning + acting + observation 的交错交互模式,不强制要求动作用纯文本表达。 > > **未列入的 Agent**:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 暂因证据不足未列入「工具调用」流派。Oh My OpenAgent 基于 OpenCode Harness 层,继承工具调用架构但不直接调用 LLM API,视为「工具调用」的间接成员。