File size: 20,306 Bytes
d3de902 9c388a7 d3de902 0e42647 d3de902 b31d9bd 9c388a7 d3de902 9c388a7 0e42647 b31d9bd b9d308b d3de902 9c388a7 d3de902 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 | # AgentFrame — Agent 专用上下文保持框架
**脑 = DeepSeek · 手 = 工具执行 · 记忆 = 四层上下文保持**
版本 4.6.0 · GPL-3.0 · Cloud LTE Studio
---
## 架构
```
┌─────────────────────────────────────────────────────────┐
│ ContextEngine 引擎 │
│ ┌─────────┐ ┌──────────────┐ ┌───────────┐ ┌──────┐ │
│ │ L1 认知 │→ │ L2 路由 │→ │ L3 存储 │→ │ L4 物理│ │
│ │ MetaCog │ │LandmarkRouter│ │AbsorbedMLA│ │KVPager│ │
│ │任务分解 │ │ landmark检索 │ │ 吸收式MLA │ │三级换页│ │
│ │信息缺口 │ │ 分层软max │ │ INT4量化 │ │遗忘曲线│ │
│ └─────────┘ └──────────────┘ └───────────┘ └──────┘ │
│ ↕ 检索指令 ↕ 摘要 ↕ 压缩块 ↕ 热度 │
│ ┌──────────────────────────────────────────────────┐ │
│ │ LLM Provider (DeepSeek, 支持 thinking+工具循环) │ │
│ │ Embedding Provider (哈希/API, 文本→向量) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
## 核心能力
| 能力 | 说明 | 验证状态 |
|------|------|---------|
| **KV 压缩** | 真 INT4 打包: 576维→288B q4+64B scales = **29.1x** (cos 0.998) | ✓ 有测试 + L40S 实测 |
| **Top-K 保护** | 路由命中块 16bit 高精度, 其余 4bit; latent 无损检索 | ✓ L40S 实测 0/20 翻转 |
| **Top-K 保护** | 关键块 16bit + 其余 4bit = **0/100 翻转** | ✓ 实测 (独立实验, 未接入主流程) |
| **分层组织** | Sector(16)-Block(256)-Module(1024) 硬件对齐 | ⚠️ 设计未接入 |
| **Aura 遗忘** | S(t)=I·2^(-t/τ) 指数遗忘 + 访问增强 | ✓ 有测试 |
| **LFRU 滞回** | 历史热块信用折减驱逐分数, 防抖动 (colibrì #441/#497) | ✓ 有测试 |
| **Couple 预取** | 跨轮共现预取: 检索到 A 后预取常与 A 共现的 B (colibrì couple) | ✓ 有测试 |
| **KV 增量持久化** | 每轮 append 不重写全量, crash-safe 坏行跳过 (colibrì kv_persist) | ✓ 有测试 |
| **checksum 防损坏** | 每行 content checksum, 篡改/静默损坏整行跳过 (memory-system 启发) | ✓ 有测试 |
| **前缀复用** | 相同前缀 query 复用上次检索, 保持热块 (colibrì kv_prefix) | ✓ 有测试 |
| **认知层接线** | directive.required_chunks 参与路由加权 (任务标签→命中提升) | ✓ 有测试 |
| **L0/L1/L2 分层摘要** | 写入时生成三层, 读取按需展开 (OpenViking 启发) | ✓ 有测试 |
| **脑+手** | function calling 工具循环, Agent 自验证代码 | ✓ 有测试 + 安全拦截 |
| **多会话** | 每会话独立引擎, 状态可持久化 | ✓ |
## 快速开始
### 1. 安装
```bash
pip install -e /root/.openclaw/workspace/agentframe
# 或直接用 (无需安装):
export PYTHONPATH=/root/.openclaw/workspace
```
### 2. 配置
```bash
export AGENTFRAME_API_KEY="sk-xxx" # DeepSeek key
export AGENTFRAME_MODEL="deepseek-v4-pro" # 主模型
export AGENTFRAME_FAST_MODEL="deepseek-v4-flash"
export AGENTFRAME_PORT=8090
# 或生成配置文件
python3 -m agentframe.cli config
```
### 3. CLI 使用
```bash
# 摄入知识
python3 -m agentframe.cli ingest "KV 压缩 28.4x L40S 实测" --tags "kv"
# 查询 (带 DeepSeek 生成)
python3 -m agentframe.cli ask "KV 压缩多少倍?"
# 状态 / 遗忘
python3 -m agentframe.cli stats
python3 -m agentframe.cli forget --threshold 0.1
# 离线演示 (无需 API key)
python3 -m agentframe.cli demo
```
### 4. REST API
```bash
python3 -m agentframe.api.server 8090
```
```bash
# 创建会话
SID=$(curl -s -X POST http://localhost:8090/v1/sessions | jq -r .session_id)
# 摄入知识
curl -X POST http://localhost:8090/v1/sessions/$SID/ingest \
-H "Content-Type: application/json" \
-d '{"text":"吸收式 MLA 缓存 576 维潜在向量","tags":["method"]}'
# 查询+生成
curl -X POST http://localhost:8090/v1/sessions/$SID/ask \
-H "Content-Type: application/json" \
-d '{"query":"MLA 怎么压缩 KV?","chat":true}'
# 带工具循环查询 (Agent 可执行代码验证)
curl -X POST http://localhost:8090/v1/sessions/$SID/ask_hands \
-H "Content-Type: application/json" \
-d '{"query":"验证 dict 合并操作符 | 的语义"}'
# 状态 / 遗忘 / 持久化
curl http://localhost:8090/v1/sessions/$SID/stats
curl -X POST http://localhost:8090/v1/sessions/$SID/forget -d '{"threshold":0.1}'
curl -X POST http://localhost:8090/v1/sessions/$SID/save
```
### 5. Python 库方式
```python
from agentframe.config import AgentFrameConfig
from agentframe.core.engine import ContextEngine
cfg = AgentFrameConfig.from_env()
eng = ContextEngine(cfg)
eng.ingest("AgentFrame KV 压缩设计", ["kv"])
result = eng.ask("KV 压缩多少倍?")
print(result.answer) # DeepSeek 回答
print(result.retrieved) # 检索到的知识块
eng.save("/tmp/state.json") # 持久化
```
## 项目结构
```
agentframe/
├── __init__.py # 版本 + 导出
├── config.py # 配置系统 (env/JSON)
├── core/
│ ├── quad.py # 四层核心 (KV/分层/路由/分页/认知)
│ └── engine.py # ContextEngine 主引擎
├── llm/ # LLM Provider (deepseek/mock)
├── embed/ # Embedding Provider (hash/api)
├── memory/ # 持久化 (JSON 快照)
├── api/server.py # REST API v1 (多会话)
├── cli.py # 命令行工具
├── tests/ # 核心测试 (离线)
└── deploy/ # systemd 服务
```
## 关键技术 (实测数据)
1. **吸收式 MLA + 真 INT4 打包**: 只缓存 576 维潜在向量 (512 kv_lora + 64 k_pe), 不展开 KV
- 270KB → 30.4KB (8.9x) → **INT4 打包 352B/层 (29.1x)** — 对齐 L40S 真实推理实测 (DeepSeek-V2-Lite 15.7B, 28.4x)
- 对称量化 + per-channel scale + nibble 打包 (colibrì quant.h 移植), 往返余弦相似度 0.998
2. **Top-K 自适应精度保护** (实测, 未接入主流程): 路由层已知 Top-K → 关键块 16bit + 其余 4bit
- 1bit 符号补偿 × (17/50 翻转) / 排序保护 × (29/100) / **Top-K 块 16bit ✓ (0/100)**
3. **Sector-Block-Module** (设计, 未接入): 16 token=Sector, 16 Sector=Block(256), 4 Block=Module(1024)
- 结构做骨架 / 价值做决策 / 粒度分层
4. **Aura 遗忘曲线**: S(t) = I·2^(-t/τ) + log2(access+1)×0.1
5. **注意力分数 ≠ 任务重要性** (3-Agent 讨论室 v3 产出):
- Agent 场景 L2 验证必须用任务感知权重 (工具名/参数键/错误码), 非注意力分数
- 蒙特卡洛模拟: 95.22% 概率按注意力采样误删首轮关键 token
## 语义压缩 vs 物理压缩 (双轨压缩体系)
AgentFrame 的压缩不是单一技术,而是**两个正交维度的叠加**——一个管「内容」,一个管「体积」:
| 维度 | 语义压缩 (MemoryDirector) | 物理压缩 (AbsorbedMLA) |
|------|--------------------------|------------------------|
| **管什么** | 哪些 token 值得留 | 留下的 token 怎么存得小 |
| **机制** | LLM 语义判断驱逐 | 576维潜在向量 + 量化 |
| **决策者** | DeepSeek (懂语义) | 量化器 (确定性) |
| **压缩比** | **~3.2x** (闲聊剔除, 实测) | **28.4x** (L40S 实测) |
| **失败历史** | 数值启发式全被证伪 | 浮点精度经 Top-K 保护 |
| **能否叠加** | 正交, 相乘 | 正交, 相乘 |
### 为什么物理压缩管不了「内容」
物理压缩(INT4/INT8/低秩)只能把每个 token 的字节数变小,但**闲聊 token 本身就该删**——"今天天气不错"压缩 35 倍依然是垃圾。
语义压缩在源头解决问题:**模型判断这段对话值不值得存**,从根上减少 token 数量。两者相乘才是真正的总压缩。
### 相乘的本质 (100 Token 例子)
**语义压缩 (3.2x) — 砍的是数量**: 原本要存 100 个 Token 的上下文, LLM 判断后只保留 31 个。这是**内容层面的筛选**。
**物理压缩 (28.4x) — 砍的是体积**: 这 31 个 Token 的 KV Cache, 原本占 270KB, 通过 INT4 量化 + MLA, 硬塞进 7.6KB (L40S 实测)。这是**存储层面的瘦身**。
**相乘**: 原本存 100 个 Token 要占 `100 × 270KB = 27MB`, 现在只存 `31 × 7.6KB ≈ 235KB` — 算下来是 **~115 倍** (物理侧基于 L40S 实测值)。
```
100 tokens × 270KB = 27MB (原始)
↓ 语义压缩 3.2x (砍数量: 100 → 31)
31 tokens × 270KB = 8.4MB (内容筛选后)
↓ 物理压缩 28.4x (砍体积: 270KB → 7.6KB, L40S 实测)
31 tokens × 7.6KB ≈ 235KB (存储瘦身后)
= ~115x 总压缩
```
### 实测数据 (真实决策)
输入一段 67 token 的对话(含 4 条关键信息 + 2 条闲聊):
```
用户: 我的生产服务器是 98.142.241.130,SSH 端口 44123。
项目代码在 /root/.openclaw/workspace,数据库 MySQL 库名 ljsys_db。
今天天气不错,中午吃了面。
```
MemoryDirector 的决策:
```json
{
"remember": [
"生产服务器IP: 98.142.241.130",
"SSH端口: 44123",
"项目代码路径: /root/.openclaw/workspace",
"MySQL数据库名: ljsys_db"
],
"forget": ["今天天气不错", "中午吃了面"],
"promote_importance": 0.8
}
```
| 指标 | 数值 | 说明 |
|------|------|------|
| 输入 | 67 tokens | 含关键信息+闲聊 |
| 语义保留 | 21 tokens | 4 条关键信息 |
| **语义压缩** | **3.2x** | 闲聊被模型自动剔除 |
| 物理压缩 | 28.4x | L40S 实测 270KB→7.6KB/token |
| **总压缩** | **~113x** | 17.7MB → 159KB |
### 语义压缩的安全意识 (意外收获)
实测中模型**自主拒绝记录密码**:
> "密码不宜存储" — 模型自主涌现安全意识 (非硬编码规则)
| 场景 | 模型决策 | 正确性 |
|------|---------|--------|
| 域名+密码+路径+闲聊 | ✓ 记域名/路径, 拒绝记密码, 忘天气 | 100% |
| 重申已有信息 | ✓ 去重, 0 条重复入库 | 100% |
| 纯闲聊 | ✓ 全忘, 不浪费缓存 | 100% |
### 与物理压缩的叠加公式
```
总压缩 = 语义压缩 × 物理压缩
= (输入token / 保留token) × (原始字节 / 压缩字节)
≈ 3.2 × 28.4 (28.4x 为 L40S 实测)
≈ 113x
```
**结论**: 物理压缩是「省空间的放大器」,语义压缩是「减内容的过滤器」——先滤后压,缺一不可。
---
## Changelog
### v4.6.0 (2026-08-20) — L0/L1/L2 分层摘要 (OpenViking 启发)
**新增**
- **TieredSummarizer** (core/tiers.py): 每个知识块写入时生成三层摘要
- L0 (~40 字符): 一句话速览, 快速相关性检查
- L1 (≤5 条关键子句): 概述, 规划用
- L2: 完整原文, 按需读取
- ask()/ask_with_hands() 上下文改为**分层构建**: 【知识速览 L0】→【详情概述 L1】, 结构化且省 token
- 零额外 LLM 成本: 确定性启发式 (句切分 + 关键词提取), 与双轨压缩正交 (语义×物理×分层)
**测试**: 核心测试 21 项 (+test_tiered_summarization / test_tiers_in_engine)
### v4.5.1 (2026-08-20) — checksum 防静默损坏
**新增** (memory-system 协议启发)
- **IncrementalKVStore 每行 content checksum**: MD5 前 8 位, append 时写入, load 时验证
- 篡改/静默损坏的行整行跳过 — 杜绝 "corruption is silent and permanent"
- 旧格式兼容: 无 checksum 的历史行仍接受, 新写入全部带校验
**测试**: 核心测试 19 项 (+test_checksum_protection: 篡改检测 + 旧格式兼容)
### v4.5.0 (2026-08-19) — 认知层指令接线
**新增**
- **directive.required_chunks 参与检索**: 认知层按标签匹配的"任务需要"块, 在路由打分时加权 (boost_weight=0.5), 任务需求真正影响命中排序 (之前构建后丢弃)
- `LandmarkRouter.route()` 新增 boost_chunks/boost_weight 参数
**验证**: 无 boost Top5=[4,0,1,2,3] → 有 boost Top5=[0,2,4,1,3] (method 标签块被提升)
**测试**: 核心测试 18 项 (+test_directive_boost)
### v4.4.1 (2026-08-19) — 死代码清理 + 配置修复
**修复**
- vram_limit_mb/ram_limit_mb 配置真实传入 KVPager (之前 QuadLayerAgent 用默认值, 配置改不生效)
**清理** (删除 6 处死代码)
- gqa_group_select / analyze_gap / rollback_compensate / addr_to_token / module_range
- 保留 two_stage_evict (讨论室设计的驱逐方案, 有思想价值, 待接入)
**测试**: 核心测试 17 项 + 配置生效验证
### v4.4.0 (2026-08-19) — Top-K 保护 + 无损检索 (L40S 实测驱动)
**动机**: L40S 真实模型实测发现 — INT4 打包余弦相似度 0.9952 极高, 但 Top-8 检索翻转率 **95%** (量化误差虽小, 足以翻转接近竞争的候选排名)。
**修复**
- **latent 存原始无损 float32** (不再存 INT4 解包值): 路由摘要/检索不受量化影响
- **protect_topk 接入主流程** (colibrì #441 落地): ask() 路由命中块标记 16bit 高精度 (size 1152B), 其余保持 4bit (352B)
- q4/scales 真 INT4 打包保持: 持久化压缩 29.1x 不变 (存储与检索解耦)
- `storage_stats()`: 混合精度统计 (protected 比例)
**L40S 实测验证** (DeepSeek-V2-Lite 15.7B MLA 真实 KV)
- latent 无损: max_diff=0.00 ✅
- 引擎 vs 原始基准 Top-8 翻转率: **0/20 (0%)** ✅ (修复前 95%)
- Top-K 保护激活: 88/100 块 16bit
- 对照: INT4 解包路径 9/10 翻转 (证明保护必要性)
**测试**: 核心测试 17 项 (+test_topk_protection)
### v4.3.0 (2026-08-18) — KV 增量持久化 + 前缀复用
**新增**
- **IncrementalKVStore** (移植 colibrì kv_persist.h): 每轮 ingest 新 chunk 追加一行 JSON, 不重写全量快照; 行级独立 = crash-safe (坏行跳过); `enable_incremental()` 开启, `load_incremental()` 重启恢复
- **查询前缀复用** (移植 colibrì kv_prefix.h): 新 query 与上一条共享 ≥70% 前缀 → 直接复用上次检索结果 (跳过重新路由) + 保持热块; `_prefix_hits` 统计
- engine.ingest() 自动 append 到增量日志
**测试**: 核心测试 16 项 (+test_incremental_persist / test_prefix_reuse / test_incremental_engine)
### v4.2.0 (2026-08-18) — 真 INT4 打包 (28.4x 落地)
**新增**
- **真 INT4 打包存储** (移植 colibrì quant.h pack_int4): 对称量化 (absmax/7) + per-channel scale + nibble 打包
- 576 维 latent → 288B q4 + 64B scales = 352B/块 (原 float32 2304B)
- 每 token 27 层 9.28KB → **29.1x 真实压缩** (对齐 L40S 实测 28.4x)
- 往返精度: 余弦相似度 0.9979
- `ReversibleQuantizer.quantize_int4()/dequant_int4()`: 打包/解包接口
- CompressedKV 新增 q4/scales 字段: 真实存储 + save/load 持久化
- n_ch 默认 32→16 (每通道 36 维, 压缩比与精度平衡)
**测试**: 核心测试 11 项 (+test_int4_packing: 往返精度 cos>0.99 + 压缩比>25x)
### v4.1.0 (2026-08-18) — Couple 跨轮共现预取
**新增**
- **CouplePrefetcher** (移植 colibrì couple_prefetch): 学习跨轮检索共现表 (检索到 A 后下一轮往往检索 B), 运行时预测下轮所需块
- **KVPager.prefetch()**: 预测块从 disk 提升到 RAM 温层 (不占 VRAM 热层); RAM 满时用 LFRU 有效分数驱逐最冷块腾位
- ask() 主流程接线: 每轮检索后 record + predict + prefetch
- MemoryConfig.couple_k (默认 8, 对应 colibrì COUPLE_K)
**测试**: 核心测试 10 项 (+test_couple_prefetch: 学习/预测/提升/腾位)
### v4.0.0 (2026-08-18) — LFRU 滞回 + 安全加固
**新增**
- **LFRU 滞回驱逐** (吸收 colibrì #441/#497): 历史峰值热度 (max_heat) 作为信用分折减驱逐分数, 曾热过的块获得保护; 信用随时间衰减 (每 2 半衰期折半), 完全冷透后照常驱逐
- `effective_eviction_score()`: LFRU 打分接口
- API Bearer token 认证: 配置 `AGENTFRAME_API_TOKEN` 后全端点校验 (除 /health); 未配置仅本机回环可访问
- 工具执行安全防护: 危险模式黑名单 (rm -rf/shutdown/反弹shell/读密钥等) + 4096 字符长度上限
- 请求体上限 2MB
**修复**
- forget() 内存计数泄漏 (删块同步扣减 vram_used/ram_used)
- memory_bytes() 重复乘 n_layers 错误
- 新摄入知识 heat 设置无效 (place 加 force_hot, 新块优先进 VRAM)
- summaries 反序列化类型漂移 (list→tuple)
- dim 迷惑写法 → store.DIM; ask_with_hands 命名清理
**测试**: 核心测试 9 项 (新增 LFRU 滞回 / 工具安全 / API 认证)
### v3.0.0-preview — 整合 DeepSeek Harness + dsh 插件
- 四层上下文保持 (认知×路由×存储×物理) + MemoryDirector 自主记忆 + 脑手一体
---
## 来源与致谢 (Credits)
AgentFrame 的部分设计与实现借鉴了以下开源项目,特此致谢:
### 🐦 colibrì (JustVugg/colibri, Apache-2.0)
[colibrì](https://github.com/JustVugg/colibri) 是用纯 C 在消费级硬件上推理 MoE 大模型的推理引擎(GLM-5.2 744B / 25GB 内存)。AgentFrame 从中移植/借鉴了以下技术:
| AgentFrame 模块 | 来源 | 说明 |
|----------------|------|------|
| `ReversibleQuantizer.quantize_int4/dequant_int4` | `c/quant.h` `pack_int4` | 真 INT4 打包: 对称量化 (absmax/7) + per-channel scale + nibble 打包 `(v+8)\|((v1+8)<<4)` |
| `KVPager.effective_eviction_score` (LFRU 滞回) | `#441/#497` LFRU eviction guard | 历史峰值热度 (max_heat) 信用折减驱逐分数, 防高频块反复横跳 |
| `CouplePrefetcher` | `couple_prefetch` + `.coli_pairs` | 跨轮共现预取: 检索到 A 后预测常与 A 共现的 B |
| `IncrementalKVStore` | `c/kv_persist.h` | KV 增量追加持久化, 行级 crash-safe, 重启恢复不用重算 |
| 查询前缀复用 `_prefix_reuse` | `c/kv_prefix.h` | 相同前缀 prompt 跳过重复处理, 保持热状态 |
### 📚 memory-system (HeiCha1231414/memory-system, MIT)
[memory-system](https://github.com/HeiCha1231414/memory-system) 是长期运行 AI Agent 的记忆持久化协议。AgentFrame 借鉴了:
| AgentFrame 模块 | 来源 | 说明 |
|----------------|------|------|
| `IncrementalKVStore` checksum 校验 | 备份 + 校验和验证规则 | 每行 content checksum (MD5), 篡改/静默损坏整行跳过, 杜绝 silent corruption |
### 🧭 OpenViking (volcengine/OpenViking, AGPL-3.0)
[OpenViking](https://github.com/volcengine/OpenViking) 是字节开源的 Agent 上下文数据库 (viking:// 虚拟文件系统 + 分层加载)。AgentFrame 借鉴了:
| AgentFrame 模块 | 来源 | 说明 |
|----------------|------|------|
| `TieredSummarizer` (L0/L1/L2) | 分层加载 L0 abstract / L1 overview / L2 details | 写入时生成三层摘要, 读取时按任务深度加载, 省 token |
> 注: AgentFrame 采用确定性启发式实现 (零额外 LLM 调用), 非代码复制。
### 🧠 DeepSeek-V2 MLA (deepseek-ai)
- 吸收式 MLA 缓存概念 (只存 576 维潜在向量 512 kv_lora + 64 k_pe, 不展开 KV) 源自 [DeepSeek-V2](https://arxiv.org/abs/2405.04434) 论文架构。
- 28.4x 压缩比实测基于 DeepSeek-V2-Lite-Chat (15.7B) 在 L40S 上的真实推理验证。
### 🌱 Project-Aura
- `ForgettingCurve` 遗忘曲线公式 S(t) = I·2^(-t/τ) 源自 Project-Aura 项目。
---
## 许可证
AgentFrame 本体: GPL-3.0 © Cloud LTE Studio
移植代码许可说明:
- colibrì (Apache-2.0) → 移植部分保持 Apache-2.0 兼容 (GPL-3.0 与 Apache-2.0 兼容)
- memory-system (MIT) → 借鉴思想, 非代码复制
- DeepSeek-V2 / Project-Aura → 仅借鉴论文/思想
---
*AgentFrame · 脑手一体 · 上下文永不丢失*
|