From 7574f9c24c7f6795eae7d0d577471a85bba192f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Sun, 5 Jul 2026 17:25:32 +0800 Subject: [PATCH] =?UTF-8?q?docs(roadmap):=20=E6=A0=87=E8=AE=B0=20Phase=207?= =?UTF-8?q?=20SqliteStore=20=E5=B7=B2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新当前状态描述、Phase 7 交付物详情、里程碑 M3 状态、依赖性图谱及下一步行动 --- docs/roadmap.md | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index f5bebde..81333f8 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -7,7 +7,7 @@ AG Core 定位为构建 AI 智能体的底层工具箱,通过模块化、可插拔的架构,提供大模型调用、提示词工程、工具系统、记忆检索四大核心能力,支持快速组合出符合业务需求的智能体应用。 -**当前状态**:v0.1.0 已发布(2026-07-04)。Phase 0-6 全部完成,Provider IR 重构 + LlmCycle 简化 + 8 个离线示例已交付(新增 `simple_visit.rs`)。v0.2.0 已细分为 8 个增量 Phase(Phase 5-12),其中 Phase 5(Ollama Provider + `#[non_exhaustive]` 兼容性护栏 + `ProviderConfig::from_env`)与 Phase 6(ToolDef IR 正式化)已完成,下一步进入 Phase 7 (SqliteStore 持久化)。 +**当前状态**:v0.1.0 已发布(2026-07-04)。Phase 0-7 全部完成,Provider IR 重构 + LlmCycle 简化 + 8 个离线示例 + SqliteStore 持久化已交付。v0.2.0 已细分为 8 个增量 Phase(Phase 5-12),其中 Phase 5(Ollama Provider + `#[non_exhaustive]` 兼容性护栏 + `ProviderConfig::from_env`)、Phase 6(ToolDef IR 正式化)与 Phase 7(SqliteStore 持久化,9 个内联测试 + 持久化 round-trip + 10×10 并发写入)均已完成,下一步进入 Phase 8(MVP 集成出口 / v0.2.0-rc.1)。 --- @@ -399,8 +399,8 @@ pub struct ContextBudget { system, history, tools, tool_results, reserve } | Step | 内容 | 文件 | 验证标准 | |------|------|-----|---------| -| **7.1** | 新增 `memory/store/sqlite.rs`:`Mutex` + `spawn_blocking`,实现 `save/get/delete/list` + prefix 过滤 | `memory/store/sqlite.rs` + `Cargo.toml`(add `rusqlite`) | 单元测试 CRUD + prefix 查询 | -| **7.2** | WAL 模式 + 并发安全 + 集成测试(`tokio::spawn` 10 个并发 task) | `sqlite.rs` 扩展 | 并发写入 100 轮无 race | +| **7.1** ✅ | 新增 `memory/store/sqlite.rs`:`Mutex` + `spawn_blocking`,实现 `save/get/delete/list` + prefix 过滤 | `memory/store/sqlite.rs` + `Cargo.toml`(add `rusqlite`) | 单元测试 CRUD + prefix 查询 | +| **7.2** ✅ | WAL 模式 + 并发安全 + 集成测试(`tokio::spawn` 10 个并发 task) | `sqlite.rs` 扩展 | 并发写入 100 轮无 race | **设计决策**: - 用 `Mutex` 而非连接池(ponytail:一个连接够用就不加 r2d2) @@ -409,6 +409,22 @@ pub struct ContextBudget { system, history, tools, tool_results, reserve } **依赖**:`MemoryStore` trait(v0.1 Phase 3 已就绪) **优先级**:P0 +**实际新增**(2026-07-05 commit `13edacd` / `c8a91f6` / `c82af60`,详见 `docs/14-phase7-sqlite-store.md`): +- 方案文档:`docs/14-phase7-sqlite-store.md`(526 行,Phase 7 设计推演与权衡记录) +- 结构重组:`src/memory/store.rs` 单体文件 → `src/memory/store/{mod.rs(in_memory.rs, sqlite_store.rs)}` 模块目录;外部导入路径 `crate::memory::store::MemoryStore` 不变 +- 新增文件 2 个:`src/memory/store/sqlite_store.rs`(545 行 SqliteStore 实现 + 9 个内联测试)、`src/memory/store/in_memory.rs`(266 行,结构搬移) +- 核心实现要点: + - `Arc>` 串行化所有 IO;`spawn_blocking` 卸载到阻塞线程池 + - WAL 模式 + `synchronous=NORMAL` + `busy_timeout=5s` + `wal_autocheckpoint=1000` + - `PRAGMA user_version` schema 版本管理(`INITIAL_USER_VERSION = 1`) + - `created_at` 归一化为 UTC 的 RFC 3339 TEXT,字典序等价时间序 + - 错误精细映射:`SqliteFailure` / `InvalidQuery` → `InvalidInput`;`FromSqlConversionFailure` → `Serialization`;其他 → `Storage` +- 9 个内联测试覆盖:CRUD、upsert、prefix / since / offset+limit 过滤、10 写者 × 10 次并发写入、持久化 round-trip(重启连接不丢数据)、`InMemoryStore ↔ SqliteStore` trait-box 互换兼容性 +- 依赖:`rusqlite = { version = "0.32", features = ["bundled"] }`;`time` 增补 `parsing` / `formatting` / `macros` features;`dev-dependencies` 新增 `tempfile = "3"` +- 全量测试 191 → 200(+9,Phase 7 新增 SqliteStore 单测);clippy 0 警告 + +**状态**:✅ Phase 7 全部交付物已完成 + --- #### Phase 8: MVP 集成出口(v0.2.0-rc.1 候选) @@ -495,7 +511,7 @@ pub struct ContextBudget { system, history, tools, tool_results, reserve } graph BT P5["Phase 5: 热身准备
ProviderConfig::from_env
Ollama Provider
#[non_exhaustive] 标记"]:::done P6["Phase 6: ToolDef IR
Provider 无关工具定义"]:::done - P7["Phase 7
SqliteStore"]:::core + P7["Phase 7: SqliteStore
rusqlite + WAL
9 个内联测试
持久化 round-trip"]:::done P8["Phase 8
MVP 出口 (rc.1)"]:::mvp P9["Phase 9
流式体验增强"]:::p1 P10["Phase 10
ContextSlot"]:::p1 @@ -529,7 +545,7 @@ graph BT |--------|---------------|-----------|------| | **M1** | Phase 5 | 热身三项完成:`from_env()` 可用 / Ollama 类型存在 / `#[non_exhaustive]` 就位 | ✅ 2026-07-05 | | **M2** | Phase 6 | `ToolDef` 全量切换,`cargo test --all-targets` 全绿 | ✅ 2026-07-05 | -| **M3** | Phase 7 | SqliteStore CRUD + 并发测试通过,进程重启数据不丢 | ⏳ 待启动 | +| **M3** | Phase 7 | SqliteStore CRUD + 并发测试通过,进程重启数据不丢 | ✅ 2026-07-05 | | **M4** | **Phase 8 (rc.1)** | P0 五项全部交付,`cargo run --example quick_start` 跑通 | ⏳ | | **M5** | Phase 9 | `submit_turn_stream` 流式事件序列验证通过 | ⏳ | | **M6** | Phase 10 | ContextSlot 创建/切换/派生集成测试通过 | ⏳ | @@ -577,7 +593,7 @@ graph BT ## 下一步行动 -1. **Phase 7 启动**:SqliteStore(`rusqlite` + `bundled`),可与 Phase 6 并行 +1. **Phase 8 启动**:MVP 集成出口(API 稳定性扫尾 + CHANGELOG v0.2 + Quick Start 示例 + 端到端示例),P0 五项收尾 2. **示例先行**:每完成一个 Phase 立即更新对应示例,验证通过后再合入 3. **里程碑追踪**:以 Phase 8(MVP 出口)为 v0.2.0-rc.1 节点,逐 Phase 验收 @@ -591,6 +607,7 @@ graph BT - ✅ Phase 4c Session Memory — 全部交付物已完成 - ✅ Phase 5 Warmup — ProviderConfig::from_env + OllamaProvider + `#[non_exhaustive]` 前置标记(ProviderType / StopReason / FinishReason / EvictionPolicy) - ✅ Phase 6 ToolDefinition IR — `ToolDef` 新类型 + 双向 `From` 转换 + 别名彻底移除 + `#[allow(deprecated)]` 清理(cycle/registry/mcp/agent);Anthropic 零改动;roundtrip 测试覆盖 +- ✅ Phase 7 SqliteStore — `rusqlite 0.32` + WAL 模式 + `Arc>` + `spawn_blocking`;`memory/store.rs` → `store/{in_memory,sqlite_store}.rs` 模块化;9 个内联测试覆盖 CRUD/upsert/过滤/10×10 并发/持久化 round-trip;`InMemoryStore ↔ SqliteStore` trait-box 互换兼容 - ✅ Provider IR 重构 — 统一类型系统 + OpenAI/Anthropic/DeepSeek/Qwen/Ollama 适配 - ✅ LlmCycle 简化 — IR 消息类型切换 + Phase 0 桥接层移除 - ✅ v0.1 Release — 技术债扫清、MockProvider 公开化、8 个离线示例(含 `simple_visit`)、README + 错误消息友好化、CHANGELOG 初始化