Crush 架构深度解æžï¼šç»ˆç«¯é‡Œçš„ AI ç¼–ç¨‹ææ¡£
Charmbracelet 出å“,一个让 LLM 直接æ“ä½œä½ ç»ˆç«¯çš„å¼€æºå·¥å…·
项目简介
Crush 是 Charmbracelet 团队推出的终端 AI 助手。它最大的特点是:AI å¯ä»¥ç›´æŽ¥è®¿é—®ä½ çš„ç»ˆç«¯ã€æ‰§è¡Œå‘½ä»¤ã€ç¼–è¾‘æ–‡ä»¶â€”â€”å°±åƒæœ‰ä¸€ä¸ªçœŸå®žçš„ç¼–ç¨‹ææ¡£ååœ¨ä½ æ—边。
æ”¯æŒ Windows/macOS/Linux,兼容 OpenAIã€Anthropicã€Googleã€Bedrock ç‰ä¸»æµ LLM æä¾›å•†ã€‚
æ ¸å¿ƒæž¶æž„ä¸€è§ˆ
┌─────────────────────────────────────────────────────────────â”
│ CLI Layer (cmd/) │
│ Cobra 命令 → Bubble Tea TUI │
└──────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────â”
│ App å调层 (app/) │
│ æŒæœ‰æ‰€æœ‰æœåŠ¡å®žä¾‹ï¼Œç®¡ç†ç”Ÿå‘½å‘¨æœŸå’Œäº‹ä»¶è®¢é˜… │
└──────┬───────────────────────────────────────────────┬──────┘
│ │
â–¼ â–¼
┌──────────────────────┠┌──────────────────────â”
│ Agent å调器 │ │ LSP Manager │
│ (agent/) │ │ (lsp/) │
│ - 会è¯ç®¡ç† │ │ - 多è¯è¨€æ”¯æŒ │
│ - 工具执行 │ │ - 诊æ–/引用 │
│ - æ¨¡åž‹åˆ‡æ¢ â”‚ └──────────────────────┘
└──────────┬───────────┘
│
â–¼
┌──────────────────────────────────────────────────────────────â”
│ 工具集 (agent/tools/) │
│ bash | edit | glob | grep | view | fetch | mcp | lsp │
└──────────────────────────────────────────────────────────────┘
æ ¸å¿ƒæ¨¡å—详解
1. CLI 层 (internal/cmd/)
å…¥å£ç‚¹ä½¿ç”¨ Cobra 框架,æä¾›äº¤äº’å¼ TUI å’Œéžäº¤äº’å¼ä¸¤ç§æ¨¡å¼ï¼š
- 交互模å¼ï¼šåŸºäºŽ Bubble Tea 构建的全功能终端界é¢
- éžäº¤äº’模å¼ï¼š
crush run "ä½ çš„é—®é¢˜" 直接输出结果
// main.go æ ¸å¿ƒé€»è¾‘
func main() {
cmd.Execute() // å¯åЍ Cobra 命令
}
2. App å调层 (internal/app/)
这是整个应用的"大脑",负责:
- æœåŠ¡ç»„è£…ï¼šåˆ›å»ºå¹¶æŒæœ‰ Sessionã€Messageã€Permissionã€LSP ç‰æœåŠ¡
- 事件订阅:通过 pubsub æœºåˆ¶å°†å„æœåŠ¡äº‹ä»¶è½¬å‘ç»™ TUI
- 生命周期管ç†ï¼šä¼˜é›…å…³é—ï¼Œç¡®ä¿æ‰€æœ‰èµ„æºæ£ç¡®é‡Šæ”¾
type App struct {
Sessions session.Service
Messages message.Service
AgentCoordinator agent.Coordinator
LSPManager *lsp.Manager
// ...
}
3. Agent æ ¸å¿ƒ (internal/agent/)
è¿™æ˜¯æœ€æ ¸å¿ƒçš„æ¨¡å—,实现了 AI Agent 的完整生命周期:
主è¦èŒè´£ï¼š
- 会è¯ç®¡ç†ï¼ˆåˆ›å»ºã€æ¢å¤ã€è‡ªåŠ¨æ‘˜è¦ï¼‰
- å·¥å…·è°ƒç”¨ï¼ˆè§£æž LLM 返回的工具调用请求并执行)
- 消æ¯é˜Ÿåˆ—(支æŒå¤šè½®å¯¹è¯æŽ’队)
- 模型切æ¢ï¼ˆå¯åœ¨ä¼šè¯ä¸åˆ‡æ¢å¤§/å°æ¨¡åž‹ï¼‰
关键技术点:
- 使用
charm.land/fantasy SDK 统一å°è£…å„å®¶ LLM API - 自动摘è¦ï¼šå½“ä¸Šä¸‹æ–‡è¶…è¿‡é˜ˆå€¼æ—¶ï¼Œè°ƒç”¨å°æ¨¡åž‹ç”Ÿæˆæ‘˜è¦
- æ ‡é¢˜ç”Ÿæˆï¼šä¸ºæ–°ä¼šè¯è‡ªåŠ¨ç”Ÿæˆæ ‡é¢˜
4. 工具系统 (internal/agent/tools/)
Crush æä¾›äº†ä¸°å¯Œçš„工具让 AI æ“ä½œä½ çš„çŽ¯å¢ƒï¼š
| 工具 | 功能 |
|---|
bash | 执行 Shell 命令(支æŒåŽå°ä»»åŠ¡ï¼‰ |
edit / multiedit | 精确编辑文件 |
view | è¯»å–æ–‡ä»¶å†…容 |
glob / grep | 文件æœç´¢å’Œå†…容æœç´¢ |
ls | 目录æµè§ˆ |
fetch | HTTP 请求 |
web_fetch / web_search | 网页抓å–å’Œæœç´¢ |
lsp_references / lsp_diagnostics | LSP ä»£ç æ™ºèƒ½ |
mcp | MCP å议扩展工具 |
安全设计:
- å±é™©å‘½ä»¤ï¼ˆå¦‚
sudoã€rm -rf)会被拦截 - æ•æ„Ÿæ“作需è¦ç”¨æˆ·ç¡®è®¤ï¼ˆå¯é€šè¿‡
--yolo 跳过)
5. LSP é›†æˆ (internal/lsp/)
Crush 内置 LSP 客户端管ç†å™¨ï¼Œè®© AI 获得 IDE 级别的代ç ç†è§£èƒ½åŠ›ï¼š
- 自动å¯åŠ¨é¡¹ç›®é…置的 LSP æœåС噍
- æä¾›ä»£ç 诊æ–(错误ã€è¦å‘Šï¼‰
- æ”¯æŒæŸ¥æ‰¾å¼•用ã€è·³è½¬å®šä¹‰
6. é…置系统 (internal/config/)
- æ”¯æŒ JSON é…置文件 (
crush.json) - 环境å˜é‡è¦†ç›–
- 多 Provider é…ç½®
- æ¨¡åž‹é€‰æ‹©ï¼ˆå¤§æ¨¡åž‹ç”¨äºŽå¤æ‚ä»»åŠ¡ï¼Œå°æ¨¡åž‹ç”¨äºŽæ‘˜è¦/æ ‡é¢˜ï¼‰
7. æ•°æ®æŒä¹…化 (internal/db/)
使用 SQLite + sqlc(类型安全的 SQL 生æˆï¼‰ï¼š
- 会è¯å˜å‚¨
- 消æ¯åކå²
- 文件追踪
æ•°æ®æµ
用户输入
│
â–¼
┌─────────────â”
│ TUI (Tea) │
└──────┬──────┘
│ 用户消æ¯
â–¼
┌─────────────â”
│ App │ ──事件订阅──▶ TUI 更新
└──────┬──────┘
│
â–¼
┌─────────────â”
│ Agent │
└──────┬──────┘
│
â–¼
┌─────────────┠工具调用 ┌─────────────â”
│ LLM API │ ────────────────▶ │ Tools │
│ (fantasy) │ │ (bash/edit) │
└─────────────┘ ◀────执行结果──── └─────────────┘
æŠ€æœ¯æ ˆæ€»ç»“
| 类别 | 技术 |
|---|
| è¯è¨€ | Go 1.26 |
| CLI 框架 | Cobra + Bubble Tea v2 |
| æ ·å¼ | Lipgloss v2 |
| LLM SDK | charm.land/fantasy |
| æ•°æ®åº“ | SQLite + sqlc |
| LSP | è‡ªç ”å®¢æˆ·ç«¯ |
| 扩展åè®® | MCP (Model Context Protocol) |
设计亮点
- 事件驱动架构:所有æœåŠ¡é€šè¿‡ pubsub 通信,TUI 订阅事件实现å“åº”å¼æ›´æ–°
- 优雅关é—:Shutdown 时按æ£ç¡®é¡ºåºæ¸…ç†èµ„æºï¼ˆå…ˆå–消 Agent,å†å…³é— DB)
- å¹¶å‘安全:使用
csync 包æä¾›å¹¶å‘安全的值容器 - 坿‰©å±•工具:通过 MCP å议支æŒç¬¬ä¸‰æ–¹å·¥å…·æ‰©å±•
- 上下文管ç†ï¼šè‡ªåŠ¨æ‘˜è¦é¿å…上下文溢出
快速上手
# macOS
brew install charmbracelet/tap/crush
# 或直接è¿è¡Œ
go run .
首次è¿è¡Œä¼šå¼•导é…ç½® API Key,之åŽå³å¯åœ¨ç»ˆç«¯é‡Œä¸Ž AI 对è¯ï¼Œè®©å®ƒå¸®ä½ 写代ç ã€ä¿® bugã€é‡æž„项目。
总结
Crush 的架构设计体现了 Charmbracelet 一贯的工程水准:模å—化清晰ã€èŒè´£åˆ†ç¦»ã€äº‹ä»¶é©±åŠ¨ã€‚å®ƒä¸æ˜¯ä¸€ä¸ªç®€å•çš„ LLM 包装器,而是一个完整的 AI-Agent 开呿¡†æž¶â€”â€”å¦‚æžœä½ æƒ³åœ¨ç»ˆç«¯é‡Œæž„å»ºè‡ªå·±çš„ AI 助手,这是一个很好的å‚考实现。
æºç 地å€ï¼šhttps://github.com/charmbracelet/crush