同步 v0.1.0 发布状态,将 v0.2+ 扩展项重 组为 12 项基础功能和 ContextSlot 上下文管 理,明确 v0.3+ 展望及边界范围
19 KiB
AG Core Roadmap
定稿日期:2026-05-11 最后更新:2026-07-04
愿景
AG Core 定位为构建 AI 智能体的底层工具箱,通过模块化、可插拔的架构,提供大模型调用、提示词工程、工具系统、记忆检索四大核心能力,支持快速组合出符合业务需求的智能体应用。
当前状态:v0.1.0 已发布(2026-07-04)。Phase 0-4c 全部完成,Provider IR 重构 + LlmCycle 简化 + 7 个离线示例已交付。v0.2.0 规划已确定,主题为「生产就绪(Production-Ready Core)」。
模块完整性评估
| 功能领域 | 方案状态 | 文档位置 | 实现优先级 |
|---|---|---|---|
| LLM 调用周期 | ✅ 完整 | specs/llm-call-lifecycle.md |
P0 |
| 提示词工程 | ✅ 完整 | docs/4-prompt-engineering.md |
P1 |
| 工具系统 + 权限 | ✅ 完整 | docs/5-tool-system.md |
P1 |
| 记忆检索 | ✅ 完整 | docs/6-memory-system.md |
P2 |
| Agent 运行时(4a 胶水层) | ✅ 已实现 | docs/7-agent-runtime.md |
P2 |
| 生命周期钩子 | ✅ 完整 | docs/3-phase0-remaining.md |
P0(LLM Cycle 扩展) |
| Provider 注册发现 | ✅ 完整 | docs/3-phase0-remaining.md |
P0(Provider 接口扩展) |
| 流式事件系统 | ✅ 完整 | docs/3-phase0-remaining.md |
P0(流式接口前置) |
分阶段 Roadmap
Phase 0 — Foundation(基础设施)
目标:实现 LLM 调用周期的核心功能,作为所有上层模块的基础。
交付物:
- ✅
llm/types.rs— 核心数据类型(Message, ContentBlock, ChatRequest/Response, ToolDefinition, StopReason) - ✅
llm/error.rs— 错误体系(LlmError 枚举,可重试/不可重试判断) - ✅
llm/provider.rs+llm/provider/openai.rs— Provider 接口 + OpenAI 兼容实现 - ✅
llm/provider/registry.rs— ProviderRegistry(多 Provider 注册发现) - ✅
llm/cycle.rs+llm/cycle/{retry,usage}.rs— 生命周期引擎(重试策略 + 用量追踪) - ✅
llm/hooks.rs— HookExecutor 接口(生命周期钩子) - ✅
llm/stream.rs— StreamEvents 流式事件系统(AssistantTextDelta, ToolExecutionStarted 等) - ✅
llm/compact.rs— Auto-compaction(上下文自动压缩) - ✅
Cargo.toml— 添加依赖(tokio, reqwest, serde, thiserror, async-trait, tracing)
依赖:无
优先级:Must Have
预估规模:约 1000 行核心代码
状态:✅ Phase 0 全部交付物已完成
Phase 1 — Prompt Engineering(提示词工程)
目标:提供提示词的组合、模板化与优化能力。
交付物:
- ✅
prompt.rs+prompt/模块 - ✅
PromptTemplate— 模板引擎(支持变量插值、条件渲染) - ✅
PromptComposer— 提示词组合器(拼接 system/user/assistant 消息) - ✅
docs/4-prompt-engineering.md— 方案文档
依赖:无(可与 Phase 0 并行)
优先级:Should Have
预估规模:约 400 行代码
状态:✅ Phase 1 全部交付物已完成
Phase 2 — Tool System(工具系统)
目标:实现 MCP 协议集成与自定义工具注册、调用、权限控制。
交付物:
- ✅
tools.rs+tools/模块(base/registry/permission/mcp/error) - ✅
ToolRegistry— 工具注册表(注册、发现、调用、并行执行、超时控制) - ✅
BaseTooltrait — 工具抽象接口(含 ToolContext 执行上下文) - ✅
McpClient— MCP 协议客户端(stdio transport,StreamableHttp 预留) - ✅
PermissionChecker— 工具执行权限检查(白名单/黑名单/自定义权限) - ✅
docs/5-tool-system.md— 方案设计文档 - ✅ 扩展
llm/cycle.rs支持自动 tool 循环(submit_with_tools()+submit_request()+maybe_compact()) - ✅
ToolError— 结构化错误体系(含is_recoverable()分类)
依赖:Phase 0(LlmProvider 接口传递 tool definitions)、Phase 1(提示词可能需要注入工具描述)
优先级:Should Have
预估规模:约 900 行代码(实际约 1500 行)
状态:✅ Phase 2 全部交付物已完成
Phase 3 — Memory System(记忆系统)
目标:提供对话记忆的存储、检索与管理能力。
交付物:
- ✅
memory.rs+memory/模块(store / conversation / knowledge / retriever / error / types) - ✅
MemoryStoretrait +InMemoryStore— 记忆存储抽象(可插拔后端)+ 默认实现 - ✅
ConversationMemory— 对话记忆管理(sliding window / 全量),复用llm::compact - ✅
KnowledgeStore— 知识页面存储(具体 struct,非 trait,基于 MemoryStore) - ✅
MemoryRetriever— 记忆检索器(TextOverlap Dice 系数评分,单通道) - ✅
docs/6-memory-system.md— 方案设计文档 - ✅
docs/note-knowledge-graph-design.md— KnowledgeGraph 等 Phase 4 备用设计 - ✅
EvictionPolicy— 支持 None / Ttl / Capacity 三种淘汰策略
依赖:Phase 0(llm::compact 复用)、Cargo.toml 新增 time 依赖
优先级:Could Have
预估规模:约 700 行代码(实际约 1242 行,含测试)
状态:✅ Phase 3 全部交付物已完成
Phase 4a — Agent Core Glue(核心胶水层)
目标:提供最小可用的 Agent Runtime——把 Phase 0-3 的能力"装配"成 AgentSession::submit_turn。上层可基于 4a 构建多轮对话应用。
交付物:
- ✅
agent.rs+agent/模块(7 个文件:agent/error/runtime/builder/session/task + 模块根) - ✅
Agenttrait — 智能体角色定义(name / system_prompt / tool_definitions) - ✅
AgentSession— 会话实例(绑定Arc<dyn Agent>+RuntimeBundle+ 内联 HashMap session_data) - ✅
RuntimeBundle— 显式依赖注入容器(不含 session_memory_backend) - ✅
AgentBuilder— 链式构造入口(不含 session_memory_backend) - ✅
AgentError— 统一错误类型(7 个变体:Llm / Tool / Memory / HookBlocked / LimitExceeded / Config / Other;不含 PlanParse) - ✅
Plan/Step/StepStatus— 纯数据结构(不含任何解析逻辑) - ✅ Hook 事件扩展:OnTurnStart / OnTurnEnd + turn_index 字段
- ✅
docs/7-agent-runtime.md— 方案设计文档(含 4a/4b/4c 分阶段计划)
实际新增:
- 新增文件 7 个(agent.rs + agent/{agent, error, runtime, builder, session, task}.rs)
- 修改文件 3 个(lib.rs +1 行;llm/hooks.rs +13 行追加变体/字段;llm/cycle.rs 内部字段 Box→Arc + 新增
new_with_arc公共方法) - 实际代码量约 800 行(含测试;纯实现约 470 行——略高于方案预估 440 行,因 AgentSession 的 tests 模块内联 MockProvider/StubAgent 等辅助结构)
- 新增内联测试 22 个;全量测试 84 → 109(0 失败)
- clippy 0 警告(agent 模块)
- 无新增外部依赖
依赖:Phase 0, 1, 2, 3
优先级:Could Have
预估规模:约 440 行代码
状态:✅ Phase 4a 全部交付物已完成
Phase 4b — Task Execution(任务执行)
目标:在 Phase 4a 基础上,赋予智能体"拆解目标 → 逐步执行"的能力。
前置条件:Phase 4a 已完成。
交付物:
- ✅
TaskAgenttrait —run(goal)自主式 +execute_plan(plan)外部驱动式 - ✅
PlanParsertrait +JsonPlanParser参考实现 - ✅
AgentError追加 PlanParse 变体(共 7 个变体) - ✅ Hook 事件扩展:OnPlanStepComplete + plan_step_index 字段
依赖:Phase 4a
优先级:Could Have
预估规模:约 200 行代码(增量)
实际新增:
- 修改文件 2 个(llm/hooks.rs +5 行;agent/error.rs +10 行)
- 新增代码约 150 行(含测试;纯实现约 90 行)
- 新增内联测试 4 个;全量测试 109 → 113(0 失败)
- clippy 0 警告
- 无新增外部依赖
状态:✅ Phase 4b 全部交付物已完成
Phase 4c — Session Memory(会话级记忆)
目标:提供会话级 key-value 记忆,作为 session 内各 context 之间的信息桥接通道。
前置条件:Phase 4a 已完成(可与 Phase 4b 并行)。
交付物:
- ✅
SessionMemorystruct — 基于MemoryStore,按 session_id namespace 隔离 - ✅
RuntimeBundle+AgentBuilder扩展session_memory_backend字段 - ✅
AgentSession替换内联 HashMap 为完整SessionMemory
依赖:Phase 4a(Phase 3 MemoryStore)
优先级:Could Have
预估规模:约 115 行代码(增量)
实际新增:
- 新增文件 1 个(agent/session_memory.rs)
- 修改文件 4 个(agent/runtime.rs +5 行;agent/builder.rs +10 行;agent/session.rs +30 行;agent.rs +2 行)
- 新增代码约 180 行(含测试;纯实现约 100 行)
- 新增内联测试 3 个;全量测试 113 → 116(0 失败)
- clippy 0 警告
- 无新增外部依赖
状态:✅ Phase 4c 全部交付物已完成
依赖关系图
graph BT
P0["<b>Phase 0: Foundation</b><br/>LLM Cycle<br/>ProviderRegistry<br/>HookExecutor<br/>StreamEvents<br/>Auto-compaction"]:::done
P1["<b>Phase 1: Prompt Engineering</b><br/>PromptTemplate<br/>PromptComposer"]:::done
P2["<b>Phase 2: Tool System</b><br/>Tool Registry<br/>PermissionChecker<br/>MCP Client"]:::done
P3["<b>Phase 3: Memory System</b><br/>MemoryStore<br/>ConversationMemory<br/>KnowledgeStore"]:::done
P4a["<b>Phase 4a: Core Glue</b><br/>AgentSession<br/>RuntimeBundle<br/>Plan/Step 纯数据"]:::done
P4b["<b>Phase 4b: Task Execution</b><br/>TaskAgent<br/>PlanParser<br/>JsonPlanParser"]:::done
P4c["<b>Phase 4c: Session Memory</b><br/>SessionMemory"]:::done
P1 --> P0
P2 --> P0
P3 --> P0
P2 --> P1
P4a --> P1
P4a --> P2
P4a --> P3
P4b --> P4a
P4c --> P4a
classDef done fill:#4ade80,stroke:#16a34a,color:#1a1a1a
classDef pending fill:#fbbf24,stroke:#d97706,color:#1a1a1a
v0.2.0 — 生产就绪(Production-Ready Core)
目标:解决 Rust Agent 工具箱从"能跑"到"能被人依赖"的鸿沟。持久化、配置层、上下文管理三大块补齐后,开发者可在 30 分钟内写出生产可用的 Agent 服务。
交付物:
12 项基础功能
P0 — 必须交付
| # | 功能 | 模块 | 方案要点 |
|---|---|---|---|
| 1 | SqliteStore | memory |
rusqlite + bundled feature,MemoryStore 的 SQLite 实现,进程重启数据不丢 |
| 2 | ProviderConfig 扩展 + from_env() |
llm |
补全 timeout_secs / max_retries 字段;AG_LLM_* 环境变量辅助函数 |
| 3 | ToolDefinition IR 正式化 | tools |
移除 deprecated OpenAI wire 格式,替换为自定义 ToolDef 结构体 |
| 4 | API 稳定性管理 | * |
公开枚举加 #[non_exhaustive];CHANGELOG 记录 Breaking Changes;废弃 API 用 #[deprecated] 标记 |
| 5 | Quick Start + 端到端示例 | examples/ |
30 行 main.rs 快速开始;一个"SQLite 持久化 + Provider + 工具调用 + 多轮对话"的可运行示例(cargo run --example) |
P1 — 重要但不阻塞
| # | 功能 | 模块 | 方案要点 |
|---|---|---|---|
| 6 | Ollama Provider | llm/provider |
OpenAI Compat,本地 LLM 支持,实现量极小 |
| 7 | VectorRetriever trait | memory |
语义检索 trait 抽象(index / search),不绑定后端实现 |
| 8 | 流式 submit_turn_stream |
agent |
AgentSession 新增 submit_turn_stream(),返回 Stream<Item = StreamEvent> |
| 9 | 测试补强 | * |
wiremock Provider roundtrip 测试;多线程并发写入 MemoryStore 测试 |
P2 — 有时间再做
| # | 功能 | 模块 | 备注 |
|---|---|---|---|
| 10 | MCP StreamableHttp | tools |
当前仅预留枚举变体 |
| 11 | Gemini Provider | llm/provider |
协议差异大,实现成本较高 |
| 12 | 文件系统 MemoryStore 后端 | memory |
JSON/JSONL 轻量持久化 |
ContextSlot 上下文管理
模块归属:src/llm/context.rs(与 compact.rs 同级)
核心概念:ContextSlot 是一段带策略配置的消息列表,以 slot_id 为 namespace 独立持久化到 MemoryStore。支持三种模式、三种来源和派生关联(记录 parent_id)。
核心类型:
pub struct ContextSlot { id, session_id, config, messages, store }
pub struct SlotConfig { mode: SlotMode, source: SlotSource, budget, compact }
pub enum SlotMode {
Full, // 完整对话历史
Focused(FocusedConfig), // 聚焦:保持 LLM 注意力
Readonly, // 只读参考上下文
}
pub struct FocusedConfig { keep_system, recent_turns, inject_summary }
pub enum SlotSource {
New, // 全新空槽,独立持久化
Derived { parent_id, strategy: DeriveStrategy }, // 从父 slot 派生
Static(Vec<Message>), // 预置消息,不持久化
}
pub enum DeriveStrategy { Full, Focused(FocusedConfig) }
pub struct ContextBudget { system, history, tools, tool_results, reserve }
持久化 Key 命名:
slot_msg:{session_id}:{slot_id}:{index}→ 消息内容slot_meta:{session_id}:{slot_id}→SlotMeta(含parent_id)slot_rel:{session_id}:{child_id}:parent→"{parent_id}"
AgentSession 扩展:
create_slot(id, config)— 创建新 slotswitch_slot(id)— 切换当前 slotlist_slots()— 列出所有 slotderive_slot(id, parent_id, strategy)— 从父 slot 派生
与 ConversationMemory 的关系:保留不废除。ConversationMemory 继续服务传统对话场景。
v0.2 不做:
- ❌
slot.fork()/merge()— 分支方法推迟到 v0.3+ - ❌
inject_summary自动生成 — v0.2 仅消费端(从SessionMemory读取),生成在 v0.3+ - ❌ 血缘关系图遍历 — 只存
parent_id,不做查询
依赖:Phase 0(MemoryStore trait)、Phase 3(MemoryStore 持久化) 优先级:P1
v0.3+ 展望
已规划的功能
| 功能 | 说明 | 预计版本 |
|---|---|---|
| ContextSlot 分支(fork/merge) | 在决策点 fork 出子上下文,分支独立演进,可合并/丢弃 | v0.3 |
| 摘要自动生成 | Hook 驱动,OnTurnEnd 自动将对话摘要写入 SessionMemory,inject_summary 消费端已在 v0.2 就绪 |
v0.3 |
| 知识图谱 | 实体-关系图,docs/note-knowledge-graph-design.md 已记录设计 |
v0.3+ |
| Multi-Agent 协同(Swarm) | 子 Agent 委派、并行子任务、结果聚合 | v0.4+ |
| 精确 tokenizer 计数 | 绑定具体模型的 tokenizer 计数,替代当前的字符估算 | v0.3+ |
| 血缘关系图遍历 | 以 parent_id 为基础,提供 slot 血缘链查询 |
v0.3+ |
| Markdown 技能按需加载 | 兼容 SKILL.md 格式,按 prompt 上下文动态加载 |
v0.3+ |
| TokenJuice 语义压缩 | 对工具结果做语义压缩而非字节截断 | v0.3+ |
| Human-in-the-loop 审批 | 高危工具执行前的异步审批回调 | v0.3+ |
| RL 轨迹导出 | ShareGPT 格式轨迹、Atropos 集成 | v0.4+ |
明确不做(agcore 范围外)
| 功能 | 原因 |
|---|---|
| TUI / 多平台 Gateway | 应用层职责(Feishu / Telegram / Discord 桥接) |
| 配置自动加载(config/figment) | 配置来源策略应由上游应用决定,agcore 不定义配置格式 |
| 提示词自动优化 | 属于智能层,不应内建于 core 库 |
风险与建议
- 持久化依赖:
rusqlite+bundled零外部依赖编译,但 SQLite 不适配所有场景(分布式/高并发写)。MemoryStoretrait 的抽象层允许下游自行实现 Redis / PostgreSQL 后端 - ContextSlot 心智负担:
ContextSlot引入了一等抽象的复杂度。建议通过AgentBuilder默认创建"default"slot,让简单场景无感使用 - 向量检索生态:
VectorRetrievertrait-only 不绑定实现,需社区贡献或用户自行适配 pgvector / qdrant / lancedb - Scope 蔓延:agcore 定位为"支持库"而非"Agent 产品",始终以 trait + reference impl 为边界,业务循环留给上层
- API 稳定性:v0.2 引入
#[non_exhaustive]和#[deprecated]机制,但不承诺 SemVer 稳定——仍在快速迭代期
下一步行动
- v0.2 开发启动:按 P0 → P1 → P2 顺序推进,P0 五项必须全部交付
- ContextSlot 方案文档:输出正式方案文档到
docs/,记录 SlotConfig / SlotSource / DeriveStrategy 等设计决策 - 示例先行:每个 P0 功能先编写
examples/中的可运行示例,验证通过后再合入库代码 - 测试覆盖:SqliteStore 并发测试 + wiremock Provider roundtrip 测试 + ContextSlot 隔离/切换/派生测试
已完成 / 进行中阶段:
- ✅ Phase 0 Foundation — 全部交付物已完成
- ✅ Phase 1 Prompt Engineering — 全部交付物已完成
- ✅ Phase 2 Tool System — 全部交付物已完成
- ✅ Phase 3 Memory System — 全部交付物已完成
- ✅ Phase 4a Core Glue — 全部交付物已完成
- ✅ Phase 4b Task Execution — 全部交付物已完成
- ✅ Phase 4c Session Memory — 全部交付物已完成
- ✅ Provider IR 重构 — 统一类型系统 + OpenAI/Anthropic/DeepSeek/Qwen 适配
- ✅ LlmCycle 简化 — IR 消息类型切换 + Phase 0 桥接层移除
- ✅ v0.1 Release — 技术债扫清、MockProvider 公开化、7 个离线示例、README + 错误消息友好化、CHANGELOG 初始化
- 📋 v0.2 规划完成 — 生产就绪(Production-Ready Core),ContextSlot 上下文管理,12 项基础功能
v0.1 发布里程碑(2026-07-04)
质量基线:
| 指标 | 数值 |
|---|---|
cargo build --all-targets |
✅ 通过 |
cargo test --all-targets |
✅ 182 passed / 0 failed |
cargo clippy --all-targets -- -D warnings |
✅ 0 警告 |
离线示例(cargo run --example) |
✅ 7 个全部 exit 0 |
关键交付:
- Provider IR 重构 — 统一
Message/ContentBlock/MessageRequest/MessageResponse类型层;4 个 Provider 适配(OpenAI Chat / Anthropic Messages / DeepSeek / Qwen);LlmProvidertrait 签名同步切换 - LlmCycle 简化 —
LlmCycle内部消息类型切到 IR 层;移除 Phase 0 的OpenaiChatMessage ↔ Message桥接;测试从 116 → 182(含 provider 测试) MockProvider公开化 —agcore::llm::mock::MockProvider支持chat+chat_stream,无需 API key 即可运行示例- 7 个离线示例 —
prompt_composer/custom_tool/agent_session_demo/task_agent_demo/conversation_memory_demo/knowledge_search_demo/streaming_events_demo - 错误消息友好化 —
AgentError/LlmError/ToolError/MemoryError/PromptError全部面向最终用户改写(给出可操作的建议) - 文档完整 — README 完整版(快速上手 + 架构图 + 环境变量)、Apache-2.0 LICENSE