文档版本: v1.0
日期: 2026-03-22
作者: 中书省
代码基准: xbot @ 43,522 行 Go 代码(142 个 .go 文件,非测试)
| 模块 | 路径 | 行数(约) | 职责 |
|---|---|---|---|
| agent/ | 核心引擎 | ~12,000 | Agent 运行循环、上下文管理、中间件、SubAgent |
| tools/ | 工具系统 | ~6,500 | Shell/Edit/Read/Grep/Glob/Fetch 等 15+ 工具 |
| llm/ | LLM 调用层 | ~2,500 | OpenAI/Anthropic 双实现 + 重试 + 流式 |
| memory/ | 记忆系统 | ~3,000 | MemoryProvider 接口 + flat/letta 两种实现 |
| session/ | 会话管理 | ~1,500 | TenantSession 多租户会话持久化 |
| storage/ | 存储层 | ~4,000 | SQLite 持久化 + 向量数据库 |
| channel/ | 渠道集成 | ~2,000 | 飞书/Webhook 多渠道消息分发 |
| tools/sandbox_runner.go | Docker 沙箱 | ~1,200 | 容器生命周期管理 |
| oauth/ | OAuth 认证 | ~800 | 多 provider OAuth 流程 |
| bus/ | 消息总线 | ~500 | 统一消息收发抽象 |
| cron/ | 定时任务 | ~300 | Cron 任务调度 |
┌─────────────────────────────────────────────────────────────────────────┐
│ 入口层 │
│ channel/feishu.go ──→ bus.MessageBus ──→ Agent.HandleMessage() │
│ channel/webhook.go ─┘ ↓ │
└──────────────────────────── session.TenantSession ─────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Agent 引擎核心 (agent/) │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Middleware │──→│ engine.Run │──→│ Tool Executor │ │
│ │ Pipeline │ │ (runLoop) │ │ (buildToolExec) │ │
│ └─────────────┘ └──────────────┘ └──────────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ SystemPrompt ContextManager ToolHook Chain │
│ ChannelPrompt (Phase1/Phase2) (Pre/PostToolUse) │
│ MemoryInject ObservationMasking MCP Integration │
│ ProjectHint Offload/Recall SubAgent Dispatch │
│ SkillLoad ContextEdit PathGuard │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 上下文管理四层防御体系 │ │
│ │ Layer 1: Observation Masking (遮蔽旧 tool result) │ │
│ │ Layer 2: Offload to Disk (大结果落盘) │ │
│ │ Layer 3: Smart Compress (LLM 摘要压缩) │ │
│ │ Layer 4: Context Edit (LLM 主动裁剪) │ │
│ │ Plus: RecallTracker → SummaryRefine (摘要精化) │ │
│ │ Plus: TopicDetector (话题分区压缩) │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ LLM 调用层 (llm/) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ OpenAILLM │ │ AnthropicLLM │ │ RetryLLM │ │
│ │ (openai.go) │ │(anthropic.go)│ │ (retry.go) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ↕ ↕ ↕ │
│ ChatMessage/ToolCall/LLMResponse/StreamEvent (统一类型抽象) │
└─────────────────────────────────────────────────────────────────────────┘
agent/engine.go 中的 Run() 方法是整个系统的核心。其运行循环如下:
Run(config)
├── 初始化 messages (system + history)
├── 构建中间件链 (middleware pipeline)
├── FOR iteration := 1; ; iteration++ {
│ ├── middleware.Process() → 构建 system prompt
│ ├── contextManager.Manage() → 上下文管理四层防御
│ ├── llm.Generate(messages, tools) → 获取响应
│ ├── IF finishReason == "stop" → 提取回复,结束
│ ├── IF finishReason == "tool_calls" →
│ │ ├── FOR each tool_call {
│ │ │ ├── hookChain.PreToolUse()
│ │ │ ├── tool.Execute(ctx)
│ │ │ ├── hookChain.PostToolUse()
│ │ │ └── append tool message
│ │ └── }
│ │ └── observationMasking.Mask() → 遮蔽旧结果
│ └── offload.LargeResults() → 大结果落盘
├── 持久化会话到 session
└── 推送进度事件
agent/middleware.go 定义了 Middleware 接口和 MessageContext:
// agent/middleware.go:19
type MessageContext struct {
Ctx context.Context
SystemParts map[string]string // 按 key 排序拼接
Extra map[string]any // 跨中间件数据传递
}
// agent/middleware.go:6
type Middleware interface {
Name() string
Priority() int
Process(*MessageContext) error
}
当前中间件优先级链(agent/middleware_builtin.go):
| 优先级 | 中间件 | 文件 | 职责 |
|---|---|---|---|
| 0 | SystemPromptMiddleware | middleware_builtin.go | prompt.md 模板渲染 |
| 1 | ProjectHintMiddleware | project_hint.go | 注入归档记忆中的项目知识卡片 |
| 5 | ChannelPromptMiddleware | channel_prompt.go | 注入渠道特化 prompt |
| 100 | MemoryInjectMiddleware | middleware_builtin.go | 注入 Core/Archival/Recall 记忆 |
| 200 | SkillInjectMiddleware | skills.go | 注入 Skill 指令 |
| 300 | AgentCatalogMiddleware | middleware_builtin.go | 注入 SubAgent 角色目录 |
| 400 | ContextToolsMiddleware | middleware_builtin.go | 注入 context_edit/offload 工具 |
| 500 | ToolHookMiddleware | middleware_builtin.go | 注入 Hook 机制配置 |
tools/interface.go 定义了核心接口:
// tools/interface.go:11
type Tool interface {
Name() string
Description() string
Parameters() []llm.ToolParam
Execute(ctx context.Context, params string, toolCtx *ToolContext) (string, error)
}
ToolContext(tools/interface.go:18)携带会话级上下文:
type ToolContext struct {
WorkingDir string
WorkspaceRoot string
CWD string // 当前工作目录
TenantID int64 // 租户 ID
SessionKey string // 会话键
...
SandboxEnabled bool // 沙箱模式
SandboxWorkDir string // 沙箱内工作目录
MCPManager SessionMCPManagerProvider // MCP 工具管理器
SubAgentMgr SubAgentManager // SubAgent 管理器
MemoryProvider MemoryProvider // 记忆系统
}
内置工具清单(tools/ 目录):
| 工具 | 文件 | 功能 |
|---|---|---|
| Shell | shell.go | 命令执行(120s 超时) |
| Edit | edit.go | 文件编辑(5 种模式:create/replace/line/regex/insert) |
| Read | read.go | 文件读取(默认 500 行,可配置) |
| Grep | grep.go | 正则搜索(Go RE2 语法) |
| Glob | glob.go | 文件模式匹配(翻译为 find 命令) |
| Fetch | fetch.go | 网页抓取(HTML→Markdown + readability + token 裁剪) |
| SubAgent | subagent.go | SubAgent 调度(one-shot + interactive) |
| ContextEdit | (agent/context_edit.go) | LLM 主动上下文管理 |
| Offload/Recall | (agent/offload.go) | 大结果落盘/召回 |
| WebSearch | web_search.go | Tavily 搜索 |
| Todo | todo.go | 任务列表管理 |
| Cron | cron.go | 定时任务 |
| PathGuard | path_guard.go | 读写路径校验 |
| ToolHook | hook.go | 工具执行生命周期 Hook |
| MCP | session_mcp.go | MCP 协议工具动态加载 |
llm/interface.go 定义了统一接口:
type LLM interface {
Generate(ctx, model, messages, tools, thinkingMode) (*LLMResponse, error)
ListModels() []string
}
type StreamingLLM interface {
GenerateStream(ctx, model, messages, tools, thinkingMode) (<-chan StreamEvent, error)
}
关键实现:
- OpenAILLM(
llm/openai.go):使用openai-go/v3SDK,支持 streaming、reasoning 模型 - AnthropicLLM(
llm/anthropic.go):原生 HTTP 实现,支持 extended thinking - RetryLLM(
llm/retry.go):装饰器模式,5 次重试 + 指数退避 + 429 额外退避 + 并发信号量
llm/types.go 中的 ChatMessage 是核心数据结构,包含 CacheHint 字段用于 LLM 缓存提示("static" 标记跨请求不变的内容)。
这是 xbot 最核心的技术特色,分布在 agent/ 目录多个文件中:
消息进入 runLoop
│
▼
[Layer 1] Observation Masking (observation_masking.go)
│ 自动遮蔽超过阈值的老 tool result
│ 保留 ID 占位符,支持 recall_masked 召回
│
▼
[Layer 2] Offload (offload.go)
│ 超大 tool result 落盘到 session/{key}/offloads/
│ LLM 视图只保留摘要 + offload ID
│ 支持 offload_recall 按需召回(分页)
│
▼
[Layer 3] Smart Compress (compress.go + trigger.go)
│ 基于 token 阈值 + 工具调用模式智能触发
│ LLM 生成摘要替换历史消息
│ 双视图架构:LLM 视图 vs Session 视图
│ SummaryRefine: 检测高频召回 → 精化摘要
│
▼
[Layer 4] Context Edit (context_edit.go)
│ LLM 主动裁剪(list/delete/truncate/replace)
│ 保护最近 3 条消息
│
▼
[Plus] Topic Detection (topic.go)
│ 余弦相似度话题分区
│ 按话题粒度压缩(vs 全量压缩)
│
▼
[Plus] RecallTracker (summary_refine.go)
跟踪 LLM recall 行为
同一内容召回 ≥3 次 → 触发摘要精化
memory/memory.go 定义了可插拔接口:
type MemoryProvider interface {
Recall(ctx, query) (string, error)
Store(ctx, content) error
Core() CoreMemory // persona/human/working_context 三个块
...
}
三种实现层次:
- flat:简单拼接,适合轻量场景
- letta:智能管理,包含 Core/Archival/Recall 三层,支持归档检索
xbot 的 SubAgent 架构是其独特之处(agent/subagent_tenant.go):
- 每个 SubAgent 有独立的 TenantSession(通过
deriveSubAgentTenantID派生) - 支持 one-shot 和 interactive 两种模式
- 深度限制:当前最大 3 层(main → crown-prince → secretariat → chancellery)
- 角色定义:
.xbot/agents/*.md(Markdown 文件) - 动态发现:
AgentStore扫描全局 + 工作目录 agent 定义
- PathGuard(
tools/path_guard.go):路径校验,支持读写分离、只读根目录 - Docker Sandbox(
tools/sandbox_runner.go):完整容器生命周期管理- 支持自定义镜像、资源限制
- 容器内执行 Shell/Edit/Read 等工具
- 超时控制 + 自动清理
Claude Code 的上下文管理主要依赖 compaction(对话摘要压缩),在接近 75% 上下文窗口时自动触发。而 xbot 实现了一套更精细的多层防御:
| 能力 | Claude Code | xbot |
|---|---|---|
| 自动摘要压缩 | ✅ /compact + auto-compact | ✅ compress.go + trigger.go |
| Observation Masking | ✅ (隐式) | ✅ 显式四层防御,可追踪指标 |
| Offload/Recall | ❌ 无原生支持 | ✅ 大结果落盘 + 按需召回(分页) |
| LLM 主动上下文编辑 | ✅ context_edit 工具 | ✅ context_edit.go(5 种操作) |
| 话题分区压缩 | ❌ | ✅ topic.go 余弦相似度分区 |
| 摘要质量监控 | ❌ | ✅ RecallTracker + SummaryRefine |
| 压缩触发智能判断 | 基于阈值 | 基于 token + 工具调用模式 |
xbot 独创点:
- RecallTracker(
summary_refine.go):跟踪 LLM 对被压缩内容的召回频率。当同一内容被召回 ≥3 次,说明摘要遗漏了关键信息,自动触发摘要精化(refine)回写。 - TopicDetector(
topic.go):通过余弦相似度检测话题边界,实现按话题粒度压缩而非全量压缩,避免跨话题信息丢失。 - 双视图架构(
compress.go):LLM 视图保留 tool 消息用于当前 Run(),Session 视图只保留纯对话用于持久化。
Claude Code 是单用户 CLI 工具,而 xbot 从设计之初就是多租户架构:
- TenantSession(
session/tenant.go):每个用户×渠道×聊天有独立会话 - Channel 抽象(
channel/):飞书、Webhook 等多渠道统一接口 - 渠道特化 Prompt(
agent/channel_prompt.go):不同渠道自动切换系统提示词
这意味着 xbot 可以同时服务多个用户,每个用户有独立的记忆、会话、上下文。
Claude Code 是单一 Agent。xbot 的「三省六部」体制是一种创新的 Multi-Agent 工作流编排:
- 每个角色有独立的 Agent 定义、系统提示词、记忆空间
- 层级间有明确的职责分工(制定方案 → 审核 → 执行 → 验证)
- Interactive SubAgent 支持多轮协商
这种设计特别适合复杂工作流,如代码审查(中书省写方案 → 门下省审核 → 六部执行)。
Claude Code 的记忆是单会话的。xbot 有完整的三层记忆:
| 层 | Claude Code | xbot |
|---|---|---|
| 工作记忆 | 会话上下文 | Core Memory (persona/human/working_context) |
| 长期记忆 | ❌ 无原生支持 | Archival Memory (向量检索) |
| 对话历史 | 文件系统 | Recall Memory (时间范围检索) |
| 跨会话记忆 | CLAUDE.md 文件 | Core Memory + Archival Memory |
xbot 有完整的运行指标系统(agent/metrics.go),使用 atomic 操作零锁收集:
type AgentMetrics struct {
TotalConversations atomic.Int64 // 总对话数
TotalIterations atomic.Int64 // 总迭代数
MaskingEvents atomic.Int64 // Observation Masking 触发次数
CompressRatio computed // 总体压缩比
OffloadRecallRate computed // offload 回调率
SummaryRefineRate computed // 摘要精化率
...
}
Claude Code 没有对等的系统级指标。
middleware.go 的 Priority-based Pipeline 使得系统提示词的构建高度模块化。添加新的能力注入只需新增一个 Middleware 实现,无需修改核心引擎。Claude Code 的系统提示词构建是硬编码的。
| 维度 | Claude Code | xbot | 差距评估 |
|---|---|---|---|
| 代码理解 | ★★★★★ | ★★★☆☆ | 显著差距 |
| 代码编辑精确度 | ★★★★★ | ★★★☆☆ | 显著差距 |
| 上下文管理 | ★★★★☆ | ★★★★★ | xbot 领先 |
| 工具调用可靠性 | ★★★★☆ | ★★★★☆ | 持平 |
| Agent 自主性 | ★★★★★ | ★★★★☆ | 中等差距 |
| 错误恢复 | ★★★★☆ | ★★★☆☆ | 中等差距 |
| 多文件编辑 | ★★★★★ | ★★☆☆☆ | 显著差距 |
| 并行工具执行 | ★★★★★ | ★★★☆☆ | 中等差距 |
| 多租户 | ★☆☆☆☆ | ★★★★★ | xbot 领先 |
| 记忆持久性 | ★★☆☆☆ | ★★★★★ | xbot 领先 |
| 多渠道 | ★☆☆☆☆ | ★★★★★ | xbot 领先 |
| MCP 生态 | ★★★★☆ | ★★★☆☆ | 轻微差距 |
| 可观测性 | ★★☆☆☆ | ★★★★★ | xbot 领先 |
| 子 Agent 编排 | ★★☆☆☆ | ★★★★☆ | xbot 领先 |
| 代码搜索 | ★★★★★ | ★★★☆☆ | 中等差距 |
| Git 集成 | ★★★★★ | ★★☆☆☆ | 显著差距 |
Claude Code 优势:
- 内置代码索引和 AST 级别的理解
- 能精确理解函数调用关系、类型层次
- 对大型代码库(100k+ 文件)有优化索引
xbot 现状:
- 依赖
Read/Grep/Glob三个工具进行代码探索 Grep(tools/grep.go)使用 Go RE2 正则,支持上下文行Glob(tools/glob.go)翻译为find命令执行Read(tools/read.go)默认 500 行上限,需多次读取- 无 AST 解析、无符号索引
差距原因:xbot 的代码理解完全依赖 LLM 的"阅读"能力 + 文本搜索工具,缺少结构化代码理解层。
Claude Code 优势:
- 原生支持多文件同时编辑
- 编辑有原子性保证(全部成功或全部回滚)
- 理解文件间依赖关系,确保一致性
xbot 现状:
Edit工具(tools/edit.go)是单文件操作- 5 种编辑模式(create/replace/line/regex/insert),功能完整
- 但每次只能编辑一个文件
- 无事务性保证,编辑失败需手动回滚
- 无 undo 机制
差距原因:xbot 缺少多文件事务编辑能力。
Claude Code 优势:
- 内置代码符号搜索(函数、类、变量)
- 支持定义跳转(go to definition)
- 支持引用查找(find references)
- 对代码结构有语义理解
xbot 现状:
Grep工具基于正则表达式,纯文本匹配- 无法区分代码注释和实际代码
- 无法做语义搜索(如"找到所有调用
Generate方法的地方") globToFindArgs将 glob 翻译为 find 命令,有跨平台处理
Claude Code 优势:
- 深度 Git 集成:自动创建分支、提交、创建 PR
- 理解 diff 语义,能做精确的代码审查
git status实时感知文件变更
xbot 现状:
- Git 操作通过 Shell 工具执行(
git add、git commit等) - 无专门的 Git 工具
- 无法自动创建分支/PR
- Skill 层面有
gitskill 提供工作流指导
Claude Code 优势:
- 支持并行执行多个独立的工具调用
- Programmatic tool calling:在一次 LLM 输出中执行多个工具
- 显著减少 round-trip 延迟
xbot 现状:
engine.go的 runLoop 串行处理 tool_calls- LLM 可以在一次响应中返回多个 tool_calls
- 但当前执行是逐个处理的(需要确认——见 engine.go 的实现)
差距分析:根据 engine.go 的代码结构,tool_calls 的处理在循环中逐个执行,理论上可以改为并行但需要处理依赖关系和并发安全。
Claude Code 优势:
- 编译错误自动修复
- 测试失败自动分析 + 修复
- 运行时错误自动诊断
- 有完整的"试错-修复"循环
xbot 现状:
llm/retry.go提供 LLM 调用级重试(5 次 + 指数退避)IsInputTooLongError检测上下文过长并允许特殊处理- 工具执行错误会返回给 LLM,由 LLM 自行决定下一步
- 但无专门的错误分类和自愈策略
- 无编译→修复→测试的自动化循环
方案描述:
在 agent/engine.go 的 runLoop 中,当 LLM 返回多个 tool_calls 时,分析依赖关系,对无依赖的工具调用并行执行。
涉及模块:
agent/engine.go:runLoop 中的工具执行循环tools/hook.go:Hook 链需要支持并发安全tools/interface.go:ToolContext 可能需要 Clone 机制
实现难度:中等
预计工作量:3-5 天
预期收益:
- 减少 30-50% 的工具执行延迟(对 Read/Grep/Fetch 等无副作用工具尤其显著)
- 对 WebSearch + Fetch + Read 组合场景效果最佳
关键设计:
tool_calls = llmResponse.ToolCalls
dependencyGraph = analyzeDependencies(tool_calls) // 分析参数间的依赖
independentGroups = topologicalSort(dependencyGraph)
FOR each group IN independentGroups (可并行) {
results = executeParallelGroup(group)
}
验证标准:
- 无依赖的 Read 调用并行执行(通过日志时间戳验证)
- 有依赖的调用按序执行(如 Read 的结果被 Edit 使用)
- Hook 链在并发场景下正确触发
方案描述:
新增 BatchEdit 工具,支持在一次调用中编辑多个文件。使用事务模式:先准备所有编辑(dry-run),确认无误后一次性应用,失败时全部回滚。
涉及模块:
tools/edit.go:新增 BatchEdit 模式tools/batch_edit.go:新文件,事务管理tools/path_guard.go:批量路径校验
实现难度:中等
预计工作量:5-7 天
预期收益:
- 重构场景效率提升 3-5 倍(如重命名函数需修改 10+ 文件)
- 编辑原子性保证,避免部分修改导致的编译错误
关键设计:
type BatchEditRequest struct {
Edits []EditOperation // 多个编辑操作
DryRun bool // 预览模式
}
type BatchEditResult struct {
Success bool
Applied []EditResult
Rollback func() error // 回滚函数
Diff string // 完整 diff
}
验证标准:
- 10 个文件的批量修改在单次工具调用中完成
- DryRun 模式正确预览所有变更
- 回滚功能完全恢复原始状态
- 与 PathGuard 无缝集成
方案描述:
新增 CodeSearch 工具,基于代码索引提供语义级搜索能力。包括:
- 符号搜索:按函数名、类型名、变量名搜索定义
- 引用搜索:查找符号的所有引用位置
- AST 查询:按代码结构搜索(如"所有实现 LLM 接口的类型")
涉及模块:
tools/code_search.go:新文件,代码搜索工具- 新增
codeindex/包:代码索引(基于 go/packages 或 tree-sitter)
实现难度:高
预计工作量:10-14 天
预期收益:
- 代码理解精确度大幅提升(从正则匹配到语义匹配)
- 减少无效的 Read/Grep 调用
- 对大型代码库(10k+ 文件)效果显著
技术选型:
- 方案 A:
go/packages+go/ast(Go 项目专用,精确但慢) - 方案 B:
tree-sitter(多语言支持,需要 bindings) - 方案 C:基于 grep + 后处理的轻量级方案(快速实现)
验证标准:
- “查找所有实现
Tool接口的类型” 返回正确结果 - “查找
Generate方法的所有调用点” 返回正确结果 - 搜索延迟 < 2s(对于 500 文件项目)
方案描述: 新增原生 Git 工具集,替代通过 Shell 调用 git 命令的方式:
| 工具 | 功能 |
|---|---|
GitBranch | 创建/切换/列出分支 |
GitCommit | 智能提交(自动检测变更文件、生成提交信息) |
GitDiff | 查看 diff(支持文件/暂存区/提交范围) |
GitLog | 查看提交历史(支持搜索过滤) |
GitBlame | 查看行级 blame 信息 |
GitPR | 创建 PR(GitHub/GitLab API) |
涉及模块:
tools/git.go:新文件,Git 工具集tools/git_branch.go,tools/git_commit.go等- 可能需要新增
git/包封装 git 操作
实现难度:中等
预计工作量:7-10 天
预期收益:
- Git 操作更可靠(不依赖 shell 转义和输出解析)
- 支持 diff-aware 提交(LLM 理解改了什么)
- 自动创建分支/PR,减少手动操作
方案描述: 在工具执行失败后,自动进入"分析-修复-验证"循环:
工具执行失败
↓
分析错误类型(编译错误 / 运行时错误 / 测试失败 / 语法错误)
↓
根据错误类型选择修复策略
↓
自动修复 + 重新验证
↓
成功 → 继续 / 失败 → 报告
涉及模块:
agent/engine.go:runLoop 中增加错误处理分支- 新增
agent/error_recovery.go:错误分类和修复策略 - 可能需要新的 middleware 注入修复上下文
实现难度:高
预计工作量:10-14 天
预期收益:
- 减少 60%+ 的手动干预(编译错误、测试失败自动修复)
- 提升长任务的成功率
错误分类设计:
type ErrorCategory int
const (
ErrorCompile ErrorCategory = iota // 编译错误 → 直接修复
ErrorTest // 测试失败 → 分析失败原因
ErrorRuntime // 运行时错误 → 查看日志
ErrorTool // 工具配置错误 → 调整参数
ErrorUnknown // 未知错误 → 报告给用户
)
方案描述:
利用 ChatMessage.CacheHint(已在 llm/types.go:24 定义)和 Anthropic Prompt Caching API,实现系统提示词的跨请求缓存:
涉及模块:
llm/anthropic.go:利用 Anthropic 的cache_control字段llm/openai.go:利用 OpenAI 的 automatic cachingagent/middleware.go:在构建系统提示词时标注 CacheHint
实现难度:中等
预计工作量:3-5 天
预期收益:
- 系统提示词 token 消耗减少 80-90%(缓存命中时)
- LLM 响应延迟降低 30-50%
- API 成本显著降低
方案描述:
增强现有 Edit 工具,增加以下能力:
- Undo 支持:每次编辑前自动创建备份,支持
{"mode": "undo"}回滚 - Diff 预览:
{"mode": "preview", ...}先显示变更 diff,不实际修改 - 行范围编辑:
{"mode": "range", "start": 10, "end": 20, "content": ...}替换行范围 - 语法感知:对 Go/Python/JS 等语言,基于缩进自动对齐
涉及模块:
tools/edit.go:扩展 EditTool- 新增
tools/edit_undo.go:Undo 管理 tools/edit_preview.go:Diff 生成
实现难度:低-中
预计工作量:5-7 天
方案描述:
增强 ProjectHintMiddleware(agent/project_hint.go),实现自动化的项目知识图谱:
- 自动索引:首次打开项目时,自动扫描并生成项目结构摘要
- 变更感知:监控文件变更,增量更新索引
- 智能注入:根据当前对话上下文,选择最相关的项目知识注入
涉及模块:
agent/project_hint.go:增强 ProjectHintMiddleware- 可能新增
projectindex/包
实现难度:中等
预计工作量:7-10 天
方案描述: 为 xbot 添加 AST 级代码理解能力,超越文本搜索:
- 类型推断:理解函数签名、类型层次、接口实现
- 调用图:构建函数调用关系图
- 变更影响分析:修改一个函数时,自动分析影响范围
涉及模块:
- 新增
astindex/包 tools/code_search.go:扩展语义搜索agent/middleware_builtin.go:注入项目结构信息
实现难度:高
预计工作量:14-21 天
预期收益:
- 代码理解能力追平 Claude Code
- 精确的重构支持
方案描述: 增强 MCP 集成能力:
- MCP 工具搜索:LLM 可搜索可用的 MCP 工具(类似
search_tools) - MCP 工具缓存:缓存 MCP 工具的 schema 定义
- MCP 连接池:优化 MCP Server 连接管理
- MCP 权限控制:细粒度的 MCP 工具权限管理
涉及模块:
tools/session_mcp.go:扩展 SessionMCPManager- 新增
tools/mcp_discovery.go:工具发现 tools/mcp_auth.go:权限管理
实现难度:中等
预计工作量:5-7 天
方案描述: 增强流式响应体验:
- 渐进式渲染:飞书渠道中,LLM 输出实时推送到卡片
- 工具执行实时反馈:Shell 命令输出实时流式显示
- 结构化进度:增强
ProgressEvent(agent/progress.go),支持更细粒度的进度展示
涉及模块:
agent/engine.go:流式输出处理agent/progress.go:增强进度事件channel/feishu.go:流式卡片更新
实现难度:中等
预计工作量:7-10 天
方案描述: 支持不同任务使用不同模型:
- 代码编辑用 Claude(精确度高)
- 搜索和摘要用 GPT-4o(速度快)
- 简单问答用 GPT-4o-mini(成本低)
涉及模块:
agent/llm_config_handler.go:模型选择逻辑agent/engine.go:runLoop 中动态选择模型agent/llm_factory.go:模型工厂
实现难度:中等
预计工作量:5-7 天
方案描述: 为 SubAgent 编排添加可视化能力:
- 执行流程图:实时展示 Agent 调用链和执行状态
- 时间线视图:展示每个 Agent 的执行时间和工具调用
- Token 消耗追踪:按 Agent 分组的 Token 消耗
涉及模块:
agent/metrics.go:扩展指标agent/progress.go:增强进度事件- 可能新增 Web UI
实现难度:高
预计工作量:14-21 天
Week 1-2: 并行工具执行 (P0-4.1.1)
└── engine.go 改造 + Hook 并发安全 + 测试
Week 2-3: 多文件事务编辑 (P0-4.1.2)
└── BatchEdit 工具 + 事务管理 + 回滚机制
Week 3-4: 增强型 Edit 工具 (P1-4.2.4)
└── Undo + Diff 预览 + 行范围编辑
Week 4-5: LLM 缓存优化 (P1-4.2.3)
└── CacheHint 集成 + Anthropic/OpenAI 缓存 API
Week 5-6: 代码语义搜索 (P0-4.1.3)
└── CodeSearch 工具 + 代码索引(tree-sitter 方案)
里程碑:核心编码体验追平 Claude Code 70%
Week 7-8: Git 深度集成 (P1-4.2.1)
└── Git 工具集 + 智能提交 + PR 创建
Week 8-10: 错误自愈循环 (P1-4.2.2)
└── 错误分类 + 修复策略 + 自动验证
Week 10-11: 项目级知识注入 (P1-4.2.5)
└── 自动索引 + 变更感知 + 智能注入
Week 11-12: MCP 生态增强 (P2-4.3.2)
└── 工具搜索 + 缓存 + 权限控制
Week 12-14: 流式响应优化 (P2-4.3.3)
└── 渐进式渲染 + 实时反馈
里程碑:综合能力追平 Claude Code 85%
Week 15-18: AST 级代码理解 (P2-4.3.1)
└── 类型推断 + 调用图 + 影响分析
Week 18-20: 多模型协作 (P2-4.3.4)
└── 动态模型选择 + 成本优化
Week 20-26: 编排引擎可视化 (P2-4.3.5)
└── 执行流程图 + Web UI
里程碑:在上下文管理、多租户、SubAgent 编排维度 超越 Claude Code
| 指标 | 当前值 | Phase 1 目标 | Phase 2 目标 | Phase 3 目标 |
|---|---|---|---|---|
| 代码理解精确度 | ★★★☆☆ | ★★★★☆ | ★★★★☆ | ★★★★★ |
| 编辑效率(多文件场景) | ★★☆☆☆ | ★★★★☆ | ★★★★☆ | ★★★★★ |
| LLM 缓存命中率 | ~0% | >60% | >80% | >90% |
| 错误自愈率 | ~10% | ~30% | >60% | >80% |
| 工具执行延迟 | 基线 | -30% | -40% | -50% |
| API 成本效率 | 基线 | -20% | -40% | -50% |
| 文件 | 行数 | 核心类型/函数 | 说明 |
|---|---|---|---|
agent/engine.go | ~650 | Run(), runLoop | Agent 核心运行循环 |
agent/agent.go | ~750 | Agent, HandleMessage() | Agent 主结构和消息处理 |
agent/context.go | ~150 | PromptLoader, PromptData | 系统提示词模板 |
agent/middleware.go | ~100 | Middleware, MessageContext | 中间件接口 |
agent/middleware_builtin.go | ~200 | 8 个中间件实现 | 内置中间件 |
agent/compress.go | ~250 | CompressResult, SmartCompress | 智能压缩(LLM 摘要) |
agent/trigger.go | ~150 | TriggerInfo, ToolCallPattern | 压缩触发策略 |
agent/context_edit.go | ~200 | ContextEditAction | LLM 主动上下文编辑 |
agent/observation_masking.go | ~250 | MaskedObservation | Observation 遮蔽 |
agent/offload.go | ~300 | Offload/Recall 落盘召回 | 大结果落盘 |
agent/topic.go | ~400 | TopicDetector | 话题分区检测 |
agent/summary_refine.go | ~230 | RecallTracker | 摘要质量监控 |
agent/context_manager.go | ~100 | ContextManager 接口 | 上下文管理器抽象 |
agent/quality.go | ~150 | ActiveFile, 语义匹配 | 上下文质量评估 |
agent/metrics.go | ~370 | AgentMetrics | 运行指标系统 |
agent/progress.go | ~70 | ProgressEvent | 进度事件 |
agent/project_hint.go | ~150 | ProjectHintMiddleware | 项目知识注入 |
agent/subagent_tenant.go | ~50 | deriveSubAgentTenantID | SubAgent 租户派生 |
agent/registry.go | ~460 | RegistryManager | Skill/Agent 发布管理 |
agent/interactive.go | - | Interactive SubAgent | 多轮 SubAgent |
llm/interface.go | ~30 | LLM, StreamingLLM | LLM 统一接口 |
llm/types.go | ~200 | ChatMessage, ToolCall | 核心数据类型 |
llm/openai.go | ~350 | OpenAILLM | OpenAI 实现 |
llm/anthropic.go | ~400 | AnthropicLLM | Anthropic 实现 |
llm/retry.go | ~250 | RetryLLM | 重试装饰器 |
tools/interface.go | ~100 | Tool, ToolContext | 工具接口 |
tools/shell.go | ~200 | ShellTool | 命令执行 |
tools/edit.go | ~350 | EditTool | 文件编辑 |
tools/read.go | ~100 | ReadTool | 文件读取 |
tools/grep.go | ~200 | GrepTool | 正则搜索 |
tools/glob.go | ~370 | GlobTool | 文件匹配 |
tools/fetch.go | ~380 | FetchTool | 网页抓取 |
tools/hook.go | ~150 | ToolHook | 工具 Hook |
tools/subagent.go | ~200 | SubAgent 管理 | SubAgent 调度 |
tools/session_mcp.go | ~250 | SessionMCPManager | MCP 连接管理 |
tools/path_guard.go | ~200 | ResolveWritePath | 路径校验 |
tools/sandbox_runner.go | ~350 | Docker 沙箱 | 容器管理 |
memory/memory.go | ~50 | MemoryProvider | 记忆系统接口 |
session/tenant.go | ~200 | TenantSession | 多租户会话 |
| 决策 | 文件 | 原因 |
|---|---|---|
| 双视图架构(LLM View + Session View) | agent/compress.go:15-20 | 工具消息不持久化,但当前 Run 需要 |
| Middleware Priority Pipeline | agent/middleware.go:6 | 系统提示词模块化构建,可插拔扩展 |
| ToolContext 携带 MCP/SubAgent | tools/interface.go:18 | 工具可访问会话级资源 |
| RetryLLM 装饰器模式 | llm/retry.go | 统一重试策略,不侵入 LLM 实现 |
| PathGuard 读写分离 | tools/path_guard.go | 安全隔离读/写操作 |
| deriveSubAgentTenantID | agent/subagent_tenant.go | SubAgent 独立会话空间 |
基于公开信息,Claude Code 的核心架构特征:
| 特征 | 说明 |
|---|---|
| 单 Agent CLI 架构 | 单用户、单会话、本地执行 |
| Compaction 机制 | 75% 上下文窗口触发自动压缩 |
| Programmatic Tool Calling | 多工具并行执行,减少 round-trip |
| 内置代码索引 | AST 级代码理解,支持符号搜索 |
| 多文件编辑 | 原子性事务编辑 |
| Git 深度集成 | 自动分支、提交、PR |
| CLAUDE.md 记忆 | 项目级指令文件 |
| Docker 沙箱 | 容器化执行(近期新增) |
| MCP 支持 | Model Context Protocol 工具集成 |
xbot 已经在上下文管理、多租户、记忆持久性、SubAgent 编排、可观测性五个维度显著领先于 Claude Code。其独创的四层防御体系(Observation Masking → Offload → Smart Compress → Context Edit)加上 RecallTracker 和 TopicDetector 的组合,是目前业界最精细的上下文管理方案。
差距集中在代码理解、多文件编辑、Git 集成、并行执行四个传统编码工具维度——这些恰好是 Claude Code 作为 Anthropic 官方产品的积累优势。
战略定位:xbot 不应试图成为"另一个 Claude Code",而应发挥自身架构优势,成为多租户、多渠道、多 Agent 协作的 AI 工作流平台。编码能力的差距通过 Phase 1 的 3 个 P0 方案(并行执行、事务编辑、语义搜索)可在 6 周内缩小到 70% 水平,同时保留在上下文管理和 Agent 编排上的绝对优势。
核心论断:xbot 的多 Agent 编排 + 四层上下文防御 + 三层持久记忆,构成了 Claude Code 不具备的架构代差。补齐编码工具短板后,xbot 将在"AI 协作平台"这个更大的赛道上形成不可替代的竞争力。
本文档由中书省撰写,待门下省审核。