# 💡Summary
> [!Info]
> 一句话说清楚
## Gateway
我之前是飞书消息到cc session,但是openclaw的设计其实是硬编码转发,这一层并没有llm驱动
`if 消息来了 → 查 session 表 → 拼 prompt → POST /v1/messages → 转发回复`
Gateway 本质上就是个路由器:
- 纯 if-else + HTTP 调用,没有任何智能。所有智能都在 API 端。
- 而你现在用的 feishu-channel,Claude Code 本身就是 LLM 在运行,消息进来直接在上下文里处理,不需要绕一圈调 API。Pro 订阅额度,不额外花钱,更适合你。
## Agent 层的for循环是自己写的
就这么个 while 循环。Claude Code 本质上也是这个循环,只不过 Anthropic 帮你把工具执行、权限系统、context 管理、MCP 集成全做好了。
OpenClaw 自己写这层,好处是完全可控(没有权限弹窗),代价是得自己维护工具实现、错误处理、上下文裁剪、token 计数这些脏活。
## tool sandbox
就是把原生的 bash read write fetch用代理模式包了一层,加了一些权限校验
```javascript
// 伪代码,大意
function executeTool(name, input) {
// Bash:只允许白名单命令
if (name === "bash") {
if (input.command.startsWith("rm -rf /")) throw "禁止"
if (input.command.includes("curl") && !allowNetwork) throw "禁止"
return exec(input.command, { timeout: 30000, cwd: sandboxDir })
}
// 文件:只允许读写指定目录
if (name === "write") {
if (!input.path.startsWith(allowedDir)) throw "路径越界"
return fs.writeFile(input.path, input.content)
}
}
```
## 记忆模块
| | Claude Code Memory | OpenClaw Memory |
| --- | --- | --- |
| 存储 | Markdown 文件 | SQLite + FTS5 |
| 检索 | 无检索,全量加载 | 关键词/向量搜索 |
| 容量上限 | ~200 行索引(实际靠 LLM 自己裁剪注意力) | 理论无限(检索 top-k) |
| 额外成本 | 0 | embedding API(如果开向量) |
| 智能程度 | 靠 LLM 自己判断相关性 | 靠算法预筛 |
chunks 表:
| id | text | embedding | ... |
| --- | --- | --- | --- |
| c_001 | 投资系统… | [0.0123, -0.0456, 0.0789, 0.0012, ...(1536个浮点数)] | path, start_line, ... |
| c_002 | 英语学习… | [-0.034, 0.067, 0.012, ...] | |
检索时就是暴力算余弦相似度:
-- 伪逻辑,SQLite 没有原生向量运算
-- 实际是在应用层用 JS/Python 算的
1. 用户消息 → 调 embedding API → 得到 query_vec
2. SELECT id, text, embedding FROM chunks
3. 逐行 cosine_similarity(query_vec, row.embedding)
4. 取 top-k 最相似的塞进 prompt
没用专门的向量数据库(Pinecone/Milvus),就是 SQLite 当存储 + 应用层暴力搜索。数据量小的时候够用,几万条 chunks 以内毫秒级。
embedding_cache 表则是避免同一段文字重复调 API:
"投资系统需要仓位管理" → hash: abc123 → 已缓存,直接用,不再花钱调 API
# 🧩 Cues
# 🪞Notes